3

Java EE App Serverで実行されているアプリケーションがあり、パートナー企業のWebサービスを呼び出す必要があります。

JDK(1.6)のwsimport.exeを使用して、クライアントクラスを生成しました。サービスをインスタンス化し、Webサービスを呼び出すためにポートを取得します。

Webサービスへの最初の呼び出しが遅いことに気づきました。これは、WSDLを検証しているためだと思われます。後続の呼び出しは高速です。

WSDLをローカルに保持することができ、それによって最初の呼び出しが高速化されるようです。

アプリを最適化するために、クライアントのプールを作成できると考えていました。これには、アプリにスロットルがあるという追加の利点があります。たとえば、5つのクライアントのプールがあるとすると、最大で5つのクライアントにメモリを使用します。サーバーの負荷が突然増加した場合でも、クライアントの数に制限がないとメモリ不足エラーが発生することを心配する必要はありません。過去の経験に基づいて、Webサービスクライアントは大量のメモリを使用すると想定しています...

  • プールを気にしませんか?
  • 遅いWebサービスへの最初の呼び出しをどのように乗り越えますか?
  • そのプールを作成するための最良の方法は何ですか。そうすれば、最小限のプログラミングを行う必要があります(つまり、ライブラリ/ APIなどを使用したいので、車輪の再発明やコーディングを行う必要はありません。毛むくじゃらのバグ)。
4

3 に答える 3

4

Apache Commons Poolはまさに私が求めているものかもしれません。

構成可能で、すべてを考えているようです。

于 2012-07-15T22:22:00.920 に答える
0

リンクに示されているマスター/スレーブ設定のAKKAは、別の回答にリストされているApache Commons Poolよりも少し複雑ですが、うまく機能する可能性があります。AKKA は、独自のスレッドを持つ実行プールも使用しますが、これは Java EE の世界では厳密には許可されていません。いずれにせよ、AKKA によって処理されるスレッドの数は最小限であるため、アプリケーション サーバーによるスレッドの制御に干渉しないでください。

于 2012-07-15T22:25:33.460 に答える
0

@WebServiceRef私の同僚は、EJB のフィールドでアノテーションを使用できることを提案しました。これは、サーバーがクライアントへの参照を注入し、そこから EJB を呼び出す各スレッドのポートを作成できるというものです。

注入された参照はプールから来ていると思いますが、仕様ではこれについて語られていないようです。注釈の Javadoc には、次のことが明示的に記載されています。

「注入された参照はスレッドセーフではありません」

于 2012-07-14T07:50:36.640 に答える