为什么EJB Server和客户端在同一事务中看到彼此的数据库更改?

时间:2014-01-20 04:55:41

标签: java oracle java-ee transactions ejb-3.0

我在Weblogic服务器中部署了一个EJB。从另一个远程客户端,我使用JNDI查找EJB并调用一个方法,该方法在分布式事务中插入一些记录。然后,当它返回到远程客户端时,我尝试执行下面的一个活动,但它失败并显示以下结果:

A)尝试使用从EJB发回的密钥检索EJB在远程客户端中插入的对象,但无法找到记录。

B)尝试在远程客户端中插入不同的记录(对EJB插入的记录没有任何约束)(使用Eclipselink JPA)并抛出异常“ORA-02049:timeout:分布式事务等待锁定“

我没有在EJB端进行任何提交,而是让容器处理所有内容。我的事务属性在EJB服务器方法和客户端方法中设置为REQUIRED。

在EJB和远程客户端上都使用XA数据库连接。他们为什么不能看到彼此的变化?

任何人都可以对这个问题有所了解。我不确定这里发生了什么?

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。问题是EJB使用的连接不是XA。之前我假设我们现有的应用程序正在使用XA连接。因此,我必须将拦截器注释放在EJB上以使用XA连接,如下所示:

@Interceptors({JtaXaDataSourceRegistryInterceptor.class})

使用远程EJB和事务时,它需要在EJB所在的客户端和服务器中都具有XA连接,以参与数据库活动中的两阶段提交。