我正在尝试在WebSphere Application Server中实施Web服务原子事务(强制使用7.0版,但也尝试使用8.5版)。
基本上,我有两个JAX-WS服务(CallerService
和CalleeService
)互相调用,并在XA数据源(Oracle)中写东西。 CallerService
调用CallerBean
EJB,EJB将在Oracle表中插入一行,然后调用CalleeService
,后者对数据库进行相同的插入。
CallerBean
有@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
,而CalleeBean有@TransactionAttribute(TransactionAttributeType.MANDATORY)
。第二个失败,错误为Global tx is required
,因此事务无法正常工作。
我已将WSAT策略添加到WSDL中,并根据https://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/cjta_wstran.html在WebSphere中配置了事务策略,并已启用在ibm-ejb-jar-ext.xml中发送WSAT上下文。
可以在https://github.com/ike3/lkp_transactions/tree/was7上找到该代码。我还有一个具有相同注释配置的分支,它完全可以在WildFly应用程序服务器上运行,而无需任何配置。
Websphere Application Server支持吗? 我可以在WebServices和EJB上使用透明事务配置吗?