我已经在Weblogic服务器中部署了EJB。从另一个远程客户端,我使用JNDI查找EJB并调用一种在分布式事务中插入一些记录的方法。然后,当它返回到远程客户端时,我尝试执行以下活动之一,但失败并显示以下结果:
A)尝试使用从EJB发回的密钥来检索EJB在远程客户端中插入的对象,但找不到该记录。
B)尝试在远程客户端(使用Eclipselink JPA)中插入不同的记录(对EJB插入的记录没有任何约束),并且抛出异常“ ORA-02049:超时:分布式事务等待锁”
我不在EJB端执行任何提交操作,而是让所有操作由容器处理。我的事务属性在EJB服务器方法和客户端方法中设置为REQUIRED。
在EJB和远程客户端上,两者都使用XA数据库连接。他们为什么都不能看到彼此的变化?
任何人都可以阐明这个问题。我不确定这是怎么回事?
我已经解决了这个问题。问题是EJB使用的连接不是XA。早些时候,我假设我们现有的应用程序正在使用XA连接。因此,我必须将拦截器批注放置在EJB上才能使用XA连接,如下所示:
@Interceptors({JtaXaDataSourceRegistryInterceptor.class})
使用远程EJB和事务时,它需要在EJB所在的客户端和服务器中都具有XA连接,以参与数据库活动的两阶段提交。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句