Show TOC Anfang des Inhaltsbereichs

Funktionsdokumentation Gebietskonstruktorklasse <area_constructor>   Dokument im Navigationsbaum lokalisieren

Eine Gebietskonstruktorklasse ist eine globale Klasse mit frei wählbarem Namen <area_constructor>, die das Interface IF_SHM_BUILD_INSTANCE implementiert. In der Interfacemethode BUILD kann ein Gebietskonstruktor implementiert werden.

In der Transaktion SHMA kann einem Gebiet eine Gebietskonstruktorklasse zugeordnet werden. Dies ist immer dann notwendig, wenn das Gebiet durch Aufruf des Gebietskonstruktors automatisch aufgebaut werden soll, d.h. wenn die Komponenten BUILD_KIND und REFESH_TIME der Struktur PROPERTIES der Klasse CL_SHM_AREA entsprechend gefüllt sind. Falls kein automatischer Aufbau eines Gebiets erfolgen soll, kann eine Gebietskonstruktorklasse für den expliziten Aufruf des Gebietskonstruktors mit der Methode BUILD der Gebietsklasse angegeben werden.

Gebietskonstruktor

Für den in der Interfacemethode BUILD implementierten Gebietskonstruktor wird folgender Aufbau empfohlen:

...

       1.      Der Gebietskonstruktor muss zuerst mit der Methode ATTACH_FOR_WRITE ein Gebietshandle mit Schreibsperre für die im Parameter INST_NAME übergebene Gebietsinstanz erzeugen. Da auch bei einem automatisch aufgerufenen Gebietskonstruktor nicht sicher gestellt werden kann, dass das Setzen der Schreibsperre möglich ist müssen alle Ausnahmen abgefangen und durch Auslösen der Interface-Ausnahme CX_SHM_BUILD_FAILED an den Aufrufer des Konstruktors weitergeleitet werden. Dabei sollte die ursprüngliche Ausnahme an den Parameter PREVIOUS des Konstruktors von CX_SHM_BUILD_FAILED übergeben werden.

       2.      Wie bei jedem Erzeugen einer neuen Gebietsinstanzversion muss auch im Gebietskonstruktor mit der Methode SET_ROOT ein Wurzelobjekt festgelegt werden.

       3.      Danach kann die Gebietsinstanzversion aufgebaut, d.h. Objekte im Shared Memory abgelegt werden.

       4.      Das erzeugte Gebietshandle muss mit der Methode DETACH_COMMIT wieder freigegeben werden.

       5.      Wenn der Gebietskonstruktor automatisch aufgerufen wurde, muss beim Aufbau eines transaktionalen Gebiets ein Datenbank-Commit ausgelöst werden.

 

BeispielBeispiel

 

Die folgende Implementierung kann als Vorlage für eigene Implementierungen dienen.

 

CLASS <area_constructor> IMPLEMENTATION.

  METHOD if_shm_build_instance~build.

    DATA:
      my_handle TYPE REF TO <area>,
      my_data   TYPE REF TO <area_root_class>,
      my_except TYPE REF TO cx_root.

    TRY.
        my_handle = cl_my_area=>attach_for_write( inst_name ).
      CATCH cx_shm_error INTO my_except.
        RAISE EXCEPTION TYPE cx_shm_build_failed
                        EXPORTING previous = my_except.
    ENDTRY.

    CREATE OBJECT my_data AREA HANDLE my_handle.
    my_handle->set_root( my_data ).

    ... " code to build the area instance

    TRY.
        my_handle->detach_commit( ).
      CATCH cx_shm_error INTO my_except.
        RAISE EXCEPTION TYPE cx_shm_build_failed
                        EXPORTING previous = my_except.
    ENDTRY.

    IF invocation_mode = cl_shm_area=>invocation_mode_auto_build.
      CALL FUNCTION 'DB_COMMIT'.
   
ENDIF.

  ENDMETHOD.

ENDCLASS.

 

 

Ende des Inhaltsbereichs