Show TOC Anfang des Inhaltsbereichs

Hintergrunddokumentation Exactly Once in Order in einer LUW  Dokument im Navigationsbaum lokalisieren

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 Nachrichten ist an die Ausführung einer LUW (siehe: SAP-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>>

Hinweis

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 der Client-Seite 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 Sequenz wieder geschlossen.

 

    m_seq->end( ).

 

 

 

Ende des Inhaltsbereichs