快速业务通道

hibernate多服务器间数据同步 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

hibernate多服务器间数据同步

时间:2011-03-07

需求功能介绍:

为性能考虑,单一服务器改成集群(每太服务器数据允许在一定时间内保持相步),给出的修改时间短,不过代码持久层比较统一(hibernate 感谢天还好是她! )。网络连接不稳定(铁路内网!)。

完成后效果:

当网络连接成功时,多数据库的同步。

当网络连接失败时,本地应用程序运用hibernate拦截器拦截正操作对象并记录下操作动作,序列化到本地时局库 z_jcyy_tb 表中。表数据属性为:id,inputdate(记录时间),object(序列对象),action(操作动作)。并安一定时间测试连接。如果成功,读取 z_jcyy_tb 表中数据 反序列化 再同步到 其他数据库中。

代码说明:

1.新Session 建立

hibernate.cfg.xml 在文件<session-factory>中添加

<property name="connection.url_b">jdbc:oracle:thin:@192.168.1.114:1521:JCYY</property>    <property name="connection.username_b">jcyy</property>    <property name="connection.password_b">jcyy</property>

TBDao -> OpenSession()

private static String url_b = null ; private static String use_b = null ; private static String pass_b = null ; private static String dirver_b = null ; static {try { //取得hibernate.cfg.xml逻辑路径,和原来程序关联上       Field field  =  SessionManager.class.getDeclaredField("CONFIG_FILE_LOCATION"); field.setAccessible( true ); String path = (String) field.get(SessionManager. class ); //通过 dom4j 加载 配置文件      Document docT = new SAXReader().read( TBDao.class.getResourceAsStream(path) ); //正则+xpath读取 在hbn文件中加入的<property name="..._b"> 的属性      String xpath = "/hibernate-configuration/session-factory/property[@name=''XPATH_I'']" ; Pattern p = Pattern.compile("(XPATH_I)"); Matcher ma = p.matcher(xpath); url_b = DocumentHelper.createXPath( ma.replaceAll("connection.url_b") ).selectSingleNode(docT).getText(); use_b = DocumentHelper.createXPath( ma.replaceAll("connection.username_b")).selectSingleNode(docT).getText(); pass_b = DocumentHelper.createXPath( ma.replaceAll("connection.password_b")).selectSingleNode(docT).getText(); dirver_b = DocumentHelper.createXPath( ma.replaceAll("connection.driver_class")).selectSingleNode(docT).getText(); } catch (Exception e) {e.printStackTrace();}} //利用hbn的SessionFactory得到 openSession(Connection); 打开异地数据库连接。 //利用私有反射得到 加载完成的SessionFactory    public Session openSessionb(){ try { Class.forName(dirver_b); Connection conn = DriverManager.getConnection(url_b,use_b,pass_b); Field[] fields  =  SessionManager.class.getDeclaredFields(); Field field = null ; for(int i=0;i<fields.length;i++){ if( SessionFactory.class.equals( fields[i].getType() ) ) field = fields[i]; } field.setAccessible(true); SessionFactory sessionFactory = (SessionFactory) field.get(SessionManager.class ); return sessionFactory.openSession(conn); } catch (Exception e) { System.out.println("--没有连接到总服务(openSessionb)--"); return null ; } }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号