EJB 事务在 Windows 和 Linux 部署之间的 Wildfly 8 上表现不同

问题描述 投票:0回答:1

与 Windows Server 相比,在 Linux 操作系统上部署时,我在 Wildfly 8 上托管的 Web 应用程序遇到了一个特殊问题。在我的应用程序中,我依赖 EJB 事务,默认情况下,它应该是原子的。但是,我注意到两个环境之间的事务行为有所不同。

在 Windows Server 上,一切都按预期运行,并且事务保持不变。然而,当我在 Linux 操作系统上部署相同的应用程序时,事务似乎被过早地切断了。经过一番调查,我发现这种行为可能是由于在 select 语句之前自动调用

flush()
方法造成的。

以下是一些其他详细信息:

  • 应用服务器:Wildfly 8
  • 操作系统:一种部署使用 Windows Server,另一种部署使用 Linux
  • 数据库:PostgreSQL 9.3
  • EJB 事务:预计是原子的
  • 问题:Linux 部署上的事务被切断,可能是由于 select 语句之前自动调用
    flush()

我已确保两个环境之间的配置保持一致。然而,我很难理解为什么会出现这种行为差异以及如何解决它。

是否有其他人在 Wildfly 8.3 上遇到过类似的 EJB 事务问题,特别是在不同操作系统之间?在 Linux 上部署时是否需要注意任何特定配置或设置以确保事务完整性?

任何见解或建议将不胜感激。谢谢!

linux jakarta-ee transactions eclipselink wildfly-8
1个回答
0
投票

最初,我怀疑操作系统可能发挥了作用。然而,进一步调查发现罪魁祸首是我在 Wildfly 8 上的数据源配置中的 JTA(Java Transaction API)属性。

了解JTA属性:

默认情况下,Wildfly 中的 JTA 属性设置为 true,从而启用容器管理的事务。这确保应用程序服务器处理事务生命周期(开始、提交、回滚)。但是,如果该属性无意中设置为 false,EJB 事务将不会由 Wildfly 管理,从而导致意外行为。

验证 Wildfly 8 上数据源配置中的 JTA 属性。确保将其显式设置为 true 或保留默认值(这也是 true)。这保证了容器管理的事务以及 EJB 事务的预期原子行为。

© www.soinside.com 2019 - 2024. All rights reserved.