Namespaces

Namespaces sind die Namensräume für Applikationen in einer devel.one-Instanz. Sie umfassen mindestens einen Thread mit Message-Queue, eine TargetRegistry und eine ServiceRegistry. Damit ist es auch möglich, mehrere Instanzen einer Applikation in einem D1-System laufen zu lassen, da gleichlautende Services und Targets parallel in unterschiedlichen Namespaces Platz finden.

Adressen

Namespaces haben eine eigene ID, die Namespace-ID (NID). Die ID kann so erhalten werden:

IId getNID();

Namespaces haben auch eine Adresse, die INamespaceAddress. Im Prinzip ist das eine Target-Adresse ohne Target-ID, oder genauer: Die Target-Adresse ist eine Namespace-Adresse mit zusätzlicher TID:

INamespaceAddress getAddress();

Wenn die NID oder die HID in einer Empfänger-Adresse fehlt, wird vom System angenommen, dass es die gleichen IDs sind wie in der Sender-Adresse. Es gibt aber auch eine Service-Methode, welche die Adressen komplettiert:

void completeReceiver(final CEnvelope aEnvelope);

Zugriff auf Kernel

Über den Namespace kann man leicht auf den Kernel zugreifen, und umgekehrt. Namespaces sind in der NamespaceRegistry registriert, einem SubSystem des Kernels:

IHid getHID();

IKernel getKernel();

Subsysteme

Targets werden für Namespaces angemeldet. Dazu gibt es die TargetRegistry:

ITargetRegistry getTargetRegistry();

Auch Services werden für Namespaces angemeldet, und zwar in der ServiceRegistry:

IServiceRegistry getServiceRegistry();

Für LowLevel-Notifikationen gibt es - wie im Kernel - die SignalRegistry:

ISignalRegistry getSignalRegistry();

Das Senden von Messages erfolgt in einer Unterklasse, dem MessageDispatcher:

IMessageSender getDispatcher();

Namespace-Datenpool

Beim Erstellen des Namespaces kann über die Konfiguration erzwingen werden, dass der Namespace einen eigenen Datenpool erhält. Dazu benötigen wir folgende Einstellung:

* Path: namespaces/{NID}
* Key: CConstantsDatapool.KEY_USE_OWN_DATAPOOL (= "OwnDatapool")
* Value: Boolean (True; Default: False)

Der Datenpool (genauer: die H2-Datenbank-Datei) wird im Konfigurationsverzeichnis gespeichert. Der Name der Datei lautet: namespace{NID}.mv.db

Den Datenpool des Namespaces erhält man über folgende Methode:

IDatapool getDatapool();

Standard-Namespaces

Der devel.one Kernel betreibt immer einen Namespace SYSTEM. Wenn also Services betrieben werden sollen, welche für die gesamte devel.one-Instanz stehen, so bietet sich die Registrierung der Services in diesem Namespace an.

PlugIns registrieren noch weitere System-Namespaces, wenn sie denn geladen werden. Dazu gehört insbesondere der Namespace TRANSPORT für alle Kommunikationsservices, TEST für Test-Frameworks und MONITOR für die Tool-UserInterfaces.

Threads bzw. Message-Queues

Ein Namespace hat mindestens einen Thread mit einer Message-Queue. Die Threads/MessageQueues werden in einer MessageQueueRegistry registriert. Man erhält sie hier:

IMessageQueueRegistry getMessageQueueRegistry();

Target-Monitore

Um das An- und Abmelden von bestimmten Targets zu monitoren, bieten Kernel und Namespaces Target-Monitore an:

void registerTargetMonitor(ITargetAddress aTargetAddress,
                           ITargetAddress aObserverAddress) throws CException;

void deregisterTargetMonitor(ITargetAddress aTargetAddress,
                             ITargetAddress aObserverAddress) throws CException;

Klienten bekommen dann die Nachrichten

  • CRecordNotifyTargetRegistered.ID beim Anmelden des Targets
  • CRecordNotifyTargetDeregistered.ID beim Abmelden des Targets.