Lade...
 

Sektion MetaInfo

Erläuterungen zu Sektion MetaInfo

Sektion 'MetaInfo'
Für jede Klasse wird benötigt:

  • ein Eintrag zur Beschreibung der Klasse (Class / Syntax: ClassEntry)
  • eventuell weitere Angaben zur persistenten Speicherung (File / Syntax: FileEntry, Storage / Syntax: StorageEntry)
  • Angabe für Plug-in DLLs mit Code für weitere Model-Klassen

Die folgende Abbildung zeigt für eine Klasse A das Zusammenspiel zwischen der Information aus CLASSIX.INI, einer Erzeugerfunktion A::New() und dem Objektmanager, wenn dieser eine Instanz einer Klasse A erzeugt:

ininew.jpg

Class
erzeugt ein Objekt CX_META_CLASS, das Information über eine Klasse enthält. Als Parameter sind anzugeben:

  • der Name der Klasse
  • eine ganze Zahl, die im ClassiX®-System diese Klasse repräsentiert
  • der Name eines Meta-Files (siehe weiter unten)
  • der Name der Basisklasse
  • Bitpattern zur Steuerung des Einfügens in REP-Collections  
  • Cluster(n) - fordert, dass jedes persistente Objekt der Klasse in einem eigenen Cluster gespeichert wird. Die Clustergröße n ist ab ObjectStore 6.0 ohne Bedeutung: Cluster(1) angeben
  • Docu(n) verweist auf das File der CyberEnterprise®-Dokumentation dieser Klasse 

Um den Vererbungspfad vollständig anzugeben, werden oft Basisklassen eingetragen, von denen niemals Objekte erzeugt werden. Für diese Klassen kann die Meta-File-Angabe entfallen. Die Ableitung aller Klassen von CX_CLASS ist dem ClassiX®-System a priori bekannt, d.h. auch wenn CX_CLASS in CLASSIX.INI nicht eingetragen wurde.

An dieser Stelle wird der Begriff 'Klasse' noch in einer etwas erweiterten Bedeutung benutzt: Neben dem Begriff der Klasse in C++ oder Java kann man sich eine Klassifizierung der Objekte vorstellen, die zu einer weitergehenden Unterteilung führt. Mit dem Schlüsselwort

PseudoClass
können die Objekte einer C++-Klasse in Unterklassen zerlegt werden. Die Parameter sind die gleichen wie bei Class.

File
erzeugt ein Objekt der Klasse CX_META_FILE. Wie der Name andeutet, liefert dieses Objekt Information darüber, wie die Objekte in der Datenbank gespeichert sind. Hauptinhalt ist ein Vektor, der auf n Storages verweist. Diese Organisation spiegelt die logische Unterteilung der Datenbank in Layer wider. Als Parameter sind anzugeben:

  • ein eindeutiger Name
  • eine Liste von Storage-Namen

Nach Namen für die letzte Storage-Angabe kann die Ellipse ... stehen. Diese Schreibweise erspart die ständige Wiederholung des gleichen Parameters, wenn für alle (jetzt folgenden) Layer die selben Storageangaben gelten sollen:

Die letzte Storage-Definition der File-Anweisung wird so oft wiederholt, wie dies die File-Anweisung mit den meisten Storages vorgibt; aus

File(fName1, stg0, stg1, stg2, stg3)

File(fName2, stga, ...)

wird

File(fName1, stg0, stg1, stg2, stg3)

File(fName2, stga, stga, stga, stga)

Der Parameters STOP ist nur im Zusammenhang mit der Anweisung AutoLayer bedeutungsvoll und wird dort erklärt.


