- javax.transaction.global.timeout的作用是什么?
- 我需要在CheckpointAlgorithm中实现checkpointTimeout()方法 吗?
- 服务器配置级别有什么吗?这如何与应用程序级别的设置进行交互?
1 回答
(编辑 2016-12-02: 重新处理了为应用程序事务设置超时值“0”时的默认行为的解释)。
概述
让我描述一下应用程序级选项以及它如何与服务器级超时交互。
在 WebSphere Liberty Java Batch 的块步骤中,您可以设置应用程序级超时,或者将超时值“0”设置为默认为服务器级超时。
此外,您还可以通过单独的服务器级设置为任何非零应用程序级超时值设置上限。
应用程序级超时
可以设置块事务超时:
在 XML 中(静态)
在具有特殊步骤属性的 JSL 中的步骤级别: javax.transaction.global.timeout (秒)
例如
<step id="MyStep">
<properties>
<!-- In seconds -->
<property name="javax.transaction.global.timeout" value="120"/>
如果未在 XML 中明确定义,则默认为 180(秒)。
在 Java 中(动态)
如果您需要更多动态/编程控制,您可以实现自定义CheckpointAlgorithm并编写其checkpointTimeout()以返回您想要的任何内容(即使您真的想要每个块的不同值)。
服务器(JVM)级超时
设置应用程序超时值的上限
您可以防止应用程序设置过大的超时值。
在服务器配置 (server.xml) 中使用propogatedOrBMTTranLifetimeTimeout:
<transaction propogatedOrBMTTranLifetimeTimeout="90s"/>
这将作为任何非零应用程序超时值的上限,无论是通过javax.transaction.global.timeout
还是您的checkpointTimeout()方法,
未设置应用程序超时时的默认超时
如果javax.transaction.global.timeout
设置为'0'或您的checkpointTimeout()方法返回'0',您将从服务器获得默认超时。
此超时值默认为 120 秒。
要更改服务器配置(server.xml),请使用totalTranLifetimeTimeout,例如:
<transaction totalTranLifetimeTimeout="60s"/>
笔记:
但是,如上所述,如果javax.transaction.global.timeout
根本没有设置应用程序超时默认为 180,因此totalTranLifetimeTimeout不会发挥作用。
其他注释/参考
注意:WDT工具的设计视图使使用和记住这些服务器配置属性值变得更加容易。
映射到 WebSphere Application Server 传统配置
这里的propogatedOrBMTTranLifetimeTimeout属性基本上映射到传统中的最大事务超时时间,而totalTranLifetimeTimeout更明显地映射到传统中的总事务生命周期超时。
本文档中描述了一些很好的示例,这些示例在 Liberty 中仍然很重要。