【问题标题】:Overwrite WebSphere default transaction timeout覆盖 WebSphere 缺省事务超时
【发布时间】:2020-05-27 19:13:01
【问题描述】:

我在 WebSphere 上有一个应用程序,默认事务是 150 秒,我不想更改它。 但是我有一个 EJB 计时器,有时它需要太长时间(超过 150 秒)才能完成并抛出 TimeoutException。

我怎样才能仅覆盖此方法/bean 的事务超时?

@Timeout
public void mainService(Timer time) {
    // some code
}

【问题讨论】:

    标签: transactions timeout ejb websphere


    【解决方案1】:

    下面的 StackOverflow 帖子提供了这个问题的答案:

    Bean Transaction Timeout in WebSphere using EJB Timer

    那篇文章没有提供 ibm-ejb-jar-ext.xml 文件的完整示例,可能很难找到,所以我将在此处包含一个。

    <?xml version="1.0" encoding="UTF-8"?>
    <ejb-jar-ext xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-ext_1_1.xsd" version="1.1">
        <session name="YourSessionBean">
            <global-transaction transaction-time-out="300"/>
        </session>
    </ejb-jar-ext>
    

    您需要替换您的 bean 名称并将 ibm-ejb-jar-ext.xml 文件(如果您还没有的话)放在您的 EJB 部署描述符 ejb-jar.xml 旁边

    【讨论】:

    • 注意:ibm-ejb-jar-ext.xml中的配置会设置bean的事务超时时间。如果您绝对只想为一种方法更改它,那么您必须将 bean 转换为使用 bean 管理的事务,然后在方法中使用 javax.transaction.UserTransaction.setTransactionTimeout()。这当然会要求所有方法都更改并使用 UserTransaction 来管理事务,并且 bean 将无法参与在 bean 方法外部启动的事务。
    猜你喜欢
    • 2016-08-13
    • 2011-10-31
    • 1970-01-01
    • 2020-09-17
    • 2023-03-15
    • 2019-08-16
    • 2014-01-09
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多