在Web应用程序中使用hibernate + spring + AS400数据库:
有3个数据源(每个地区一个),澳大利亚DS,英国DS和美国DS。所有数据源中的模式都是相同的。
现在需要将数据持久保存到数据源,规则是主要区域(由最终用户使用UI选择)应始终用作主数据源以保存数据。此外,如果主要区域不是美国(比如用户选择的英国区域),那么数据应该保存到英国数据源和美国数据源。
我知道一种简单的手动方法,即打开所有会话工厂并手动管理所有内容。 http://www.java-forums.org/database/867-hibernate-multiple-databases.html
有哪些其他替代品可用以及实施此方法的最佳方式?
答案 0 :(得分:0)
是否需要成为ACID?如果没有,我的第一个想法是添加一个@PostPersist,它将实体添加到JMS主题,该主题由3个客户端读取,每个客户端代表一个数据库。然后,每个客户端将验证该实体是否已在其数据库中更新(例如,通过检查乐观锁定列)。
使用这种方法,您可能会遇到数据一致性问题,并且您需要针对每个客户端的每个故障采取措施。另一方面,您可以避免延迟(这就是您首先拥有3个DataSource的原因)。
但实际上,有几种可能的解决方案: - )
答案 1 :(得分:0)
系统级(iSeries)方法是将您的澳大利亚和英国数据源远程日记记录到美国站点,并让美国站点将日志更改应用于其本地DB2。请注意,DB2 / 400上的SQL源始终是日志记录(以提供承诺控制功能),因此您只需启用远程日记功能。有关此功能的概述,请转至http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Fcl%2Fapyjrnchg.htm或类似操作系统,具体取决于您的操作系统版本。
开发自己应用日志更改的程序的另一种方法是使用其中一个打包的复制解决方案 - IBM DataReplicator,Vision Solutions的ODS / ODM等。