锁定老帖子 主题:分布式访问框架halo-dal设计思想
精华帖 (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要实现的 哦,我确实没有用到,虽然实现了这个方法。暂时只是按照规范实现。反正不影响。嘿嘿 |
|
返回顶楼 | |
发表时间:2012-05-07
wiki里面写了实现读写分离?这个是在哪里体现的呢?
|
|
返回顶楼 | |
发表时间:2012-05-07
rain2005 写道 wiki里面写了实现读写分离?这个是在哪里体现的呢?
这个其实也是用Parser来实现,其实也是用目前分表分裤的规则来实现,不过我再像一个更好的方式。可能会有改动 |
|
返回顶楼 | |
发表时间:2012-05-07
ak478288 写道 rain2005 写道 wiki里面写了实现读写分离?这个是在哪里体现的呢?
这个其实也是用Parser来实现,其实也是用目前分表分裤的规则来实现,不过我再像一个更好的方式。可能会有改动 是否可以在获取真正的数据源和表的时候传入readonly标记来判断呢? |
|
返回顶楼 | |
发表时间:2012-05-07
rain2005 写道
ak478288 写道
rain2005 写道
wiki里面写了实现读写分离?这个是在哪里体现的呢?
这个其实也是用Parser来实现,其实也是用目前分表分裤的规则来实现,不过我再像一个更好的方式。可能会有改动 是否可以在获取真正的数据源和表的时候传入readonly标记来判断呢?
public interface PartitionParser { /** * 根据内容进行分析,创建表的分区信息 * * @param tableLogicName * 逻辑表名称,也将会成为表的别名 * @param sqlInfo * 参考 {@link SQLInfo} * @param connectionStatus * 参考 {@link ConnectionStatus} * @return */ PartitionTableInfo parse(String tableLogicName, SQLInfo sqlInfo, ConnectionStatus connectionStatus); }
|
|
返回顶楼 | |
发表时间:2012-05-08
最后修改:2012-05-08
首先楼主写的东西很棒,但是有两个问题
1:这个访问框架是想干嘛? 是否是想用这个访问框架从DB访问这一层进行一次包装形成一套形态统一的"门面",然后充分利用这个门面所形成的接口优势完成更高级的功能? 2:分布式在哪里? 你这个框架如何实现分布式?是否有对Datasource包装的部分没有写出来?如果你不对Xa,或者现有的Datasource进行可配置的包装(不使用Xa,简化Xa的流程,不嵌套)怎么分布,如何分布? |
|
返回顶楼 | |
发表时间:2012-05-08
diz 写道 首先楼主写的东西很棒,但是有两个问题
1:这个访问框架是想干嘛? 是否是想用这个访问框架从DB访问这一层进行一次包装形成一套形态统一的"门面",然后充分利用这个门面所形成的接口优势完成更高级的功能? 2:分布式在哪里? 你这个框架如何实现分布式?是否有对Datasource包装的部分没有写出来?如果你不对Xa,或者现有的Datasource进行可配置的包装(不使用Xa,简化Xa的流程,不嵌套)怎么分布,如何分布? 回答你的问题: 1,这个框架要做的事情,就是基于Connection PreparedStatement这些jdbc接口的使用来实现分表分库访问数据库的目的。他并没有你所说的高级功能。他的功能只是实现对数据库的访问分布式访问,方便开发者使用。 2,框架如何实现分布式,是通过配置文件来进行设置,配置文件可以管理多个数据库链接池,这些数据库的连接池对使用者来说几乎是感觉不到的。你可以看看例子中querytest.xml的配置,也许你就明白了。例子中,我只写了2个数据库的配置。DataSource的包装思想确实没有写的很详细。谢谢指出。你可以看一下代码中带有的例子。 框架帖子地址在 帖子中给出了,你可以看一下。欢迎提建议。 |
|
返回顶楼 | |
发表时间:2012-05-08
rain2005 写道 还有这里不支持sql关键字大写,我好像记得hibernate生成的sql都是大写的?
已经更新了,解决了大小写的问题,稍后会找个hibernate环境测试一下 |
|
返回顶楼 | |
发表时间:2012-05-08
设计挺不错的
|
|
返回顶楼 | |
发表时间:2012-05-09
解析sql建议使用antlr
|
|
返回顶楼 | |