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 (:ref:`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 :ref:`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 :ref:`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.