我在Weblogic服务器中部署了一个EJB。从另一个远程客户端,我使用JNDI查找EJB并调用一个方法,该方法在分布式事务中插入一些记录。然后,当它返回到远程客户端时,我尝试执行下面的一个活动,但它失败并显示以下结果:
A)尝试使用从EJB发回的密钥检索EJB在远程客户端中插入的对象,但无法找到记录。
B)尝试在远程客户端中插入不同的记录(对EJB插入的记录没有任何约束)(使用Eclipselink JPA)并抛出异常“ORA-02049:timeout:分布式事务等待锁定“
我没有在EJB端进行任何提交,而是让容器处理所有内容。我的事务属性在EJB服务器方法和客户端方法中设置为REQUIRED。
在EJB和远程客户端上都使用XA数据库连接。他们为什么不能看到彼此的变化?
任何人都可以对这个问题有所了解。我不确定这里发生了什么?
答案 0 :(得分:1)
我已经解决了这个问题。问题是EJB使用的连接不是XA。之前我假设我们现有的应用程序正在使用XA连接。因此,我必须将拦截器注释放在EJB上以使用XA连接,如下所示:
@Interceptors({JtaXaDataSourceRegistryInterceptor.class})
使用远程EJB和事务时,它需要在EJB所在的客户端和服务器中都具有XA连接,以参与数据库活动中的两阶段提交。