Beispiel: Ausgangskontext durch Definieren der Eigenschaft "Provider-URL" abrufen
Im Allgemeinen müssen JNDI-Clients (Java™ Naming and Directory Interface) voraussetzen können, dass die richtige Umgebung bereits konfiguriert wurde und Eigenschaftswerte nicht mehr explizit konfiguriert und an den InitialContext-Konstruktor übergeben werden müssen. Ein JNDI-Client muss jedoch auf einen anderen als den in seiner Umgebung definierten Namespace zugreifen. In diesem Fall ist es erforderlich, die vom Konstruktor InitialContext verwendete Eigenschaft "java.naming.provider.url" (Provider-URL) explizit zu konfigurieren. Ein Provider-URL enthält Daten des Bootstrap-Servers, die die Ausgangskontextfactory verwenden kann, um einen Ausgangskontext abzurufen. Alle Eigenschaftswerte, die direkt an den InitialContext-Konstruktor übergeben wurden, haben eine höhere Priorität als die gleichen, in der Umgebung ermittelten Einstellungen.
- CORBA-Objekt-URL
- IIOP-URL
URLs von CORBA-Objekten sind flexibler als IIOP-URLs und werden als URL-Format empfohlen. CORBA-Objekt-URLs sind Bestandteil der OMG-Spezifikation "CosNaming Interoperable Naming". Der URL eines CORBA-Namens kann z. B. Angaben zu einem Ausgangskontext und zu einem Lookup-Namen enthalten und kann als Lookup-Name verwendet werden, ohne das ein anderer Ausgangskontext explizit abgerufen werden muss. Die IIOP-URLs sind das traditionelle JNDI-Format, werden jedoch von der Ausgangskontextfactory von WebSphere Application Server noch unterstützt.
Die folgenden Beispiele veranschaulichen die Verwendung dieser URLs.
CORBA-Objekt-URL verwenden
Dieses Beispiel veranschaulicht einen CORBA-Objekt-URL.
...
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
...
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
env.put(Context.PROVIDER_URL, "corbaloc:iiop:myhost.mycompany.com:2809");
Context initialContext = new InitialContext(env);
...
Einen CORBA-Objekt-URL mit mehreren Namensserveradressen verwenden
CORBA-Objekt-URLs können mehrere Bootstrapadressen enthalten. Sie können diese Eigenschaft nutzen, wenn Sie versuchen, einen Ausgangskontext von einem Server-Cluster abzurufen. Sie können im URL Bootstrapadressen für alle im Cluster befindlichen Server angeben. Die Operation wird ausgeführt, wenn mindestens einer der Server ausgeführt und ein einzelner Single Point of Failure gelöscht wird. Die Adressliste wird nicht in einer bestimmten Reihenfolge abgearbeitet. Beispielsweise kann die zweite Bootstrapadresse zum Abrufen des Ausgangskontexts verwendet werden, obwohl der Server an der ersten Bootstrapadresse in der Liste verfügbar ist.
Provider-URLs mit mehreren Adressen, die in Server auf anderen Systemen als z/OS-Systemen aufgelöst werden, dürfen keine Bootstrapadressen für Node-Agent-Prozesse enthalten. Der Grund dafür ist, dass ein Bootstrapping-Node-Agent einen Ausgangskontext zurückgibt, der nicht für WLM aktiviert ist. Folglich wird WLM nicht verwendet. Stattdessen sollten die URLs nur Bootstrapadressen von Membern desselben Clusters enthalten, damit der Ausgangskontext für WLM aktiviert ist. Wenn die URLs die Bootstrapadressen mehrerer Cluster enthalten, kann dies ein falsches Verhalten zur Folge haben. Ein gegebener Name wird möglicherweise nicht aufgelöst oder auf allen Clustern in dasselbe Objekt aufgelöst. Wenn URLs in Server aufgelöst werden, die unter z/OS ausgeführt werden, können die URLs Bootstrapadressen für Node-Agent-Prozesse enthalten, weil ein Node Agent unter z/OS einen Ausgangskontext zurückgibt, der für WLM aktiviert ist.
Es folgt ein Beispiel für einen corbaloc-URL mit mehreren Adressen.
...
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
...
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
// Alle Server im folgenden Provider-URL sind Member
// desselben Cluster.
env.put(Context.PROVIDER_URL,
"corbaloc::myhost1:9810,:myhost1:9811,:myhost2:9810");
Context initialContext = new InitialContext(env);
...
Einen CORBA-Objekt-URL aus einer JNDI-Implementierung verwenden, die nicht von WebSphere Application Server stammt
Ausgangskontextfactorys für Implementierungen von CosNaming-JNDI-Plug-ins, die nicht die Ausgangskontextfactorys von WebSphere Application Server sind, rufen wahrscheinlich einen Ausgangskontext mit dem Objektschlüssel NameService ab. Wenn Sie eine solche Kontextfactory verwenden, um einen Ausgangskontext vom Namensserver von WebSphere Application Server abzurufen, ist der Ausgangskontext der Stammkontext der Zelle. Da Systemartefakte, wie z. B. einem Server zugeordnete EJB-Homes, unter dem Stammkontext des Servers gebunden werden, müssen die in den JNDI-Operationen verwendeten Namen qualifiziert sein. Wenn Sie relative Namen verwenden möchten, vergewissern Sie sich, dass Ihr Ausgangskontext der Stammkontext des Servers ist, unter dem das Zielobjekt gebunden wird. Möchten Sie den Stammkontext des Servers als Ausgangskontext verwenden, müssen Sie einen corbaloc-Provider-URL mit dem Objektschlüssel NameServiceServerRoot angeben.
Das folgende Beispiel veranschaulicht einen CORBA-Objekt-URL aus einer JNDI-Implementierung, die nicht von WebSphere Application Server stammt. Bei diesem Beispiel wird vorausgesetzt, dass der CORBA-Objekt-URL von der JNDI-Implementierung außerhalb von WebSphere Application Server vollständig unterstützt wird. Der Objektschlüssel NameServiceServerRoot wird angegeben, damit der Ausgangskontext als Stammkontext des angegebenen Servers verwendet wird.
...
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
...
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.somecompany.naming.TheirInitialContextFactory");
env.put(Context.PROVIDER_URL,
"corbaname:iiop:myhost.mycompany.com:9810/NameServiceServerRoot");
Context initialContext = new InitialContext(env);
...
Wenn qualifizierte Namen verwendet werden, können Sie den Standardschlüssel NameService verwenden.
Einen IIOP-URL verwenden
Der URL des Typs IIOP ist ein traditionelles Format, das nicht so flexibel ist wie CORBA-Objekt-URLs. URLs dieses Typs werden jedoch noch unterstützt. Das folgende Beispiel veranschaulicht einen URL des Typs IIOP als Provider-URL.
...
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
...
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
env.put(Context.PROVIDER_URL, "iiop://myhost.mycompany.com:2809");
Context initialContext = new InitialContext(env);
...