事务很容易产生bug。这是一个问题。
在广州的时候,出现的bug是集群的事务不同步,而这次在佛山出现的bug,是多数据源的问题。先说一下整体的情况。
OA系统,用到我们EOS作为整体框架,websphere5+db2 8.2 + EOS ,eos的版本号为52。用到了多数据源。
理论上来说,一个事务操作一个连接,所以在整个事务中间,如果需要用到另外一个连接,自然会报错。
比如在广州的时候,一个bizlet用到这段代码:
ProcessCaller pc = new ProcessCaller("common", "0", "-1","defaultAppID")
看上去,只是new 一个 ProcessCaller,没什么大不了的。但是实际上,请跟踪他的连接,会发现,他自己会new一个连接。如果这个时候你用调用该bizlet的事务里面的数据,当然,会拿不到里面的数据了。
而这次出现的问题是:
一个prP的事务里面,调用一个biz,bizA的数据源设定是A数据源,而biz里面的biz bizB里面,设定的是B数据源。这样有一个层次的关系。
prP事务>bizA>bizB
当prP事务调起bizA的时候,根据bizA的配置,默认的拿到A数据源,所以这个时候,增个事务是针对A数据源的,而在bizB里面,需要操作是拿到B的数据源,对B数据源对应的表进行操作。由于之前事务已经有一个数据源,这个时候,B数据源在该事务中是拿不到的,所以就会把错误抛出。
很明显,这个错误很正常,如果用到spring的事务,也应该会遇到这个问题。本来逻辑上,这样就是说不过去的。
该怎么解决?
update:
最后的解决方案,在bizB的里面,再次封装一次,封装的biz的属性里面获取另外一个连接的数据源,这样就可以了。对于 如果用到spring的事务,也应该会遇到这个问题。 这句话,可能是有问题的,嘿嘿,chengzhi说,XA的数据源是能满足这个要求的。
,小子无知,大胆猜测。