Storage
erzeugt ein Objekt der Klasse CX_STORAGE. Hier wird definiert, wie die Objekte in der objektorientierten Datenbank ObjectStore gespeichert werden.
Parameter sind:

  • ein eindeutiger Name
  • die physische Datenbank
  • das Segment (die Segmente), in dem Objekte gespeichert werden sollen sollen
  • eine Liste von Namen der Root-EntryPoint-Collections
  • eine Liste von Segmenten, in denen die Root-EntryPoint-Collections gespeichert werden
  • ein Tupel aus Namen einer Collection für logisch gelöschte Objekte (Papierkorb der Datenbank) und dem Segment für diese Collection
  • ob das Objekt als Slot wie ein eigenständiges Objekt gespeichert werden soll (SeparateSlots) - optional

Auf die physische Datenbank wird verwiesen mit

  • Angabe des Pfades
  • dem Namen einer Umgebungsvariablen, die beim Start den aktuellen Pfad zur Datenbank enthält
  • DB(k), also einer Bezugnahme auf das Statement Database(..., k)  

Die Segment-Angabe steuert den Ort in der Datenbank (die Page) wo das Objekt gespeichert wird. Die verschiedenen Varianten - 1 Segment, 2 Segmente, gar keine Segment - erlauben ein Fine-Tuning der Clustering-Strategie beim Erzeugen bzw. Kopieren eines Objekts mit Anweisung CreatePersObject / CopyPersObject.

Segment
Diese Anweisung wird benötigt, wenn über den bloßen Namen hinausgehend weitere Eigenschaften eines Segments festgelegt werden sollen.
Erster Parameter ist der Segmentname, danach sind folgende Angaben möglich:

Parameter Bedeutung steuert
ganze Zahl n Segmentsplitting wird das Segment größer als n Bytes, wird automatisch ein neues Segment erzeugt, das jetzt die Rolle des alten übernimmt
AUTO Auto-Segment als Slave-Segment werden automatisch Cluster (ab ObjectStore 6.0) bzw. Segmente (ObjectStore 5.x) erzeugt
DEFAULT Default-Segment das Segment, in dem Objekte ohne eigenes Objekt-Segment gespeichert werden, wenn die Clustering-Kategorie  SLAVE_SEG inaktiv ist
EXTERN Cross Database Pointer - nur für ObjectStore 5.x Objekte im Segment können auf Objekte in anderen physischen Datenbanken verweisen

 

Database
beschreibt eine physische Datenbank und ordnet dieser eine ganzzahlige Nummer k zu. Mit DB(k) kann man sich in den Storage-Anweisungen auf diese Datenbank beziehen. Name ist der vollständige oder relative Pfad zum Datenbak-File, oder aber der Name einer Umgebungsvariablen, deren Wert dann beim Start des ClassiX®-Systems auf das Datenbankfile verweist. 

Hinweis: Es ist nicht erlaubt, dass sich verschiedene Storages auf die gleiche physische Datenbank in unterschiedliche Weise beziehen, z.B. mittels verschiedener Umgebungsvariablen oder durch unterschiedliche, aber äquivalente Pfadangaben. 
Beim Start des ClassiX®-System werden solche Mehrdeutigkeiten entdeckt.  

AutoLayer
Soll eine logische Datenbank beschrieben werden, die

  • aus vielen, im Prinzip identischen Layern besteht
  • und jedem Layer eine eigene physische Datenbank zuordnet,

so können die sich ständig wiederholenden Angaben für File und Storage mit der Anweisung AutoLayer generiert werden.

 

IndexCopy(FLAT | DEEP)
Dieser Parameter steuert Datenbank-Indexe mit der Option COPY_KEY.  Standardannahme ist DEEP.

Achtung: vor Dll-Version 212701 war das Verhalten bei fehlender Angabe undefiniert.

Hinweis: Ein Wechsel von FLAT nach DEEP oder umgekehrt ist nur dann möglich, wenn vorher alle Datenbank-Indexe gelöscht wurden. Danach wird im .ini-File der gewünschte Modus eingetragen und alle Indexe werden neu aufgebaut. 

