0

インターセプターを介してデータベース呼び出しと Bean メソッド呼び出しにかかる時間を記録するロギング Bean があります。

2 つの @Asynchronous メソッドを呼び出す Bean があります。これら 2 つの @Asynchronous メソッドはデータベースを呼び出し、インターセプトされます。

ただし、ロギング Bean がログを記録すると、データベースが 0 ミリ秒かかっているように見えますが、これは正しくありません。このログ Bean と @Asynchronous 呼び出しのないすべてのインターセプターを使用すると、すべて正常に動作します。

グラスフィッシュ 3.1.2.2 を使用しています。ドキュメントhttp://glassfish.java.net/nonav/docs/v3/api/javax/enterprise/context/RequestScoped.htmlには、「リクエスト コンテキストが破棄されました: 非同期オブザーバー通知が完了した後」と書かれています。 @Asynchronous メソッドのロギング Bean インスタンスは、メソッドが完了すると破棄されますか? 目標を達成するために何を使用できますか?

4

1 に答える 1

0

複数のレイヤーがあります。

  1. CDI インターセプターを実行してから EJB を呼び出す CDI プロキシー。
  2. 非同期作業をスケジュールし、すぐに返す EJB プロキシ。
  3. 非同期スレッドで実行される EJB インターセプター。

おそらく、CDI インターセプターを使用しており、EJB コンテナーが非同期作業をスケジュールするのにかかる時間を測定しています。代わりに EJB インターセプタを使用するように切り替える (つまり、EJB メソッドに でアノテーションを付ける) と、作業の実行@Interceptorsにかかった時間を測定できます。

于 2013-03-16T20:15:55.323 に答える