
Gehören alle Methoden, die "exactly once in order" ausgeführt werden sollen, zu einem Web Service, kann das Sequenz-Objekt mit Hilfe des Proxy-Objekts angelegt werden. Das Sequenz-Objekt kontrolliert die korrekte Reihenfolge bei der Prozessierung der Methoden der Poxy-Objekt-Instanz. Die zuverlässige Übertragung von Messages ist an die Performance einer LUW gebunden.
data:
l_sequ_prot type ref to if_wsprotocol_sequence,
l_sequence type ref to if_ws_client_sequence,
l_proxy type ref to co_my_proxy.
create object l_proxy.
l_sequ_prot ?= l_proxy->get_protocol(if_wsprotocol=>sequence).
l_sequence = l_sequ_prot->create_transient_sequence( ).
l_sequence->begin( ).
l_sequ_prot->set_client_sequence( l_sequence ).
l_proxy->m1( ).
l_proxy->m2( ).
l_sequence->end( ).
<<commit>>
EO- und EOIO-Methoden werden mit Hilfe eines Proxy-Objekts aufgerufen:
data:
l_proxy type ref to co_my_proxy.
create object l_proxy.
l_proxy->m1( ).
<<commit>>
In den folgnden Abschnitten steht <<commit>> für jede Art von Aufruf, die einen COMMIT WORK auslöst. Zum Zeitpunkt COMMIT WORK werden alle (EO und EOIO)-Methoden, die im Rahmen einer LUW aufgerufen wurden, persistiert und können versendet werden.
Um Reliable Messaging einsetzen zu können, muss auf Clientseite eine Sequenz erzeugt werden. Dazu wird ein Sequenzprotokoll benötigt, das am Proxyobjekt aufgerufen wird.
m_seq_prot ?= proxy_object->get_protocol( if_wsprotocol=>sequence ).
Um die Sequenz zu erzeugen, muss an dem erzeugten Protokoll eine Methode aufgerufen werden. Je nachdem, ob die Sequenz transient (einmal verwendbar) oder persistent (wieder verwendbar) sein soll, wird eine andere Methode verwendet. Transiente Sequenzen sind mit dem Ende der LUW abgeschlossen.
m_seq = m_seq_prot->create_transient_sequence( ).
m_seq = m_seq_prot->create_persistent_sequence( ).
Nach erfolgreicher Erzeugung der Sequenz muss der Beginn dieser Sequenz bekannt gegeben werden. Dies erfolgt durch den Aufruf der Methode begin( ).
m_seq-> begin( ).
Anschließend wird dem Sequenzprotokoll die aktuell verwendete Sequenz über die Methode set_client_sequence( ) mitgeteilt, da immer nur eine Sequenz verwendet werden kann.
m_seq_prot->set_client_sequence( m_seq ).
Alle Web Service-Aufrufe, die in dieser Sequenz stattfinden, werden beim Provider in der richtigen Reihenfolge verarbeitet. Reihenfolgen zwischen verschiedenen Sequenzen werden nicht beachtet.
Nachdem alle Calls abgesendet wurden, wird die Sequence wieder geschlossen.
m_seq->end( ).