Schema
Nur für ObjectStore 5.x: Hier wird der Pfad der Schema-Datenbank von ObjektStore angegeben. Wie bei allen Pfadangaben, wird der Identifikator CX_ROOTDIR durch den Pfad zum CLASSIX-Root-Directory ersetzt.

Das ClassiX®-System mit ObjectStore 6.x benutzt mehrere, den DLLs zugeordnete Schema-Datenbanken. Die Angabe Schema wird ignoriert.
Die Location der Schema-Datenbanken kann mit der Umgebungsvariablen OS_SCHEMA_PATH gesteuert werden (siehe Schema-Datenbanken).



CheckIllegalPointers
Nur für ObjectStore 5.x: Für die Phase der Programmentwicklung wird das gleichnamige ObjectStore-Feature aktiviert. Am Ende jeder Transaktion prüft ObjectStore, ob in die Datenbank zu speichernde Objekte eventuell auf Objekte im transienten Speicher verweisen. Dieses Schlüsselwort ist parameterlos.

Ab ObjectStore 6.x ist diese Feature immer aktiv.



DLLs
Die DLLs, die den Code der Modell-Klassen enthalten, sind hier anzugeben. Parameter ist eine Liste der Namen der DLLs ohne die Extension .DLL.

Enthält der Name einer DLL Zeichen, welche nicht alphanumerisch sind, bzw. Sonderzeichen oder Umlaute, muss der Name in Anführungsszeichen gesetzt werden.

Beispiel
DLLs("dll1-version2_EXT_", dll2_EXT_, "dll3-version3_EXT_")

Immer nur die die tatsächlich vom Kunden benötigten DLLs eintragen! (Wird Instant-Web oder die ELSTER-Schnitstelle auch tatsächlich benötigt?)
ClassiX startet so schneller und es kann ein höherer Wert für OS_AS_SIZE angegeben werden (siehe Address Space)


Help
Nur für die OS/2-Version der ClassiX®-Systems: Hier wurde angegeben, wo das ClassiX®-System die InstantView®-Dokumentation (die Sie gerade lesen) als On-Line-Hilfe findet. Im Pfadnamen werden die Zeichen ### durch den Country-Code entsprechend der aktuellen Sprache ersetzt (vergleiche Anweisung Language).

WinEditor
Mit diesen Schlüsselworten wird das Kommando zum Aufruf eines Editors angegeben (siehe Anweisung EditSource).

ISO8859_1
Mit diesem Parameter wird angegeben, ob der ISO 8859-1-Zeichensatz (d.h. der Zeichensatz von Microsoft-Windows) benutzt wird. Für die Plattformen Windows 95 und Windows NT ist dies die Standardannahme, während für OS/2 die Annahme ISO8859_1(OFF) gilt. Soll eine Datenbank unter beiden Betriebssystemen benutzt werden, so muss - für die Windows-Plattformen - ISO8859_1(OFF) gesetzt sein.

Icon(Pfad)
Mit diesem Parameter lässt sich ein beliebiges Anwendungsicon für ClassiX setzen.  Der Pfad muss dabei zu einer .ico-Datei führen. Die Umgabungsvariable CX_ROOTDIR darf hier verwendet werden.

Der Befehl verändert das Icon von:

  • Allen Fenstern in der oberen linken Ecke
  • Dem Taskbar-Icon für die Anwendung
  • Dem Tray

Beispiel: Icon("CX_ROOTDIR\\icons\\classix.ico")


SystemDB
Hier ist der Pfad zu einer Datenbank anzugeben, welche die in der Datenbank abgelegte Information aus CLASSIX.INI enthält (siehe Funktion SaveMetaInfo des Objekt-Managers).
Diese Datenbank kann die vollständigen Metadaten oder auch nur einen Teil davon (der auch leer sein darf) enthalten, aber sie muss existieren. Andernfalls wird der Systemstart mit einer Fehlermeldung abgebrochen.

InstantView®