如何在JBoss AS 7.1中正确设置分布式事务?

时间:2016-07-06 12:24:14

标签: java-ee jboss jta

My scenary:一个Java EE应用程序,它从EJB调用一个方法,这两个方法都托管在JBoss AS 7.1.1服务器中。在CRUD页面中的插入和更新操作期间,JSF应用程序必须使用自己的DataSource保存自己的数据,并通过调用EJB方法将其他数据保存在其他应用程序中,这将使用其他DataSource。两个DataSource都配置为使用JTA (JBoss DataSource参数中标记的JTA复选框);

仅在更新操作期间,保存数据的尝试会引发异常。异常堆栈的最后部分如下:

update()

当我在EJB DataSource中禁用JTA时,问题就会消失。

我的环境出了什么问题?

提前致谢!

更新1

我被要求提供更多信息,所以就这样了。

这是使问题发生的用例:

  1. 用户点击屏幕上的链接,引导他/她进入编辑页面
  2. 在编辑页面中,用户更改值并单击“保存”按钮
  3. 保存按钮调用托管bean中提供页面的{{1}}方法
  4. update方法开始一个事务并运行另外两个方法:一个是针对为Web应用程序声明的DS(保存本地数据),另一个是公开来自另一个的某些功能的EJB方法。应用程序(在其他应用程序的上下文中保存数据)
  5. 两个DS都是同一数据服务器的路径,两个应用程序都托管在同一个JBoss实例中。

    第一种方法工作正常,第二种方法产生错误。由于抛出异常,整个事务将被回滚,并且数据库中没有任何实际发生。

    在我的理解中,这是一个简单的应用程序集成案例,其中一个应用程序通过使用Java EE标准技术(即EJB调用)集成到另一个应用程序。

    我希望这有助于我的理由。

1 个答案:

答案 0 :(得分:0)

我没有准确了解序列的样子。 我猜你的JSF应用程序使用的是一个使用另一个DS的EJB,对吧? 所以它是相同的应用程序和服务器。

如果你有多个DS,你需要有一个xa-datasource,你有吗? 如果您还有其他问题,请分享您的DS配置以及有关配置/应用程序的更多信息以及logile中的警告(最好是完整的呼叫顺序)。