我正在使用访问Oracle数据库的应用程序。有时,该数据库上的对象(行)是通过我的应用程序之外的进程锁定的。
我遇到的问题是,当交易到达交易超时时,Arjuna协调员试图回滚交易,但不成功
堆栈跟踪是以下
09:15:42,494 WARN [InterceptorsFactory] EJBTHREE-1246: Do not use InterceptorsF
actory with a ManagedObjectAdvisor, InterceptorRegistry should be used via the b
ean container
09:16:12,287 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.Transactio
nReaper_18] - TransactionReaper::check timeout for TX -7ffd9392:a9b:507ff0a4:97
in state RUN
09:16:12,292 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.BasicActio
n_58] - Abort of action id -7ffd9392:a9b:507ff0a4:97 invoked while multiple thre
ads active within it.
09:16:12,294 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.CheckedAct
ion_2] - CheckedAction::check - atomic action -7ffd9392:a9b:507ff0a4:97 aborting
with 1 threads active!
09:16:12,789 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.Transactio
nReaper_18] - TransactionReaper::check timeout for TX -7ffd9392:a9b:507ff0a4:97
in state CANCEL
09:16:13,291 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.Transactio
nReaper_18] - TransactionReaper::check timeout for TX -7ffd9392:a9b:507ff0a4:97
in state CANCEL_INTERRUPTED
09:16:13,293 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.Transactio
nReaper_6] - TransactionReaper::check worker Thread[Thread-11,5,jboss] not respo
nding to interrupt when cancelling TX -7ffd9392:a9b:507ff0a4:97 -- worker marked
as zombie and TX scheduled for mark-as-rollback
09:16:13,297 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.Transactio
nReaper_11] - TransactionReaper::check failed to mark TX -7ffd9392:a9b:507ff0a4:
97 as rollback only
我正在使用JBOSS-5.1.0.GA,Hibernate 3.3.1.GA和Oracle 9.2.08。
我已经完成了几次测试,而行锁定后,回滚行不起作用。自交易超时以来已经过去的时间都没关系。如果我在交易超时后解锁该行,则在那一刻开始回滚。
我在网络上进行了一些研究,但没有发现完全相同的错误。
谢谢。
迭戈。
最后我找到了答案(在stackoverflow上)。它不能解决我的问题(因为发生的事情是预期的行为),但解释了正在发生的事情。
事务超时EJB对线程的影响
在这里我找到了如何启用jboss上的arjuna登录:
http://germanogiudici.wordpress.com/2011/09/02/how-to-to-log-transaction-informations-informations-in-jboss-4-2-3-ga/
我希望这有助于获取有关正在发生的事情的更多信息。
我直到今天发现的是,持有交易的workerThread在cancel()方法上没有完成。但是,当我当前的日志级别时,我看不到发生了什么。
我将在调试后发布更多新闻。
注意:JBOSS 5.1中的交易的XML配置是JBOSSTS-Properties.xml Not Jbossjta-properties.xml。