大叫好,我是JAVAEE新手,对于JTA不是很了解。在这里寻求一下帮助。
我有这样一个场景,我有2个APP SERVER,分别部署了2个DATASOURCE,以及使用了各自DATASOURCE的EJB。
现在我需要从其中1个APP SERVER中获取一个事务,执行2个APPSERVER中不同DATASOURCE的EJB业务,请问要保证该事务,我是否应该使用XA事务?
在实际项目中应该会使用WLS,现在测试阶段我用了2个JBOSS,但是我配置的数据源都是local-tx-datasource的,结果是如果我不加事务,2个EJB方法都能成功执行,但是我一旦加上事务,在第二个执行的方法总是会报错。因为我对JTA概念不是很清晰,所以希望有哪位有经验的前辈能分享一下理解,并指点一下我遇到的问题。
由于代码在公司,所以没法贴出整个源码,以下是一些伪代码片段:
我确定我的数据源配置成功,并且EJB也成功部署了。
//...
Context c1 = new InitContext(prop1);
Context c2 = new InitContext(prop1);
//service1在其中一个JBOSSAS中,该JBOSSAS里面配置的是Oracle的local-tx-datasource
Service1 s1 = (Service1)c1.lookup("service1/remote");
//service2在另一个JBOSSAS中,该JBOSSAS里面配置的是mssql2005的local-tx-datasource
Service2 s2 = (Service2)c2.lookup("service2/remote");
UserTransaction ut = (UserTransaction)c1.lookup("java:/UserTransaction");
//以下2个doService方法都执行了insert操作,当无论s1.doService在前还是s2.doService在前
//报错的总是第二个方法,但是当我去掉ut.begin();ut.rollback();就能成功执行,并且数据都能insert到DB中
ut.begin();
s1.doService(bean1);
s2.doService(bean2);
ut.rollback();
<p class="indent">
|
期待大家的帮助
kenshin54
[该贴被kenshin54于2010-01-06 23:34修改过]