gpt4 book ai didi

java - Seam 交易和 Arjuna TransactionReaper

转载 作者:行者123 更新时间:2023-11-29 08:46:03 33 4
gpt4 key购买 nike

所以在我正在处理的一个项目中,我有一个由 TimerService 触发并执行更新某些数据的方法的 Seam 组件。此方法通常运行几秒钟,但有时可能需要几分钟。

我的问题是,如果此方法花费的时间太长,Arjuna TransactionReaper 就会启动并终止该组件。默认超时设置为 5 分钟,这对所有其他组件来说已经足够了,我不想更改它。

这是我的代码的一些简单部分:

@Name("myComp")
@Stateful(mappedName = "myComp")
@Scope(APPLICATION)
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionTimeout(timeout = 3600) //own implementation, used by Transaction class, see below
public class MyComp implements MyCompLocal
{
@Override
public void update() {/*...*/}
}

在 StackOverflow 的某个地方(我找不到包含这个的确切问题,否则我会链接到它)我找到了一个解决方案,听起来不错:Overwrite Seams Transaction 类并在 UserTransaction 上设置超时,所以我这样做了:

@Name("org.jboss.seam.transaction.transaction")
@Scope(ScopeType.EVENT)
@Install(precedence=APPLICATION)
@BypassInterceptors
public class Transaction extends org.jboss.seam.transaction.Transaction
{
@Override
protected UserTransaction getUserTransaction() throws NamingException
{
UserTransaction ut = super.getUserTransaction();
ut.setTransactionTimeout(getTimeout()); //getTimeout() uses the value set by the TransactionTimeout annotation, done by analyzing the stacktrace and reflection
return ut;
}
}

从调用代码和在 UserTransaction 上设置超时的意义上来说,这实际上似乎是有效的。然而问题是 Arjuna 似乎并不关心这个,我仍然得到:

WARN  [arjuna] ARJUNA-12117 TransactionReaper::check timeout for TX 0:ffffc0a88364:126a:53eb7613:8a in state  RUN
WARN [arjuna] ARJUNA-12095 Abort of action id 0:ffffc0a88364:126a:53eb7613:8a invoked while multiple threads active within it.
WARN [arjuna] ARJUNA-12108 CheckedAction::check - atomic action 0:ffffc0a88364:126a:53eb7613:8a aborting with 1 threads active!
WARN [arjuna] ARJUNA-12121 TransactionReaper::doCancellations worker Thread[Transaction Reaper Worker 0,5,jboss] successfully canceled TX 0:ffffc0a88364:126a:53eb7613:8a
WARN [arjuna] ARJUNA-12117 TransactionReaper::check timeout for TX 0:ffffc0a88364:126a:53eb7613:8b in state RUN
WARN [arjuna] ARJUNA-12095 Abort of action id 0:ffffc0a88364:126a:53eb7613:8b invoked while multiple threads active within it.
WARN [arjuna] ARJUNA-12108 CheckedAction::check - atomic action 0:ffffc0a88364:126a:53eb7613:8b aborting with 1 threads active!
WARN [arjuna] ARJUNA-12121 TransactionReaper::doCancellations worker Thread[Transaction Reaper Worker 0,5,jboss] successfully canceled TX 0:ffffc0a88364:126a:53eb7613:8b

恰好在方法被调用五分钟后。因此,Arjuna 似乎根本不关心 UserTransaction 上的超时设置。有什么提示可以帮助我解决这个问题吗?

顺便说一句:JBossAS 6.1.0.Final、jdk_1.7.0_13、JBossTS 4.14.0.Final、Seam 2.2.2.Final

最佳答案

您不能为每个资源管理器设置超时(如果这是您尝试做的)但您可以为每个事务设置它(在调用 UserTransaction.begin 之前)

关于java - Seam 交易和 Arjuna TransactionReaper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25302790/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com