Unterstützung für Namenssuche in Implementierungsdeskriptoren und Thin Clients
Serveranwendungsobjekte, wie z. B. EJB-Homes, werden relativ zum Serverstammkontext des Servers, auf dem die Anwendung installiert ist, gebunden. Andere Objekte, wie z. B. Ressourcen, können auch an einen bestimmten Serverstamm gebunden werden. Die Namen, die zum Lokalisieren dieser Objekte verwendet werden, müssen qualifiziert sein, damit sie für die Auswahl des richtigen Serverstamms verwendet werden können. In diesem Artikel wird erläutert, was relative und qualifizierte Namen sind, in welchen Fällen sie verwendet werden und wie Sie sie erstellen können.
Ab Version 8.0 werden EJB-Home-Verzeichnisse unter dem Namen java:global/Anwendungsname/Modulname/Bean-Name gebunden. Namen dieses Formats sind nicht topologiebasiert und bereits vollständig qualifiziert. Alle Anwendungsressourcen, die mit dem Namen java:global, java:app oder java:module gebunden werden, benötigen keine weitere Qualifikation, wenn der Lookup-Name java:global, java:app oder java:module angegeben ist. Anwendungsressourcen enthalten beispielsweise EJB-Referenzen, Ressourcenreferenzen und Umgebungseinträge.
Relative Namen
Alle Namen werden relativ zu einem Kontext interpretiert. Daher wird ein Name, der in einem Kontext aufgelöst werden kann, nicht notwendigerweise in einem anderen Kontext in demselben Namespace aufgelöst. Dieser Punkt ist wichtig, da das System Objekte bindet, die sich auf den Serverstammkontext des Servers, auf dem die Anwendung installiert ist, beziehen. Jeder Server besitzt seinen eigenen Serverstammkontext. Der JNDI-Ausgangskontext (Java™ Naming and Directory Interface) ist standardmäßig der Serverstammkontext des Servers, der von dem zum Abrufen des Ausgangskontextes verwendeten Provider-URL angegeben wird. (Normalerweise setzt der URL sich aus einem Host und einem Port zusammen.) Für Anwendungen, die in einem Serverprozess ausgeführt werden, ist der standardmäßig verwendete JNDI-Ausgangskontext der Serverstammkontext für diesen Server. Ein relativer Name wird aufgelöst, wenn der Ausgangskontext von dem Server, der das Zielobjekt enthält, abgerufen wird. Der Name wird nicht aufgelöst, wenn der Ausgangskontext von einem anderen Server abgerufen wird.
Wenn alle Clients einer Serveranwendung in demselben Serverprozess ausgeführt werden wie die Anwendung, werden alle Objekte, die dieser Anwendung zugeordnet sind, an denselben Ausgangskontext gebunden wie der Clientausgangskontext. In diesem Fall sind nur Namen, die sich auf den Serverstammkontext des Servers beziehen, für den Zugriff auf diese Serverobjekte erforderlich. Häufig hat eine Serveranwendung Clients, die außerhalb des Anwendungsserverprozesses ausgeführt werden. Der Ausgangskontext für diese Clients unterscheidet sich möglicherweise vom Ausgangskontext der Serveranwendung, und Lookups, die für die relativen Namen der Serverobjekte durchgeführt werden, schlagen möglicherweise fehl. Diese Clients müssen den qualifizierten Namen für die Serverobjekte verwenden. Dieser Punkt muss berücksichtigt werden, wenn JNDI-Namenswerte in einem Implementierungsdeskriptor für Java-EE-Clientanwendungen definiert bzw. Lookup-Namen in Thin Clients definiert werden. Qualifizierte Namen können über jeden Ausgangskontext in der Zelle aufgelöst werden.
Qualifizierte Namen
Alle Namen werden relativ zu einem Kontext interpretiert. In diesem Zusammenhang bezieht sich der Begriff Qualifizierter Name auf Namen, die über jeden Ausgangskontext in einer Zelle aufgelöst werden können. Diese Aktion wird mit Namen ausgeführt, die zu demselben Kontext, dem Zellenstamm, navigieren. Der Rest des qualifizierten Namens bezieht sich auf den Zellenstamm und gibt ein Objekt in der Zelle eindeutig an. Alle Ausgangskontexte auf einem Server (d. h., alle Namenskontexte auf einem Server, die im ORB als Ausgangsreferenz registriert sind) enthalten eine Bindung mit dem Namen cell, die eine Verbindung zurück zum Zellenstammkontext herstellen. Alle qualifizierten Namen beginnen mit der Zeichenfolge cell/, um vom aktuellen Ausgangskontext zurück zum Zellenstammkontext zu navigieren.
Ein qualifizierter Name für ein Objekt ist für die gesamte Zelle gültig. Der Name kann auf einer Topologie basieren oder ein fester, unter dem zellenpersistenten Stamm gebundener Name sein. Die topologiebasierten Namen, die unten ausführlicher beschrieben werden, ermöglichen die Navigation durch den Namespace des Systems zum Zielobjekt. Ein fester Name, der unter dem zellenpersistenten Stamm gebunden ist, hat denselben qualifizierten Namen in der gesamten Zelle und ist topologieunabhängig. Wenn Sie unter dem zellenpersistenten Stamm für ein Serveranwendungsobjekt einen festen Namen erstellen möchten, müssen Sie bei der Installation der Serveranwendung einen zusätzlichen Schritt durchführen, dieser Schritt verhindert jedoch, dass Clients beim Verschieben in eine andere Position der Zellentopologie beeinträchtigt werden. Der Prozess zum Erstellen eines festen Namens wird später noch beschrieben.
Im Allgemeinen müssen Sie qualifizierte Namen für EJB-JNDI-Namenswerte in Implementierungsdeskriptoren für Java-EE-Clientanwendungen sowie für EJB-Lookup-Namen in Thin Clients verwenden. Die einzige Ausnahme liegt vor, wenn der Ausgangskontext von dem Server, auf dem sich das Zielobjekt befindet, abgerufen wird. Beispielsweise kann eine Session-Bean, die als Client für eine Entity-Bean fungiert, einen relativen Namen verwenden, wenn die zwei Beans auf demselben Server ausgeführt werden. Wenn die Session-Bean und die Entity-Beans auf verschiedenen Servern ausgeführt werden, muss der JNDI-Name der Entity-Bean im Implementierungsdeskriptor der Session-Bean qualifiziert sein. Dieselbe Voraussetzung gilt möglicherweise auch für Ressourcen, je nach Bereich der Ressource.
- Topologiebasierte Namen
Die Partition für den Systemnamespace im Zellennamespace gibt die Zellentopologie wieder. Die Navigation in dieser Struktur ist möglich, um ein an den Namespace der Zelle gebundenes Objekt zu erreichen. Topologiebasierte qualifizierte Namen beinhalten Elemente der Topologie, die die Objektposition in der Zelle wiedergeben.
Für ein Systemobjekt, wie z. B. ein EJB-Home, hängt das Format des topologiebasierten Namens davon ab, ob das Objekt an einen Einzelserver oder einen Cluster gebunden ist. Beide Formate sind nachfolgend beschrieben.
- Einzelserver
- Ein Objekt, das an einen Einzelserver gebunden ist, hat einen topologiebasierten Namen des folgenden Formats:
Dabei gilt: Knotenname und Servername sind der Knoten- und der Servername des Servers, auf dem das Objekt gebunden ist, und relativer_JNDI-Name ist der nicht qualifizierte Objektname, d. h., der Objektname relativ zum Serverstammkontext des Servers.cell/nodes/Knotenname/servers/Servername/relativer_JNDI-Name
- Server-Cluster
- Ein Objekt, das an einen Server-Cluster gebunden ist, hat einen topologiebasierten qualifizierten Namen des folgenden Formats:
Dabei gilt: Clustername ist der Name des Server-Cluster, in dem das Objekt gebunden ist, und relativer_JNDI-Name ist der nicht qualifizierte Objektname, d. h., der Objektname relativ zum Serverstammkontext des Cluster-Member.cell/clusters/Clustername/relativer_JNDI-Name
- Feste Namen
Es ist möglich, einen festen Namen für ein Serverobjekt zu erstellen, damit der qualifizierte Name von der Zellentopologie unabhängig ist. Diese Eigenschaft ist wünschenswert, wenn Clients der Anwendung in anderen Serverprozessen oder als reine Clients ausgeführt werden. Feste Namen haben den Vorteil, dass sie beim Verschieben des Objekts auf einen anderen Server nicht geändert werden. Die JNDI-Namenswerte in Implementierungsdeskriptoren für eine Java-EE-Clientanwendung können den qualifizierten festen Namen für ein Serverobjekt unabhängig von der Zellentopologie, in der die Client- oder Serveranwendung installiert wird, referenzieren.
Wenn Sie einen zellenweiten festen Namen für ein Serveranwendungsobjekt definieren möchten, müssen Sie nach der Installation der Serveranwendung einen zusätzlichen Schritt durchführen. Das bedeutet, dass unter dem zellenpersistenten Stamm eine Bindung für das Objekt erstellt werden muss. Ein fester Name, der unter dem zellenpersistenten Stamm gebunden ist, kann einen beliebigen Namen haben. Aber alle Namen unter dem zellenpersistenten Stamm müssen in der Zelle eindeutig sein, da der zellenpersistente Stamm für die gesamte Zelle globale Gültigkeit hat.
Ein qualifizierter fester Name hat folgendes Format:
festerName ist ein willkürlicher fester Name.cell/persistent/festerName
Die Bindung kann über das Programm erstellt werden (z. B. mit JNDI). Es ist jedoch bequemer, eine für die Zelle gültige Bindung für das Serverobjekt zu konfigurieren.
Sie müssen die programmierte oder konfigurierte Bindung auf dem aktuellen Stand halten. Konfigurierte EJB-Bindungen basieren auf der Position der Enterprise-Bean in der Zellentopologie. Wenn Sie z. B. die EJB-Anwendung auf einen anderen Server verschieben, muss die konfigurierte Bindung aktualisiert werden. Ähnliche Änderungen beeinträchtigen eine EJB-Home-Referenz, die über das Programm gebunden ist, sodass der feste Name mit einer aktuellen Referenz erneut gebunden werden muss. Bei Java-EE-Clients bleibt der JNDI-Namenswert für das Objekt und bei Thin Clients der Lookup-Name für das Objekt gleich. Anders ausgedrückt, Clients, die über feste Namen auf Objekte zugreifen, sind von Änderungen an der Konfiguration von Serveranwendungen, auf die sie zugreifen, nicht betroffen.
Lookup-Namen in Implementierungsdeskriptorbindungen verwenden
Java-EE-Anwendungen können Implementierungsdeskriptoren wie ejb-ref, resource-ref oder resource-env-ref verwenden, mit denen verschiedene Typen von Referenzen deklariert werden. Diese Referenzdeklarationen definieren Lookup-Namen des Typs java:comp/env, die den entsprechenden Java-EE-Komponenten zur Verfügung stehen. Jeder Lookup-Name vom Typ java:comp/env muss einem Lookup-Namen im globalen Namespace, relativ zum Serverstammkontext (dem Standard-JNDI-Anfangskontext), zugeordnet sein.
Wenn eine Referenz einem Objekt zugeordnet ist, das unter dem Serverstammkontext desselben Servers gebunden ist wie die Komponente, die die Suchfunktion ausführt, können Sie einen relativen Lookup-Namen verwenden. Wenn eine Referenz einem Objekt zugeordnet ist, das unter dem Serverstammkontext eines anderen Servers gebunden ist, müssen Sie den Lookup-Namen qualifizieren. Sie müssen einen Lookup-Namen beispielsweise qualifizieren, wenn ein Servlet, das in einem Server ausgeführt wird, ein Element "ejb-ref" für eine EJB deklariert, die in einem anderen Server ausgeführt wird. Ist die Referenz einem Objekt zugeordnet, das in einer persistenten Partition des Namespace gebunden ist, oder einem Objekt, das über eine konfigurierte Namespacebindung auf Zellen- oder Knotenebene gebunden ist, müssen Sie ebenfalls einen qualifizierten Namen verwenden.
Sie können die Bindungswerte für Implementierungsdeskriptorreferenzen angeben, wenn Sie die Anwendung installieren, und nach der Anwendungsinstallation bearbeiten. Wenn Sie den JNDI-Lookup-Namen, der einer Referenz zugeordnet ist, ändern müssen, klicken Sie in der Administrationskonsole auf JNDI-Name der Zielressource einen Wert ein.
. Der Abschnitt "Referenzen" enthält Links, die den verschiedenen Referenztypen entsprechen, z. B. EJB-Referenzen und Referenzen auf Ressourcenumgebungseinträge, die von dieser Anwendung deklariert werden. Klicken Sie auf den Link für den Referenztyp, den Sie ändern müssen, und geben Sie anschließend im Feld