0

MyResourceManager を生成する pojo プロデューサーがあります。

@TraderResouceManager @RequestScoped public MyResourceManager(){ ... ... }

MyResourceManger は SLSB に注入されます

@inject @TraderDB プライベート MyResourceManager rm;

ディスポーザーは次のとおりです。

public void close(@Disposes @TraderResouceManager MyResourceManager rm) { rm.close(); }

質問

close() はいつ実行されますか?

トランザクションを閉じる前ですか、それともトランザクションを閉じた後ですか?

編集:質問にはおそらく追加の説明が必要です。データベース接続の類推を見てみましょう。

リクエストごとに新しい接続を作成する pojo を使用して、@RequestScoped で @producer を作成します。

必要なのは、リクエストの最後に接続を破棄することです。この接続は他の Bean によって共有されます (現時点では SLSB)。特定のリクエストでは、トランザクション内で実行されている多くの Bean が含まれる場合があります。したがって、すべてのトランザクションが論理的に閉じられた後にのみ、接続を閉じる必要があります。

質問 コンテナー管理トランザクションを使用する場合、上記のコードでこの動作を実現できますか?

4

1 に答える 1

0

Close()は、プロデューサーメソッドがリクエストスコープであるため、現在のリクエストが終了したときに実行されます。JSFリクエストまたはサーブレットからSLSBを呼び出す場合、それらのリクエストのライフクライによって、MyResourceManagerがいつ破棄されるかが決まります。SLSBがリモートの場合、コールが戻るとすぐに終了します。

于 2011-08-10T19:31:03.253 に答える