0

Tomcat サーバーにデプロイされた Java で WebService (WS1) を作成しました。特定の条件が満たされた場合、WS1 は別の WebService (WS2) を呼び出して並行して実行する必要があります。これは可能ですか?または、WS1 は実行を続けるために WS2 の応答を待つ必要がありますか。これのポイントは、WS2 に依存しないため、WS1 の応答を遅らせないことです。ただし、WS2トリガーはWS1に依存しており、それが私の問題の始まりです。

この問題に対する私の仮説的な解決策は、WS1 を遅らせることなく WS2 を呼び出す別のサーブレットを作成することです。どうすれば実装できますか、または誰かがより良い解決策を考えられますか?

4

3 に答える 3

3

何を達成したいかによります。2 番目の WS を開始するだけの場合は、新しいローカル スレッドを作成して呼び出しを行うことができます。2 番目の WS は、呼び出し後にブロックされないように、非同期呼び出しをサポートする場合もあります。新しいスレッドを作成すると、次のように機能します。

まず、このスレッドのクラスが必要です。このクラスは、WS2 との通信を処理します。

class ThreadForWS2 extends Thread {
  public void run() {
    // invoke WS2 here
  }
}

WS1 リクエスト ハンドラでは、このスレッドを開始する必要があります。たとえば、次のようにします。

Thread threadForWS2 = new ThreadForWS2();
threadForWS2.start();

それだけですが、もちろん、Java で別のスレッドを作成する方法はたくさんあります。可能な限り最善の解決策を調査す​​るのはあなた次第です。

于 2012-06-20T17:34:33.757 に答える
0

もちろん出来ます。
あなたがSOAPまたはRESTFul Webサービスについて話しているかどうかを知りたいです。
一般に、両方のテクノロジーで、WS1でメソッドを呼び出すことができ、その結果、WS2と通信します(つまり、RESTデータを含むHTTPリクエストをリソース URL または SOAP エンベロープを送信する)
並行して実行してスレッドを開き、WS2 でメソッドの呼び出しコードを実行することを意味する場合-これも可能です
。さらに、私が見たところ、サーブレット API 3.0 は非同期呼び出しをサポートしている可能性があります。これもあなたを助けることができます

于 2012-06-20T17:33:32.463 に答える
0

非同期モードで WS2 を呼び出す必要があります。これは、Web サービス呼び出しが別のスレッドで処理され、親スレッド (WS1) の実行に影響を与えないことを意味します。

非同期呼び出しの反対は同期呼び出しで、応答が受信されるまで現在のスレッドをブロックします。

于 2012-06-20T17:37:06.557 に答える