1

GlassFishv3で実行されているJSF2.0アプリケーションがあります。メインアプリケーションセッション用にJPAを介してデータベースデータを提供するEJBがあります。非IDEアプリサーバーでも、EJB呼び出しは非常に低速です。一部のページ間では、ユーザーは次のページに移動するまで10秒以上待つ必要があります。

EJBは同じアプリケーションサーバー上で実行され、Localインターフェイスのみが使用されます。EJBは@EJBアノテーションを介して注入されます。

手がかりはありますか?

よろしくお願いします、ダニエル

編集解決策については私の答えを参照してください。

4

3 に答える 3

2

コードのプロファイリングやビジネスロジックのすべての部分の単体テストを行わずに判断するのは困難であり、どのステップにこれだけの時間がかかるかを確認できます。私の最初の疑いは、DBのパフォーマンスです。たぶん、テーブルには何百万ものレコードが含まれていて、インデックスが不十分であるため、単純SELECTに経年変化が発生します。ネットワーク帯域幅が不十分なため、データの転送に時間がかかる可能性があります。

この時点で、ほとんど情報が与えられていないので、それがすべてである可能性があります。プロファイルするだけです。

于 2010-09-11T18:14:23.433 に答える
1

デバッグ時に、アプリはEJB呼び出しで数秒間スタックし、その後、EJBメソッド内にジャンプして、正常に実行されます。

詳細を提供する必要があります。

  • インターフェースを使用していますLocalRemote?クライアント(Webアプリ)はリモートマシン上にありますか?
  • EJBにどのようにアクセスしますか?彼らは注入されていますか?JNDIルックアップを実行しますか?
  • 何を測定しましたか?(プロファイリング中またはSystem.nanoTime()さまざまなポイントでの使用中)
  • メジャーは、ほとんどの時間が呼び出し自体に費やされていることを本当に示していますか?

これらの質問に答えることは、どこを見ればよいか、考えられる原因を特定するのに役立つはずです。

于 2010-09-12T06:36:19.447 に答える
1

Local以前は、とインターフェイスの両方Remoteが実装されており、 Remoteインターフェイスのみが使用されていたという問題がありましたが、その必要はありません。両方のインターフェースに同じメソッドがありました。これは、私が受け取ったNetBeansの警告メッセージによると避けるべきものです。

セッションBeanにリモートとローカルのビジネスインターフェイスがある場合、両方のインターフェイスに共通のメソッドがあってはなりません。

より詳細に:

リモートビジネスメソッドの呼び出しセマンティクスは、ローカルビジネスメソッドの呼び出しセマンティクスとは大きく異なります。このため、セッションBeanにローカルビジネスメソッドとリモートビジネスメソッドがある場合、両方のインターフェイスに共通のメソッドがあってはなりません。以下の例は、誤った使用例です。

Remote public interface I1 { void foo();}
Local public interface I2 { void foo();}
Stateless public class Foo implements I1, I2 { ... }

したがって、解決策は、インターフェイスを削除し、Remoteインターフェイスを使用するようにアプリケーションロジックを設定することLocalでした。

于 2010-09-15T14:57:31.430 に答える