【问题标题】:How can the Bitronix transaction timeout value be increased in MOQUI?如何在 MOQUI 中增加 Bitronix 事务超时值?
【发布时间】:2014-09-16 13:04:13
【问题描述】:

在 Moqui 框架(1.4.1) 中开发应用程序时,出现了一个令人沮丧的问题,即 bitronix 事务超时。我无法理解发生这种情况的原因,唯一的解决方案是我必须重新启动系统。

我真的很想知道如何解决这个问题。

例外是这样的

【问题讨论】:

  • 您能否分享有关您所看到的错误和相关行为的更具体信息?事务超时错误一直在发生,您可以通过增加超时或更改 tx 结构等来解决它们。我从未见过它们导致需要重新启动系统...您能分享更多关于您的意思的详细信息吗?
  • 我已经为我得到的异常添加了截图。

标签: moqui bitronix


【解决方案1】:

在事务开始的地方设置事务超时。这是在您使用 Moqui 工具(例如服务或屏幕)编写的代码中,或直接使用 Moqui TransactionFacade 或 JTA 接口的 Java/Groovy/etc 代码中。

默认情况下,Moqui 屏幕不会在事务中运行,除非您设置 screen.@begin-transaction 属性来执行此操作。您的问题很可能出在长期运行的服务中,并且默认情况下 Moqui 服务在事务中运行。使用作为事务的服务的 service.@transaction-timeout 属性设置超时。默认情况下,服务使用已经存在的事务(如果有的话),所以这需要在事务实际开始的最外层服务上。

有关服务和事务管理的更多详细信息,请参阅使用 Moqui 制作应用程序一书,可从 moqui.org 下载。

您的代码中可能还有另一个问题,那就是浏览器请求的套接字超时(我在屏幕截图的日志中也看到了这一点)。有一些方法可以解决这个问题,但也有一些你不能轻易控制的事情,比如浏览器超时。对于一个好的 UI,最好不要让你的用户坐下来等待超过典型的 30-60 秒,这种超时开始出现。更改您的代码以在后台运行,并在需要时在屏幕上添加一些内容以监控作业的状态和/或进度。

【讨论】:

  • 那么,为了避免再次发生这种异常,我需要遵循哪些最佳实践?我应该为每项服务强制执行新事务吗?如果负载增加,以后系统会有什么问题吗?
  • 没有通用的最佳实践,这取决于你在做什么,所以我需要更多细节。在不知道您要做什么的情况下,一般建议在我之前的消息中...例如使用后台作业。为每项服务强制执行新事务是一个坏主意。事务应该按照你想要的原子(全部失败或成功)来构建,而不是按时间或其他类型的错误处理。
【解决方案2】:

如果您使用 java -jar load 命令加载大文件,您可以使用 timeout 参数将超时时间设置为秒,例如 3600,因为默认值为 600 秒。

有关加载命令参数的更多信息,请参见:

java -jar moqui.war help 

【讨论】:

    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    相关资源
    最近更新 更多