2012-03-10 18 views
3

私はspring、cxf、jax wsの実装を使用してWebサービスを作成しましたが、WSに関する基本的な質問があります。 Webサービスエンドポイントは並行要求をどのように処理しますか?それは、サーブレットに似ているリクエストごと、またはスレッド化された単一のモデルに対して、新しいスレッドを作成しますか? Webサービスごとに膨大な量が必要になるため、WSDLを複数のWSDLに分割してエンドポイントを変えることに違いはありますか?jax wsを使用して実装されたWebサービスはマルチスレッドですか

答えて

1

クライアントとサービスの両方の観点からは、「マルチスレッド」はありません。あなたのクライアントは要求を呼び出し、応答を得る(恐らく障害応答)。サーバーが要求を受信し、その要求に対応します。期間。

リクエストのディスパッチ方法は実装の詳細です。

WSDLは単に「契約」です。このサービスは、サポートする操作と、WSDLで使用するデータ型を「公開」します。クライアントは要求と応答のSOAPメッセージをそれに応じてパックし、解凍します。しかし、WSDLは特定のWebサービス呼び出しでは直接的な役割を果たしません。

+0

感謝返信のために。あなたは、サーバー受信者の要求を言及し、応答を返します。ここでエンドポイントが果たす役割はどのようなものですか。同時リクエストをどのように処理しますか? – Mr9

+2

Webサービスエンドポイントの状況は、JSPサーブレット...または他のWebリクエスト/レスポンスとまったく同じです。リスナーが新しいスレッド、新しいプロセス、まったく新しいJVMにリクエストをディスパッチするかどうかは、サービスの観点からはわかりません。それとも、ブロックするだけの場合。あなたの視点からは、「マルチスレッド」はありません。 *サーバーの観点からは、yes:おそらく新しいスレッドを作成します。具体的な内容はサーバーによって異なります(TomcatとJBoss、WebSphereとWebLogicの違いなど)。ディスパッチャーの実装方法は異なります。 – paulsm4

+1

@ paulsm4ここで共有した情報をサポートするための参照リンクを共有することができれば幸いです。 .iは、(Oracle JEE5チュートリアルでステートレスセッションBeanのライフサイクルを簡単に見つけることができるような)Webサービスのライフサイクルを示すものを探していましたが、何も見つかりませんでした。 –

3

Webサービスはもちろん、複数の同時リクエストを受信するとマルチスレッド化されるWebサーバー(たとえばGlassfishな​​ど)によってホストされます。

0

後半ですが、役立つかもしれません。

Endpoint.publish(URL、ServiceImplObj)は、指定されたURLにWebサービスを公開します。いいえ。リクエスト処理のために割り当てられたスレッドの数は、jvm自身によって処理される軽量なデプロイメントであるため、本当にjvmの制御下にあります。

サービスの側で現在のスレッド名を表示すると、サービススレッドがjvmによって管理されているスレッドプールから割り当てられていることがわかります。

[pool-1-thread-1]: Response[57]: 
[pool-1-thread-5]: Response[58]: 
[pool-1-thread-4]: Response[59]: 
[pool-1-thread-3]: Response[60]: 
[pool-1-thread-6]: Response[61]: 
[pool-1-thread-6]: Response[62]: 

これはjdk 1.6.0_35で試しました。

XJC -version XMLバインディング(JAXB)リファレンス実装のための のJavaTMアーキテクチャ "JDK 6でJAXB 2.1.10" XJCバージョンは、(JDK 6でJAXB 2.1.10をビルドする)

関連する問題