【问题标题】:Websphere Runtime transaction timeout problemWebsphere Runtime 事务超时问题
【发布时间】:2020-03-16 14:51:19
【问题描述】:

我们使用两个应用服务器,Jboss 和 Websphere (v8.5.5.11)。 我们在本地平台上使用 jboss,但开发服务器使用 Websphere。我想在运行时更改事务超时。在 Jboss 上工作正常,但 websphere 不行。如何为 websphere 的线程设置事务超时。

JtaTransactionManager  tm = (JtaTransactionManager) SpringApplicationContext.getContext().getBean(PlatformTransactionManager.class);
tm.getUserTransaction().setTransactionTimeout(timeout);

【问题讨论】:

    标签: java spring jboss transactions websphere


    【解决方案1】:

    这里是获取 WebSphere Application Server 事务管理器以在线程上设置事务超时(以秒为单位)的示例,

    com.ibm.tx.jta.TransactionManagerFactory.getTransactionManager().setTransactionTimeout(timeout);
    

    【讨论】:

    • 我添加了这个依赖项并尝试了这个代码但不起作用,我的流程就像这样每个soap请求都会收到一个bean,并且这个bean知道什么run class方法像请求头一样。并在运行时设置事务时间。我想更改每个方法动态运行的超时。上面的代码行适用于 jboss ,但不适用于 websphere。
    • 当您调用此代码时,事务是否可能已经开始?如果是这样,它将无济于事 - 它只会应用于线程上的下一个事务。
    • 我们在调用此代码之前定义事务超时。重要的是,我们使用 CMT,而不是 BTM,也许它对您的建议有帮助
    • 好的,这很有道理。然后容器已经启动了事务,因此调用 setTransactionTimeout API 为时已晚,无法提供帮助。此处的应用服务器之间必须存在差异,即事务超时是否可以追溯应用于现有事务。您是否可以切换到应用程序/bean 管理的事务? ``` UserTransaction tran = InitialContext.doLookup("java:comp/UserTransaction"); tran.setTransactionTimeout(超时); tran.begin(); ... tran.commit(); ```
    • 项目的主要逻辑是充当网关。根据肥皂附带的请求,在运行时调用单个 bean 上的某些方法。我们在运行时为我们调用的方法确定事务超时。我们无法将这种风险确定为 BMT。所以我们必须使用CMT。我们可以为 JBOSS TJA.getUserTransaction.setTimeout() 做这个。我尝试使用您为 Was 所说的代码,但超时不起作用
    猜你喜欢
    • 1970-01-01
    • 2020-05-27
    • 2020-09-17
    • 1970-01-01
    • 2016-08-13
    • 2023-03-15
    • 2010-12-24
    • 1970-01-01
    • 2015-03-21
    相关资源
    最近更新 更多