Informationen zu diesem Vorgang
Indem Sie Nachrichtenfolgen über das Programm schließen, beschränken Sie die Anzahl offener Nachrichtenfolgen, die ein einzelner Client in einer einzelnen JVM jeweils unterstützen muss.
Damit Ihre Clientanwendung die programmgesteuerte Steuerung über Reliable Messaging-Nachrichtenfolgen erhalten kann, muss sie Zugriff auf eine WSRMSequenceManager-Instanz haben.. Verwenden Sie hierfür das folgende
Codefragment:
import com.ibm.wsspi.wsrm.WSRMSequenceManager;
import com.ibm.wsspi.wsrm.WSRMSequenceManagerFactory;
.........
// Factory abrufen
WSRMSequenceManagerFactory factory = WSRMSequenceManagerFactory
.getInstance();
// Instanz des Nachrichtenfolgemanagers abrufen
WSRMSequenceManager sequenceManager = factory.createWSRMSequenceManager();
Alle
WSRMSequenceManager-Methoden akzeptieren die folgenden Parameter:
- Das Clientinstanzobjekt. Dies kann eine Instanz des Dispatch-Clients
oder eine Instanz des Dynamic-Proxy-Clients sein. Einzelheiten zu den Clienttypen finden Sie
im Artikel Programmiermodell für JAX-WS-Clients.
- Die Port-QName-Instanz für den Zielendpunkt.
Wenn Sie WS-ReliableMessaging-Nachrichtenfolgen über das Programm steuern möchten,
müssen Sie Ihrer Clientanwendung Code hinzufügen. Verwenden Sie dazu die folgenden Schritte:
- Code zum Erstellen einer Nachrichtenfolge hinzufügen.
Verwenden Sie die folgenden Methoden, um die verfügbaren Eigenschaften zu definieren:
/**
* Definiert den Zielproviderendpunkt.
* Ein Nullwert bewirkt eine NullPointerException, wenn das WSRMSequenceProperties-Objekt verwendet wird.
*
* @param providerEndPoint Der URI des Zielserviceendpunkts
*/
public void setTargetEndpointUri(String providerEndPoint);
/**
* Diese Methode wird verwendet, um anzuzeigen, dass ein Antwortfluss zwischen dem Provider
* und dem Anforderer erforderlich und beim Erstellen der Nachrichtenfolge eingerichtet wird.
*
* Durch Aufruf dieser Methode wird angezeigt, dass ein Antwortfluss erforderlich ist.
*/
public void setUseOfferedSequenceId();
/**
* SOAP-Version für RM-Protokollnachrichten festlegen.
* Der Standardwert für diese Eigenschaft ist WSRMSequenceProperties.SOAP_11
*
* @param soapVersion
*/
public void setSoapVersion(int soapVersion);
/**
* Diese Methode aufrufen, wenn Bestätigungsnachrichten für die Nachrichtenfolge asynchron
* zurückgesendet werden sollen.
*
*/
public void useAsyncTransport();
Verwenden Sie zum Erstellen einer Nachrichtenfolge für Reliable Messaging die Methode
createNewWSRMSequence in WSRMSequenceManager:
/**
* Leitet einen Handshake für die neue Nachrichtenfolge zwischen Client und Ziel-EPR aus der
* WSRMSequenceProperties-Instanz an.
*
* Diese Nachrichtenfolge ist nur für den Client gültig, der den createNewWSRMSequence-Aufruf absetzt.
*
* Bei Rückkehr von diesem Aufruf ist nicht garantiert, dass die Nachrichtenfolge erstellt wurde.
*
* @throws NullPointerException, wenn sequenceProperties-Objekt oder Ziel-EPR null ist
*
* @param clientObject JAX-WS-Dispatch- oder dynamische Proxy-Clientinstanz.
* @param sequencePropeties Eigenschaften für das Erstellen der Nachrichtenfolge für Reliable Messaging
* @throws WSRMNotEnabledException
* @throws WSRMSequenceAlreadyExistsException
*/
public void createNewWSRMSequence(Object clientObject, QName portQName, WSRMSequenceProperties sequencePropeties)
throws WSRMNotEnabledException,
WSRMSequenceAlreadyExistsException;
- Code zum Senden einer Bestätigungsanforderung hinzufügen.
Verwenden Sie zum Senden einer Bestätigungsanforderung für eine WS-ReliableMessaging-Nachrichtenfolge
die folgende Methode in WSRMSequenceManager:
/**
* Beim Senden einer Bestätigungsanforderung wird die angeforderte ACK-Nachricht an den angegebenen Zielendpunkt-URI gesendet.
* Das Ziel antwortet mit mehreren Nachrichten, die für die aktuelle Reliable Messaging-Nachrichtenfolge
* bestätigt werden können.
*
* @param clientObject JAX-WS-Dispatch- oder dynamische Proxy-Clientinstanz.
* @param portQName
* @param endPointUri Der Zielendpunkt-URI
* @throws WSRMNotEnabledException
* @throws WSRMSequenceUnknownException
* @throws WSRMSequenceTerminatedException
* @throws WSRMSequenceClosedException
*/
public void sendAcknowledgementRequest(Object clientObject, QName portQName, String endPointUri)
throws WSRMNotEnabledException,
WSRMSequenceUnknownException,
WSRMSequenceTerminatedException,
WSRMSequenceClosedException;
- Code zum Schließen einer Nachrichtenfolge hinzufügen.
Verwenden Sie zum Schließen einer WS-ReliableMessaging-Nachrichtenfolge
die folgende Methode in WSRMSequenceManager:
/**
* Schließt die WS-ReliableMessaging-Sitzung zwischen dieser Anwendung und dem angegebenen
* Endpunkt-URL.
*
* Löst eine Ausnahme vom Typ WSRMSequenceTerminatedException aus, wenn die Sitzung zwischen
* dieser Anwendung und dem Ziel-Endpunkt-URL bereits geschlossen ist.
*
* Löst eine Ausnahme vom Typ WSRMSequenceTerminatedException aus, wenn die Sitzung
* zwischen dieser Anwendung und dem Zielendpunkt bereits beendet wurde.
*
* Löst eine Ausnahme vom Typ WSRMSequenceUnknownException aus, wenn kein zuverlässiges
* Messaging für den angegebenen Endpunkt-URL verwendet wird oder wenn die Nachrichtenfolge
* bereits beendet und entfernt wurde.
*
* @param clientObject JAX-WS-Dispatch- oder dynamische Proxy-Clientinstanz.
* @param endPointUri Ziel-Endpunkt-URL
*
* @throws WSRMNotEnabledException
* @throws WSRMSequenceUnknownException
* @throws WSRMSequenceClosedException
* @throws WSRMSequenceTerminatedException
*/
public void closeSequence(Object clientObject, QName portQName, String endPointUri)
throws WSRMNotEnabledException,
WSRMSequenceUnknownException,
WSRMSequenceClosedException,
WSRMSequenceTerminatedException;
- Code zum Beenden einer Nachrichtenfolge hinzufügen.
Verwenden Sie zum Beenden einer WS-ReliableMessaging-Nachrichtenfolge
die folgende Methode in WSRMSequenceManager:
/**
* Beendet die WS-ReliableMessaging-Sitzung zwischen dieser Anwendung und dem angegebenen
* Endpunkt-URL.
*
* Löst eine Ausnahme vom Typ WSRMSequenceTerminatedException aus, wenn die Sitzung
* zwischen dieser Anwendung und dem Zielendpunkt bereits beendet wurde.
*
* Löst eine Ausnahme vom Typ WSRMSequenceUnknownException aus, wenn kein zuverlässiges
* Messaging für den angegebenen Endpunkt-URL verwendet wird oder wenn die Nachrichtenfolge
* bereits beendet und entfernt wurde.
*
* @param clientObject JAX-WS-Dispatch- oder dynamische Proxy-Clientinstanz.
* @param endPointUri Ziel-Endpunkt-URL
* @throws WSRMNotEnabledException
*
* @throws WSRMSequenceTerminatedException
* @throws WSRMSequenceUnknownException
*/
public void terminateSequence(Object clientObject, QName portQName, String endPointUri) throws WSRMNotEnabledException;
- Code zum Warten auf den Abschluss einer Nachrichtenfolge hinzufügen.
Um auf den Abschluss einer zuverlässigen Nachrichtenfolge zu warten, verwenden
Sie einen Methodenaufruf, der sicherstellt, dass alle Nachrichten gesendet und vom Zielservice bestätigt wurden.
Nach Abschluss der Nachrichtenfolge wird die Nachrichtenfolge beendet und bereinigt.
Die Methode waitUntilSequenceCompleted kann auf zwei Arten verwendet werden:
public boolean waitUntilSequenceCompleted(Object Clientobjekt,
QName PortQName, String Endpunkt-URI, long Wartezeit)
Dieser Methodenaufruf
verwendet die angegebene Wartezeit, um auf den Abschluss der Reliable Messaging-Nachrichtenfolge zu warten.
Wenn die Nachrichtenfolge nicht innerhalb der angegebenen Zeit abgeschlossen wird, gibt die Methode
das Ergebnis "false" zurück. Wenn die Nachrichtenfolge innerhalb der angegebenen Zeit abgeschlossen wird, gibt sie "true" zurück.
public boolean waitUntilSequenceCompleted(Object Clientobjekt,
QName PortQName, String Endpunkt-URI)
Dieser Methodenaufruf kehrt erst nach Abschluss der Reliable Messaging-Nachrichtenfolge zurück.