私は一般的な Jax-WS 仕様と、Glassfish 3.1.2 でのその実装を研究しています。wsimport によって生成されたアーティファクトを使用して、jax-ws SOAP ベースの Web サービスが JSP ページから呼び出される単純な標準的な例を作成しました (Web サービスと JSP ページは両方とも、同じ EAR 内の Glassfish にデプロイされますが、2 つの異なる war 内にあります)。 .
すべてが期待どおりに機能しますが、質問があります。アプリケーション ログを見ると、Glassfish は呼び出されるたびに Web サービスの新しいインスタンスを作成しているようです。WebコンテナがWebサービスインスタンスを管理する方法をJavaが公式に定義している場所と、開発者がこの動作をカスタマイズできるかどうかを知りたいです。
ここでjax-ws 2.1仕様を読みました
http://download.oracle.com/otndocs/jcp/jaxws-2.1-mrel2-eval-oth-JSpec/
しかし、Endpoint クラスを手動で使用して Web サービスを公開する方法について話しているときに、手がかりしか見つかりませんでした (セクション 5.2.2「公開」、69 ページ):
「エンドポイントは、Web サービスの実装 (ここではインプリメンターと呼ばれます) として機能するオブジェクトと、いくつかの構成情報で構成されています...
エンドポイントは通常、同時リクエストを処理するために呼び出されるため、その実装者は複数のスレッドをサポートするように作成する必要があります。synchronized キーワードは、コードのクリティカル セクションへのアクセスを制御するために通常どおり使用できます。着信リクエストのディスパッチに使用されるスレッドをより細かく制御するために、アプリケーションは使用するエグゼキュータを直接設定できます..."
この注記は、Jax-WS 2.2 仕様 (Glassfish 3 で使用) にも存在します。
実際、JavaSE 7 (Jax-WS 2.2 を含む) のみを使用して Web サービスを構築した場合、Web サービスのインスタンスは 1 つしかないため、この説明は当てはまります。JavaEE がこのポリシーに従わない理由はありますか?
ご協力ありがとうございました。
ニコ