2017-01-27 5 views
0

私はIBM WebSphere Application Server 8で動作し、EJB 3.0ステートレスBeanを持つアプリケーションを持っています。このBeanは、EJB 2ステートレスBeanで構成されるサービスを呼び出します。 2番目のBeanはforループで呼び出されます。この手段は少なくとも300回呼ばれます。プロセスはトランザクションで行われます。 最初のBeanがそのようにマークされています60秒後にEJBリモート呼び出しがロールバックになる

@TransactionManagement(TransactionManagementType.CONTAINER) 
@TransactionAttribute(TransactionAttributeType.REQUIRED) 

秒豆:

<session-type>Stateless</session-type> 
<transaction-type>Container</transaction-type> 

時々、トランザクション全体が60秒以上かかります。このため、トランザクションのタイムアウトを600秒に設定しました。

totalTranLifetimeTimeout="600" 
LPSHeuristicCompletion="ROLLBACK" 
propogatedOrBMTTranLifetimeTimeout="600" 

しかし、私はまだ原因と解決策が見つからなかった問題に遭遇しました。 最初の呼び出しから60秒後に、サービス(方法B)は、トランザクションのロールバック属性をtrueに設定します。メソッドは最後まで実行されますが、このためにデータベースには何も保存されません。すべてがロールバックされます。

コンポーネントをtrue(コンテナまたはデータベース)に設定する理由とその理由についての情報を得るための解決策が見つかりませんでした。

私はすべてのことを正しく説明し、どんなアイデアや解決策も高く評価されることを希望します。

答えて

0

アプリケーションコンポーネントのトランザクションタイムアウトが設定されている場合は、表1、表2に示すように、グローバルタイムアウト値がthis knowledge center pageに変更されます。 コンポーネントトランザクションタイムアウトを設定する方法を説明する別のknowledge center pageがあります。 60に設定されているかどうかを確認し、設定されている場合は値を大きくします。

また、リモートEJB呼び出しであることに気付いたので、デフォルト値60秒を持つClient Inactivity Timeoutの値も参照してください。「最大継続時間を秒単位で指定します。リモート・クライアントからのトランザクション要求このタイムアウトを超えるクライアント非アクティブ期間は、このアプリケーション・サーバーでトランザクションがロールバックされる結果になります。最初のリンクからナレッジセンターのドキュメントごとに表示されます。

+0

ご返信ありがとうございます。 デプロイメント記述子またはサーバーのいずれかに「アプリケーションコンポーネントのトランザクションタイムアウト」が設定されていません。 一方、「Client Inactivity Timeout」は意味をなさない。しかし、それでも、両方のサーバーの値を120秒に変更しても、肯定的な結果は得られませんでした。 最初の投稿で述べたように、リモートejbはforループで呼び出され、最初の呼び出しから60秒後の最初の呼び出しでは、フラグはすでにtrueに設定されています。リモート呼び出しの開始時と終了時にSessionContext.getRollbackOnly()の値が記録されるため、これが表示されます。 –

関連する問題