Beispiel: Einen Ausgangskontext mit CosNaming anfordern

In WebSphere Application Server wird ein Ausgangskontext von einem Bootstrap-Server abgerufen. Die Adresse für den Bootstrap-Server setzt sich aus Host und Port zusammen. Zum Abrufen eines Ausgangskontexts müssen Sie den Host und den Port für Server kennen, der als Bootstrap-Server verwendet wird.

Zum Abrufen eines Ausgangskontexts müssen Sie zwei grundlegende Schritte durchführen:

  1. Eine ORB-Referenz abrufen.
  2. Eine ORB-Referenz verwenden, um einen Ausgangskontext abzurufen. Alternativ können Sie einen vorhandenen ORB verwenden und string_to_object mit einem CORBA-Objekt-URL aufrufen und die Adressen mehrer Namensserver angeben, um einen Ausgangskontext abzurufen.

Eine ORB-Referenz abrufen

Reine CosNaming-Clients, d. h. Clients, die nicht in einem Serverprozess ausgeführt werden, müssen eine ORB-Instanz erstellen und initialisieren, mit der sie den Ausgangskontext abrufen. CosNaming-Clients, die in Serverprozessen ausgeführt werden, können mit einem JNDI-Lookup eine Referenz auf den Server-ORB abrufen. Die folgenden Beispiele veranschaulichen, wie ein Client-ORB erstellt und initialisiert wird und wie eine Referenz auf den Server-ORB abgerufen wird.

Eine Client-ORB-Instanz erstellen

Wenn Sie eine ORB-Instanz erstellen möchten, müssen Sie die statische Methode org.omg.CORBA.ORB.init aufrufen. Die init-Methode erfordert eine Eigenschaft, die für den Namen der zu instanzierenden ORB-Klasse festgelegt ist. Eine ORB-Implementierung mit dem Klassennamen "com.ibm.CORBA.iiop.ORB" ist im Produkt enthalten. Der ORB von WebSphere Application Server erkennt zusätzliche Eigenschaften, mit denen Sie Ausgangsreferenzen angeben können.

Die grundlegenden Schritte zum Erstellen eines ORB sind folgende:

  1. Erstellen Sie ein Properties-Objekt.
  2. Setzen Sie die ORB-Klasseneigenschaft auf die ORB-Klasse des Produkts.
  3. Setzen Sie die Eigenschaften für die Ausgangsreferenz.
  4. Rufen Sie ORB.init auf, und übergeben Sie das Properties-Objekt.
[AIX][HP-UX][Linux][Solaris][Windows]
...
import java.util.Properties;
import org.omg.CORBA.ORB;
...
Properties props = new Properties();
props.put("org.omg.CORBA.ORBClass", "com.ibm.CORBA.iiop.ORB");
props.put("com.ibm.CORBA.ORBInitRef.NameService", "corbaloc:iiop:myhost.mycompany.com:2809/NameService");
props.put("com.ibm.CORBA.ORBInitRef.NameServiceServerRoot", "corbaloc:iiop:myhost.mycompany.com:2809/NameServiceServerRoot");
ORB _orb = ORB.init((String[])null, props);
...
[z/OS]
...
import java.util.Properties;
import org.omg.CORBA.ORB;
...
Properties props = new Properties();
props.put("org.omg.CORBA.ORBClass","com.ibm.ws390.orb.ORB");
props.put("com.ibm.CORBA.ORBInitRef.NameService", "corbaloc:iiop:myhost.mycompany.com:2809/NameService");
props.put("com.ibm.CORBA.ORBInitRef.NameServiceServerRoot", "corbaloc:iiop:myhost.mycompany.com:2809/NameServiceServerRoot");
ORB _orb = ORB.init((String[])null, props);
...
[IBM i]
...
import java.util.Properties;
import org.omg.CORBA.ORB;
...
Properties props = new Properties();
props.put("org.omg.CORBA.ORBClass","com.ibm.ws390.orb.ORB");
props.put("com.ibm.CORBA.ORBInitRef.NameService", "corbaloc:iiop:myhost.mycompany.com:2809/NameService");
props.put("com.ibm.CORBA.ORBInitRef.NameServiceServerRoot", "corbaloc:iiop:myhost.mycompany.com:2809/NameServiceServerRoot");
ORB _orb = ORB.init((String[])null, props);
...

Referenz auf den Server-ORB abrufen

CosNaming-Clients, die in Serverprozessen ausgeführt werden, können mit einem JNDI-Lookup für einen java:-Namen wie folgt eine Referenz auf den Server-ORB abrufen:

...
import javax.naming.Context;  
import javax.naming.InitialContext;
import org.omg.CORBA.ORB;
...
Context initialContext = new InitialContext();    
ORB orb = (ORB) initialContext.lookup("java:comp/ORB");
... 

ORB-Referenz zum Abrufen einer Ausgangs-Naming-Referenz verwenden

