Anfang des Inhaltsbereichs

Hintergrunddokumentation Exactly Once in Order in mehreren LUWs  Dokument im Navigationsbaum lokalisieren

Mit Hilfe von persistenten Sequenzen kann eine LUW-übergreifende „In-Order-Prozessierung“ durchgeführt werden.

Der Lebenszyklus persistenter Sequenzen ist unabhängig vom Anwendungsprogramm. Jede persistente Sequenz gehört zu genau einem Logischen Port (genau einer Proxy-Klasse).

Hinweis

Ein Logischer Port stellt die Client-Sicht auf einen Service-Endpunkt dar. Ein Service-Endpunkt ist eine aufrufbare Einheit und repräsentiert einen Web Service nach außen. Die Relation zwischen logischem Port und Service-Endpunkt ist 1:1 (siehe auch: Web-Services bereitstellen und nutzen).

Wird eine persistente Sequenz verwendet, werden dieser Sequenz alle Methoden-Aufrufe beim Commit übergeben. Die Methoden-Aufrufe einer persistenten Sequenz werden in der Reihenfolge der ausgelösten Commits ausgeführt. Innerhalb einer Sequenz finden die Aufrufe in der vorgesehenen Reihenfolge statt.

 

  data:

    l_proxy     type ref to co_my_proxy,
    l_sequ_prot type ref to if_wsprotocol_sequence,
    l_sequence  type ref to if_ws_persistent_sequence,
    l_sequ_id   type srt_seq_id.

 

  create object l_proxy.
    l_sequ_prot ?= l_proxy->get_protocol( if_wsprotocol=>sequence ).
    l_sequence  = l_sequ_prot->create_persistent_sequence( ).
    l_sequ_id   = l_sequence->get_id( ).
    l_sequence->begin( ).
      l_sequ_prot->set_client_sequence( l_sequence ).
      l_proxy->m1( ).
      l_proxy->m2( ).
    l_sequence->end( ).

  <<commit>>

 

    l_sequence  = l_sequ_prot->reuse_persistent_sequence( l_sequ_id ).
    l_sequence->begin( ).
      l_sequ_prot->set_client_sequence( l_sequence ).
      l_proxy->m1( ).
      l_proxy->m2( ).
    l_sequence->end( ).

  <<commit>>

    l_sequence->terminate().

  <<commit>>

 

Während transiente Sequenzen nur einmal verwendet werden können und mit dem Ende einer LUW abgeschlossen sind, können persistente Sequenzen wieder verwendet werden.

Bei einer neuen LUW muss ein Protokoll angelegt werden (siehe oben). An dem Protokoll wird die Methode reuse_persistent_sequence( ) aufgerufen.

Dieser Methode wird eine ID übergeben, die nach dem Erzeugen einer Sequenz über die Methode get_id( ) ermittelt werden kann.

 Anschließend wird der Start der Sequenz über die Methode begin( ) bekanntgegeben und die Sequenz am Protokoll registriert.

Wird eine persistente Sequenz nicht mehr benötigt, so kann sie mit terminate () gelöscht werden. Transiente Sequenzen brauchen nicht explizit terminiert werden.

 

 

 

 

 

 

 

Ende des Inhaltsbereichs