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.