このタスクについて
シーケンスをプログラマチックに閉じることによって、単一のクライアントが単一の JVM で一度にサポートしなければならないオープン・シーケンスの数を制限します。
クライアント・アプリケーションによって、信頼性の高いメッセージングのシーケンスをプログラマチックに制御するためには、WSRMSequenceManager インスタンスにアクセスする必要があります。. 次のコード・フラグメントを使用して、
これを行います。
import com.ibm.wsspi.wsrm.WSRMSequenceManager;
import com.ibm.wsspi.wsrm.WSRMSequenceManagerFactory;
.........
// Get the factory
WSRMSequenceManagerFactory factory = WSRMSequenceManagerFactory
.getInstance();
// Get the sequence manager instance
WSRMSequenceManager sequenceManager = factory.createWSRMSequenceManager();
すべての
WSRMSequenceManager メソッドは、
以下のパラメーターを取ります。
- クライアント・インスタンス・オブジェクト。
これは、Dispatch client インスタンス、または Dynamic proxy client のいずれかです。
クライアント・タイプの詳細については、トピック『JAX-WS クライアント・プログラミング・モデル』を参照してください。
- ターゲット・エンドポイントの Port QName インスタンス。
WS-ReliableMessaging シーケンスをプログラムで制御するには、
以下のステップに従って、ご使用のクライアント・アプリケーションにコードを追加します。
- シーケンスを作成するためのコードを追加します。
使用可能なプロパティーを設定するには、以下のメソッドを実行します。
/**
* ターゲット・プロバイダーのエンドポイントを設定します。
* WSRMSequenceProperties オブジェクトが使用されると、null 値によって NullPointerException が実行されます。
*
* @param providerEndPoint The target service endpoint URI
*/
public void setTargetEndpointUri(String providerEndPoint);
/**
* これは、プロバイダーと要求側の間に応答フローが必要であることを示すために使用されます。
* 応答フローは、作成シーケンス時に確立されます。
*
* このメソッドを呼び出すことで、応答フローが必要であることを示します。
*/
public void setUseOfferedSequenceId();
/**
* RM プロトコル・メッセージの Soap バージョンを設定します。
* このプロパティーのデフォルト値は WSRMSequenceProperties.SOAP_11 です。
*
* @param soapVersion
*/
public void setSoapVersion(int soapVersion);
/**
* シーケンス肯定応答メッセージが非同期的に送り返された場合、このメソッドを呼び出します。
*
*/
public void useAsyncTransport();
高信頼性メッセージング・シーケンスを作成するには、WSRMSequenceManager で createNewWSRMSequence メソッドを使用します。
/**
* このクライアントと WSRMSequenceProperties インスタンスで指定されたターゲット EPR
* 間の新規シーケンス・ハンドシェークを開始します。
*
* このシーケンスは、createNewWSRMSequence 呼び出しを発行しているクライアントにのみ有効になります。
*
* この呼び出しから値が戻る場合、シーケンスが設定されているという保障はありません。
*
* @throws NullPointerException sequenceProperties オブジェクトが NULL か、またはターゲット EPR が NULL の場合
*
* @param clientObject JAX-WS ディスパッチ・インスタンス、または動的プロキシー・クライアント・インスタンス。
* @param sequencePropeties 高信頼性メッセージング・シーケンスを作成するためのプロパティー
* @throws WSRMNotEnabledException
* @throws WSRMSequenceAlreadyExistsException
*/
public void createNewWSRMSequence(Object clientObject, QName portQName, WSRMSequenceProperties sequencePropeties)
throws WSRMNotEnabledException,
WSRMSequenceAlreadyExistsException;
- 肯定応答要求を送信するためのコードを追加します。
WS-ReliableMessaging
シーケンスの肯定応答要求を送信するには、WSRMSequenceManager
で以下のメソッドを使用します。
/**
* 肯定応答の送信によって、指定されたターゲット endPointUri に ACK 要求メッセージを送信します。
* ターゲットは、現在の高信頼性メッセージング・シーケンスについて肯定応答できるメッセージの範囲
* で応答します。
*
* @param clientObject JAX-WS ディスパッチ・インスタンス、または動的プロキシー・クライアント・インスタンス。
* @param portQName
* @param endPointUri ターゲット・エンドポイント uri
* @throws WSRMNotEnabledException
* @throws WSRMSequenceUnknownException
* @throws WSRMSequenceTerminatedException
* @throws WSRMSequenceClosedException
*/
public void sendAcknowledgementRequest(Object clientObject, QName portQName, String endPointUri)
throws WSRMNotEnabledException,
WSRMSequenceUnknownException,
WSRMSequenceTerminatedException,
WSRMSequenceClosedException;
- シーケンスを閉じるためのコードを追加します。
WS-ReliableMessaging
シーケンスをクローズするには、WSRMSequenceManager
で以下のメソッドを使用します。
/**
* Closes the web services reliable messaging session from this application to
* the endpoint url specified.
*
* Throws a WSRMSequenceTerminatedException if the session between this application
* and the target endpoint url is already closed
*
* Throws a WSRMSequenceTerminatedException when the session between this application
* and the target endpoint has already been terminated.
*
* Throws WSRMSequenceUnknownException exception when either reliable messaging is not engaged to
* the specified endpoint url or the sequence has previously been terminated and removed.
*
* @param clientObject JAX-WS ディスパッチ・インスタンス、または動的プロキシー・クライアント・インスタンス。
* @param endPointUri The target endpoint url
*
* @throws WSRMNotEnabledException
* @throws WSRMSequenceUnknownException
* @throws WSRMSequenceClosedException
* @throws WSRMSequenceTerminatedException
*/
public void closeSequence(Object clientObject, QName portQName, String endPointUri)
throws WSRMNotEnabledException,
WSRMSequenceUnknownException,
WSRMSequenceClosedException,
WSRMSequenceTerminatedException;
- シーケンスを終了させるためのコードを追加します。
WS-ReliableMessaging
シーケンスを終了するには、WSRMSequenceManager で以下のメソッドを使用します。
/**
* Terminates web services reliable messaging session from this application to
* the endpoint url specified.
*
* Throws a WSRMSequenceTerminatedException when the session between this application
* and the target endpoint has already been terminated.
*
* Throws WSRMSequenceUnknownException exception when either reliable messaging is not engaged to
* the specified endpoint url or the sequence has previously been terminated and removed.
*
* @param clientObject JAX-WS ディスパッチ・インスタンス、または動的プロキシー・クライアント・インスタンス。
* @param endPointUri The target endpoint url
* @throws WSRMNotEnabledException
*
* @throws WSRMSequenceTerminatedException
* @throws WSRMSequenceUnknownException
*/
public void terminateSequence(Object clientObject, QName portQName, String endPointUri) throws WSRMNotEnabledException;
- シーケンスの完了を待つためのコードを追加します。
高信頼性メッセージング・シーケンスが完了するのを待機するには、すべてのメッセージが送信され、ターゲット・サービスにより応答されたことを確認するメソッド呼び出しを使用します。
シーケンスが完了すると、シーケンスは終了され、クリーンアップされます。
waitUntilSequenceCompleted メソッドの使用には 2 つの方法があります。
public boolean waitUntilSequenceCompleted(Object clientObject,
QName portQName, String endPointUri, long waitTime)
このメソッド呼び出しは、高信頼性メッセージング・シーケンスを完了するために、指定された
waitTime の間、待機します。
指定された時間内にシーケンスが完了しない場合、メソッドは false の値を戻します。 シーケンスが指定された時間内に完了する場合、メソッドは true の値を戻します。
public boolean waitUntilSequenceCompleted(Object clientObject,
QName portQName, String endPointUri)
このメソッド呼び出しは、高信頼性メッセージング・シーケンスが完了するまで値を戻しません。