Web Services Invocation Framework (WSIF) では、非同期操作がサポートされています。この操作モードでは、クライアントは要求メッセージを 1 つのトランザクションの一部として配置し、 実行中のスレッドを続行します。 応答メッセージは、その後、別のトランザクションを伴う異なるスレッドにより処理されます。
非同期操作は、SOAP over JMS およびネイティブ JMS 用の WSIF プロバイダーによってサポートされています。
WSIFPort クラスは supportsAsync メソッドを使用して、非同期操作がサポートされているかどうかをテストします。
非同期操作は、WSIFOperation インターフェースの executeRequestResponseAsync メソッドにより開始されます。このメソッドにより、 リモート・プロシージャー呼び出し (RPC) メソッドが 非同期に起動されます。このメソッドは、操作の完了前に戻され、実行のスレッドが継続します。
非同期要求への応答は、WSIFOperation インターフェースの fireAsyncResponse メソッドまたは processAsyncResponse メソッドのいずれかによって 処理されます。
要求を開始するには、以下のような 2 つの形式の executeRequestResponseAsync メソッドがあります。
public WSIFCorrelationId executeRequestResponseAsync (WSIFMessage input, WSIFResponseHandler handler)
および
public WSIFCorrelationId executeRequestResponseAsync (WSIFMessage input)
このメソッドは入力メッセージと WSIFResponseHandler ハンドラーを 取ります。ハンドラーは、操作の完了時に別のスレッド上で呼び出されます。このメソッドを使用する際に、 クライアント・リスナーは fireAsyncResponse メソッドを呼び出します。 このメソッドは WSIFResponseHandler インターフェースの executeAsyncResponse メソッドを呼び出します。
WSIFResponseHandler インターフェース (/wsi/org/apache/wsif/WSIFResponseHandler.html) について詳しくは、 generated API information を参照してください。
WSIF は、非同期要求と応答の間の相関をサポートします。要求が送信されると、 WSIFOperation オブジェクトは WSIFCorrelationService オブジェクトに シリアライズされます。executeRequestResponseAsync メソッドは、 WSIFCorrelationId オブジェクトを戻します。このオブジェクトはシリアライズされた WSIFOperation オブジェクトを識別します。クライアント・リスナーは、これを使用して応答と特定の要求を突き合わせます。
相関サービスは、org.apache.wsif.utils パッケージの中にある WSIFCorrelationServiceLocator クラスの getCorrelationService() メソッドを使用して取得されます。
管理コンテナーでは、デフォルトの相関サービスは、java:comp/wsif/WSIFCorrelationService という名前を使用して、 デフォルトの Java Naming and Directory Interface (JNDI) ネーム・スペースで定義されます。 この相関サービスが利用不能である場合、WSIF は WSIFDefaultCorrelationService を使用します。
WSIFCorrelationService インターフェース (/wsi/org/apache/wsif/WSIFCorrelationService.html) について詳しくは、 generated API information を参照してください。
また、相関関係子 ID は、次のとおりです。
public interface WSIFCorrelator extends Serializable { public String getCorrelationId(); }
クライアントは、応答メッセージの到着を認識するために、 独自の応答メッセージ・リスナーまたはメッセージ・データベースをインプリメントする必要があります。 このクライアント・インプリメンテーションにより、要求に対する応答メッセージと、 いずれかの非同期応答処理メソッドの呼び出しの相関が管理されます。 クライアント・リスナーの要件の例として、次のコード・フラグメントは、 Java Message Service (JMS) リスナーの onMessage メソッドがどのようなものであるかを示しています。
public void onMessage(Message msg) { WSIFCorrelationService cs = WSIFCorrelationServiceLocator.getCorrelationService(); WSIFCorrelationId cid = new JmsCorrelationId( msg.getJMSCorrelationID() ); WSIFOperation op = cs.get( cid ); op.fireAsyncResponse( msg ); }