2012-03-28 19 views
0

EJBトランザクション内から呼び出します通話に時間がかかることがあります。しかし、コールの応答はmethod1 - > dbアップデートとレスポンスの次のステップを決定します。レスポンスはエンドユーザに戻ってくる必要があり、エンドユーザがこれまで待つことはできません。 EJBへは、これは私が持っているコードです

  1. 移動法2およびHTTP呼び出しがトランザクションではなく、法1のトランザクションが待機しないように、TransactionAttributeType.NEVERを置く:私は2つの方法でこのような状況を扱うことができる

    その上に。この場合、コンテナはmethod1のトランザクションを管理し、dbは更新せず、method2から返されなかった場合はnullを返します。 method1のトランザクションが「戻る」までにどれくらいの間待機しますか?

  2. 私はJBossアノテーションを使用し、method1()に2分のTransactionTimeoutを設定することができます。この場合、httpコールが2分以内に完了しない場合、method1はnullを返し、DBの更新は行いません。

これらの2つの方法のどちらが推奨され、耐故障性がありますか? あなたの洞察をお寄せいただきありがとうございます。

答えて

0
  1. TransactionAttributeType.NEVERを使用すると、トランザクションはさらに伝搬されません。 Future<V>オブジェクトを返すメソッドには、@Asynchronous注釈を使用できます。次に、オブジェクトのを呼び出して、操作のための所与の時間を待つ結果のタイプVを得ることができますが、EJB-3.1固有のものです。

  2. メソッドレベルまたはクラスレベルでJBoss固有の注釈@TransactionTimeoutを試すことができます。また、サーバのバージョンに応じて、jboss.xmlまたはjboss-service.xmlで設定することもできます。これはEJB-3.0では問題ありませんが、アプリケーションの移植性が緩和されます。

関連する問題