Es gibt zwei grundlegende Möglichkeiten, einen CosNaming-Ausgangskontext abzurufen. In beiden Fällen wird eine ORB-Methode aufgerufen. Im ersten Fall wird die Methode resolve_initial_references für den ORB mit einem Ausgangsreferenzschlüssel aufgerufen. Damit dieser Aufruf funktioniert, muss der ORB mit einer Ausgangsreferenz für diesen Schlüssel initialisiert werden. Im zweiten Fall wird die Methode string_to_object für den ORB aufgerufen. Dabei wird ein CORBA-Objekt-URL, in dem der Host und der Port des Bootstrap-Servers angegeben sind, übergeben. Die folgenden Beispiele veranschaulichen beide Vorgehensweisen.

resolve_initial_references aufrufen

Wenn Sie eine ORB-Referenz abgerufen haben, rufen Sie die Methode resolve_initial_references für den ORB auf, um eine Referenz auf den Ausgangskontext abzurufen. Im folgenden Codebeispiel wird resolve_initial_reference für eine ORB-Referenz aufgerufen.

...
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
...
// ORB-Referenz wie in obigen Beispielen gezeigt
...
org.omg.CORBA.Object obj = _orb.resolve_initial_references("NameService");
NamingContextExt initCtx = NamingContextExtHelper.narrow(obj);
...

Beachten Sie, dass der NameService des Schlüssels an die Methode resolve_initial_references übergeben wird. In den Produktservern sind andere Schlüssel von Ausgangskontexten registriert. Beispielsweise kann man mit NameServiceServerRoot eine Referenz auf den Serverstammkontext, der sich auf dem Bootstrapnamensserver befindet, abrufen. Weitere Informationen zu den in Server-ORBs registrierten Ausgangskontexten finden Sie im Artikel zur Unterstützung von Ausgangskontexten.

string_to_object mit einem CORBA-Objekt-URL aufrufen

Sie können mithilfe eines INS-kompatiblen ORB einen Ausgangskontext abrufen, auch wenn der ORB nicht mit Ausgangsreferenzen oder Bootstrapeigenschaften initialisiert wird oder wenn diese Eigenschaftseinstellungen für einen anderen als den Namensserver, von dem Sie den Ausgangskontext abrufen möchten, vorgesehen sind. Wenn Sie einen Ausgangskontext durch explizite Angabe des Bootstrapnamensservers abrufen möchten, rufen Sie die Methode string_to_object für den ORB auf. Dazu müssen Sie einen CORBA-Objekt-URL, in dem der Host und der Port des Bootstrap-Servers angegeben sind, übergeben.

Der Code in dem unten angegebenen Beispiel ruft die Methode string_to_object für eine vorhandene ORB-Referenz auf. Dabei wird ein CORBA-Objekt-URL, der den gewünschten Ausgangskontext angibt, übergeben.

... 
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
...
// ORB-Referenz wie in obigen Beispielen gezeigt
...
org.omg.CORBA.Object obj =
 orb.string_to_object("corbaloc:iiop:myhost.mycompany.com:2809/NameService");
NamingContextExt initCtx = NamingContextExtHelper.narrow(obj);
...

Beachten Sie, dass der NameService des Schlüssels im corbaloc-URL verwendet wird. In den Produktservern sind andere Schlüssel von Ausgangskontexten registriert. Beispielsweise kann man mit NameServiceServerRoot eine Referenz auf den Serverstammkontext, der sich auf dem Bootstrapnamensserver befindet, abrufen.

Vorhandenen ORB verwenden und string_to_object mit einem CORBA-Objekt-URL abrufen

CORBA-Objekt-URLs können mehrere Bootstrapadressen enthalten. Sie können dieses Feature nutzen, wenn Sie versuchen, einen Ausgangskontext von einem Server-Cluster abzurufen. Sie haben die Möglichkeit, im URL die Bootstrapadressen für alle im Cluster befindlichen Server anzugeben. Die Operation kann ausgeführt werden, wenn mindestens einer der Server ausgeführt und ein einzelner Single Point of Failure behoben wird. Die Adressliste wird nicht in einer bestimmten Reihenfolge abgearbeitet. Beispielsweise kann die zweite Adresse des Bootstrap-Servers zum Abrufen des Ausgangskontexts verwendet werden, obwohl der erste Bootstrap-Server in der Liste verfügbar ist. Es folgt ein Beispiel für einen corbaloc-URL mit mehreren Adressen.

... 
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
...
// orb bezeichnet eine vorhandene ORB-Instanz
org.omg.CORBA.Object obj = orb.string_to_object(
"corbaloc::myhost1:9810,:myhost1:9811,:myhost2:9810/NameService");
NamingContextExt initCtx = NamingContextExtHelper.narrow(obj);
...

Symbol, das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rnam_example_corba1
Dateiname:rnam_example_corba1.html