2017-01-18 12 views
0

JBoss 6.1.0に大きな懸念があります。これはマルチスレッドアプリケーションであり、BMTとSybase DBでステートレスEJBを使用しています。使用されるJDKは1.7.76uです。ユーザートランザクションが開始されます。クエリが実行されましたが、関連スレッドは1時間後にコミットを試みます。実行中のスレッドに何が起こったのか分かりません。コードではなく、中断されています。JBoss 6.1.0で長時間トランザクションが中断されたスレッド

スレッドが何時間も中断された理由について誰でも貴重なポインタを与えてください。明らかに1時間後に、スレッドの再開とCOMMITまたはROLLBACKのどちらかの試行は失敗し、デフォルトのトランザクションタイムアウトが300秒(JBoss 6のデフォルト値)であるため失敗しました。

2017-01-09 10:01:49,389 DEBUG [TestDAO] [EventId: ] [pool-63-thread-6] SQL SELECT QUERY 
2017-01-09 10:01:49,391 DEBUG [TestDAO] [EventId: ] [pool-63-thread-6] ['dao.rowsProcessed']: 1 rows processed 
2017-01-09 10:01:49,389 DEBUG [TestDAO] [EventId: ] [pool-63-thread-6] SQL UPDATE QUERY 
2017-01-09 10:01:49,391 DEBUG [TestDAO] [EventId: ] [pool-63-thread-6] ['dao.rowsUpdated']: 1 row updated 
2017-01-09 11:05:48,213 DEBUG [DAOUtils] [EventId: ] [pool-63-thread-6] commitTx 
2017-01-09 11:05:48,214 ERROR [DAOUtils] [EventId: ] [pool-63-thread-6] commitTx() ARJUNA-16063 The transaction is not active! 
2017-01-09 11:05:48,215 DEBUG [DAOUtils] [EventId: ] [pool-63-thread-6] rollbackTx 
2017-01-09 11:05:48,215 ERROR [DAOUtils] [EventId: ] [pool-63-thread-6] rollbackTx() java.lang.IllegalStateException - BaseTransaction.rollback - ARJUNA-16074 no transaction! 

答えて

0

タイムアウトしているトランザクションが長時間実行されているようです。

"取引が有効ではありません!"トランザクションのタイムアウトによって発生します。トランザクションがタイムアウトすると、トランザクションマネージャはトランザクションマネージャを非同期にロールバックし、コンポーネントがトランザクションに再度アクセスしようとすると(コミットまたはロールバックするなど)、JTA仕様に準拠することはできません。

デフォルトのトランザクションタイムアウトは、アプリケーションサーバー構成の「トランザクション」サブシステムの「default-timeout」属性で定義されています。

  • デフォルトは300秒/ 5分です。

  • デフォルトのトランザクションタイムアウトを増やすために値を変更することができます。

  • トランザクションリーパー/トランザクションタイムアウトを無効にするには、値を0に設定します。

デフォルトタイムアウトの変更を適用するには、アプリケーションサーバーVMを再起動する必要があります。

<subsystem xmlns="urn:jboss:domain:transactions:1.4"> 
    <coordinator-environment default-timeout="300"/> <!-- HERE --> 
</subsystem> 

メッセージを処理するのに5分以上かかることがありますので、トランザクションがタイムアウトしているようです。

このような状況を回避するには、トランザクションのタイムアウト値を大きくすることをお勧めします。トランザクションを完了するのに要する時間を短縮するためにアプリケーションコードをリファクタリングできるとよいでしょう。したがって、アプリケーションロジックがこの場合のシナリオを正しく処理している可能性があります。

+0

感謝します。あなたもJBoss Developerサイトで私に答えてくれることを願っています。私は問題の説明をあなたに詳細に答えました。 https://developer.jboss.org/thread/273677これは非常に散発的な問題です。私はこれがJBossのあらゆる環境やランタイムの問題に関連する可能性が強く疑われます。あなたからのヒントはとても役に立ちます。 – sridhar

0

JBossフォーラムで述べたように、これはトランザクションのタイムアウトには問題ありません。 データベースのロックがトランザクションによって保持されるため、これにより他のすべてのアプリケーションがブロックされるため、トランザクションのタイムアウトを延長することはできません。

トランザクションを実行するスレッドはフリーズします。このスレッドがコミットされない理由についてのヒントは、大きな助けになるでしょう。

RGDS Manoharさん応答.. Anupため

関連する問題