论坛首页 Java企业应用论坛

分布式访问框架halo-dal设计思想

浏览 12335 次
精华帖 (2) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-07  
rain2005 写道
就是

@SuppressWarnings("unchecked")  
    public <T> T  unwrap(Class<T> iface) throws SQLException {  
        Assert.notNull(iface, "Interface argument must not be null");  
        if (!DataSource.class.equals(iface)) {  
            throw new SQLException("DataSource of type [" + getClass().getName() +  
                    "] can only be unwrapped as [javax.sql.DataSource], not as [" + iface.getName());  
        }  
        return (T) this;  
    }  
  
    public boolean isWrapperFor(Class<?> iface) throws SQLException {  
        return DataSource.class.equals(iface);  
    }  

这两个方法就是Wrapper要实现的


哦,我确实没有用到,虽然实现了这个方法。暂时只是按照规范实现。反正不影响。嘿嘿
0 请登录后投票
   发表时间:2012-05-07  
wiki里面写了实现读写分离?这个是在哪里体现的呢?
0 请登录后投票
   发表时间:2012-05-07  
rain2005 写道
wiki里面写了实现读写分离?这个是在哪里体现的呢?

这个其实也是用Parser来实现,其实也是用目前分表分裤的规则来实现,不过我再像一个更好的方式。可能会有改动
0 请登录后投票
   发表时间:2012-05-07  
ak478288 写道
rain2005 写道
wiki里面写了实现读写分离?这个是在哪里体现的呢?

这个其实也是用Parser来实现,其实也是用目前分表分裤的规则来实现,不过我再像一个更好的方式。可能会有改动


是否可以在获取真正的数据源和表的时候传入readonly标记来判断呢?
0 请登录后投票
   发表时间:2012-05-07  
rain2005 写道
ak478288 写道
rain2005 写道
wiki里面写了实现读写分离?这个是在哪里体现的呢?

这个其实也是用Parser来实现,其实也是用目前分表分裤的规则来实现,不过我再像一个更好的方式。可能会有改动


是否可以在获取真正的数据源和表的时候传入readonly标记来判断呢?



你说的有理,我目前就是这样做的,看Parser的代码: connectionStatus就有你需要的信息,但是也不能完全按照readonly来判断,可能需要结合业务做选择

 

public interface PartitionParser {

    /**
     * 根据内容进行分析,创建表的分区信息
     * 
     * @param tableLogicName
     *            逻辑表名称,也将会成为表的别名
     * @param sqlInfo
     *            参考 {@link SQLInfo}
     * @param connectionStatus
     *            参考 {@link ConnectionStatus}
     * @return
     */
    PartitionTableInfo parse(String tableLogicName, SQLInfo sqlInfo,
            ConnectionStatus connectionStatus);
}
 

 

0 请登录后投票
   发表时间:2012-05-08   最后修改:2012-05-08
首先楼主写的东西很棒,但是有两个问题

1:这个访问框架是想干嘛?
  是否是想用这个访问框架从DB访问这一层进行一次包装形成一套形态统一的"门面",然后充分利用这个门面所形成的接口优势完成更高级的功能?

2:分布式在哪里?
  你这个框架如何实现分布式?是否有对Datasource包装的部分没有写出来?如果你不对Xa,或者现有的Datasource进行可配置的包装(不使用Xa,简化Xa的流程,不嵌套)怎么分布,如何分布?




0 请登录后投票
   发表时间:2012-05-08  
diz 写道
首先楼主写的东西很棒,但是有两个问题

1:这个访问框架是想干嘛?
  是否是想用这个访问框架从DB访问这一层进行一次包装形成一套形态统一的"门面",然后充分利用这个门面所形成的接口优势完成更高级的功能?

2:分布式在哪里?
  你这个框架如何实现分布式?是否有对Datasource包装的部分没有写出来?如果你不对Xa,或者现有的Datasource进行可配置的包装(不使用Xa,简化Xa的流程,不嵌套)怎么分布,如何分布?






回答你的问题:
1,这个框架要做的事情,就是基于Connection PreparedStatement这些jdbc接口的使用来实现分表分库访问数据库的目的。他并没有你所说的高级功能。他的功能只是实现对数据库的访问分布式访问,方便开发者使用。

2,框架如何实现分布式,是通过配置文件来进行设置,配置文件可以管理多个数据库链接池,这些数据库的连接池对使用者来说几乎是感觉不到的。你可以看看例子中querytest.xml的配置,也许你就明白了。例子中,我只写了2个数据库的配置。DataSource的包装思想确实没有写的很详细。谢谢指出。你可以看一下代码中带有的例子。

框架帖子地址在 帖子中给出了,你可以看一下。欢迎提建议。
0 请登录后投票
   发表时间:2012-05-08  
rain2005 写道
还有这里不支持sql关键字大写,我好像记得hibernate生成的sql都是大写的?


已经更新了,解决了大小写的问题,稍后会找个hibernate环境测试一下
0 请登录后投票
   发表时间:2012-05-08  
设计挺不错的
0 请登录后投票
   发表时间:2012-05-09  
解析sql建议使用antlr
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics