Show TOC Anfang des Inhaltsbereichs

Hintergrunddokumentation Shared Objects - Einführung  Dokument im Navigationsbaum lokalisieren

Shared Objects

Shared Objects sind Objekte im Shared Memory. Es wird die Ablage von Instanzen von Klassen und von anonymen Datenobjekten unterstützt. Benannte Datenobjekte können als Attribute von Klassen abgelegt werden.

Shared Memory

Das Shared Memory ist ein Speicherbereich auf einem Applikationsserver, auf den alle ABAP-Programme dieses Servers gemeinsam zugreifen. Vor der Einführung von Shared Objects konnten ABAP-Programme ausschließlich über die Anweisungen EXPORT und IMPORT mit den Zusätzen SHARED BUFFER bzw. SHARED MEMORY auf diesen Speicherbereich zugreifen und Instanzen von Klassen oder anonyme Datenobjekte lebten ausschließlich im internen Modus eines ABAP-Programms.

Mit der Einführung von Shared Objects zu Release 6.40 wurde das Shared Memory um das Shared Objects Memory erweitert, in das die Shared Objects abgelegt werden können. Die Größe des Shared Objects Memory wird durch den Profilparameter abap/shared_objects_size_MB bestimmt.

Die Ablage von Shared Objects erfolgt in sogenannten Gebieten des Shared Memory. Gebiete und ihre Eigenschaften werden mit der Transaktion SHMA angelegt und verwaltet.

Shared-Memory-fähige Klassen

Voraussetzung für die Ablage einer Instanz einer Klasse im Shared Memory ist, dass die Klasse des Objekts mit dem Zusatz SHARED MEMORY ENABLED der Anweisung CLASS definiert bzw. dass im Class Builder die Eigenschaft Shared memory fähig markiert ist. Jedes Gebiet ist mit einer so genannten globalen Gebietswurzelklasse verknüpft, die in ihren Attributen eigene Daten und Referenzen auf andere Instanzen Shared-Memory-fähiger Klassen oder auf anonyme Datenobjekte enthalten kann.

Gebiete und Gebietsinstanzen

Ein Gebiet ist die Vorlage für Gebietsinstanzen im Shared Memory. Von einem Gebiet können mehrere Gebietsinstanzen angelegt werden, die sich durch ihre Namen unterscheiden. Weiterhin kann es von einer Gebietsinstanz mehrere Versionen (Gebietsinstanzversionen) geben, die sich durch eine Versionskennung unterscheiden. Alle Gebietsinstanzversionen des gleichen Gebietsinstanznamens bilden eine Gebietsinstanz. Im einfachsten Fall (ohne Versionierung) besteht eine Gebietsinstanz aus einer einzigen Gebietsinstanzversion.

Gebietsklassen und Gebietshandles

Beim Definieren eines Gebiets mit der Transaktion SHMA wird eine gleichnamige globale und finale Gebietsklasse als Unterklasse von CL_SHM_AREA generiert. Die Klasse CL_SHM_AREA ist selbst direkte Unterklasse von CL_ABAP_MEMORY_AREA. In einem ABAP-Programm erfolgt der Zugriff auf ein Gebiet ausschließlich über die Methoden der generierten Gebietsklasse. Es gibt statische Methoden zum Anbinden eines ABAP-Programms (bzw. dessen internen Modus) an Gebietsinstanzen im Shared Memory (Attach-Methoden). Beim Anbinden wird eine Instanz der Gebietsklasse als sogenanntes Gebietshandle erzeugt und gleichzeitig eine Sperre gesetzt. Das ABAP-Programm kann über das Gebietshandle auf die angebundene Gebietsinstanzversion und damit auf die dort abgelegten Shared Objects zugreifen. Das Gebietshandle enthält auch die Methoden zum Lösen der Verbindung bzw. der Sperre (Detach-Methoden).

Zugriff auf Objekte

Die Shared Objects in einer Gebietsinstanzversion werden durch Referenzen adressiert, die man sich über das Gebietshandle besorgt. Die Shared Objects innerhalb einer Gebietsinstanzversion können unbeschränkt aufeinander verweisen. Ein ABAP-Programm kann Referenzen auf Shared Objects enthalten, solange es an eine Gebietsinstanzversion angebunden ist. Gebietsinstanzversionen selbst sind dahingehend in sich abgeschlossen, dass sie keine Referenzen in andere Gebietsinstanzversionen oder in einen internen Modus enthalten können. Eine Ausnahme von dieser Regel besteht nur solange, wie eine Gebietsinstanz zum Schreiben oder Aktualisieren an einen internen Modus angebunden ist. Während dieser Zeit können in der Gebietsinstanz Referenzen auf Objekte im internen Modus oder in anderen, ebenfalls angebundenen, Gebietsinstanzen bestehen.

Hinweis

Gebietsinstanzen bzw. Gebietsinstanzversionen dürfen nicht mit Instanzen von Klassen verwechselt werden. Insbesondere ist eine Gebietsinstanz keine Instanz einer Gebietsklasse. Gebietsinstanzen sind verwaltete Bereiche (die eigentlichen Gebiete) im Shared Memory, in denen Shared Objects abgelegt und die von Gebietshandles adressiert werden können.

 

 

Ende des Inhaltsbereichs