2011-02-18 104 views
1

在web应用程序中使用的休眠+弹簧+ AS400数据库:(多数据源),使用休眠+弹簧镜像数据

有3个数据源(每个区域一个),DS为澳大利亚,DS为英国和DS为美国。所有数据源中的模式都是相同的。

现在需要将数据持久保存到数据源中,规则是主要区域(由最终用户使用UI选择)应始终用作主数据源以保存数据。另外,如果主要地区不是美国(比如用户选择的英国地区),那么数据应该同时存在于英国数据源和美国数据源。

我知道一个简单的手动方法来打开所有会话工厂并手动管理所有内容。 http://www.java-forums.org/database/867-hibernate-multiple-databases.html

什么是其他替代品可用和最好的方式来实现呢?

回答

0

是否需要ACID?如果不是,我的第一个想法是添加一个@PostPersist,它将实体添加到JMS主题,该主题由3个客户端读取,每个客户端代表一个数据库。然后,每个客户端将验证实体是否已经在其数据库中更新(例如,通过检查乐观锁列)。

使用这种方法,您可能会遇到数据一致性问题,您需要针对每个客户端的每个故障采取相应措施。另一方面,你会避免延迟(这就是为什么你有3个数据源的原因)。

但实际上,有:-)

+0

不幸的是,我不能介绍JMS,但有仅在spring + hibernate上工作,并可能支持某些数据库驱动程序(如果可以确保将数据写入多个数据源)。分布式事务是一个更大的野兽。此设置的主要目的是将美国数据源作为所有持续数据跨越地区的超集。 (如果美国数据源存在问题,那么繁荣!!但是现在假设美国数据源具有高可用性并且支持故障转移以具有这样的问题) – sachink 2011-02-18 17:36:13

0

系统级(i系列)方法有几个可能的解决方案将让您的澳大利亚和英国的数据源,以美国网站的远程日志,并有美国网站应用日记更改其本地DB2。请注意,DB2/400上的SQL源始终是日志记录的(以提供承诺控制功能),因此您只需启用远程日志记录即可。有关此功能的概述,请根据您的操作系统版本转至http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Fcl%2Fapyjrnchg.htm或类似内容。

来开发自己的程序的另一种适用日记变化是使用包装的复制解决方案之一 - IBM DataReplicator,Vision Solutions公司ODS/ODM等