Ejemplo: obtención de un contexto inicial mediante CosNaming

En WebSphere Application Server, se obtiene un contexto inicial del servidor de rutina de carga. La dirección del servidor de rutina de carga consta de un host y un puerto. Para obtener un contexto inicial, es necesario que sepa el host y el puerto del servidor que se utiliza como servidor de rutina de carga.

La obtención de un contexto inicial consta de dos pasos básicos:

  1. Obtener una referencia de ORB.
  2. Utilizar una referencia de ORB para obtener un contexto inicial. Alternativamente, utilice un ORB existente e invoke string_to_object con un URL de objeto CORBA con varias direcciones de servidores de nombres para obtener un contexto inicial.

Obtención de una referencia de ORB

Los clientes CosNaming puros, es decir, los clientes que no se ejecutan en un proceso del servidor, deben crear e inicializar una instancia de ORB con la que obtener el contexto inicial. Los clientes CosNaming que se ejecutan en procesos del servidor pueden obtener una referencia al ORB de servidor mediante una búsqueda de JNDI. Los siguientes ejemplos ilustran cómo crear e inicializar un ORB de cliente y obtener una referencia al ORB de servidor.

Creación de una instancia de ORB de cliente

Para crear una instancia de ORB, hay que invocar el método estático org.omg.CORBA.ORB.init. El método init necesita que una propiedad esté establecida en el nombre de la clase ORB de la que se quiere crear una instancia. Con el producto se incluye una implementación de ORB con el nombre de clase com.ibm.CORBA.iiop.ORB. El ORB de WebSphere Application Server reconoce las propiedades adicionales con las que puede especificar referencias iniciales.

A continuación se detallan los pasos básicos para la creación de un ORB:

  1. Cree un objeto Properties.
  2. Establezca la propiedad de clase ORB en la clase ORB del producto.
  3. Establezca las propiedades de referencia iniciales.
  4. Invoque ORB.init, pasando el objeto Properties.
[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);
...

Obtención de una referencia al ORB de servidor

Los clientes CosNaming que se ejecutan en un proceso del servidor pueden obtener una referencia al ORB de servidor mediante una búsqueda de JNDI en un nombre java:, tal como se muestra a continuación:

...
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"); 
... 

Utilización de una referencia de ORB para obtener un referencia de nombres inicial

Hay dos formas básicas de obtener un contexto CosNaming inicial. Ambas implican una invocación de método de ORB. La primera consiste en invocar el método resolve_initial_references en el ORB mediante una clave de referencia inicial. Para que esta llamada se realice correctamente, se debe inicializar el ORB mediante un referencia inicial para esa clave. La otra forma es mediante la invocación del método string_to_object en el ORB, pasando un URL de objeto CORBA con el host y puerto del servidor de rutina de carga. Los ejemplos siguientes ilustran ambos enfoques.

Invocación de resolve_initial_references

Una vez que obtenga una referencia de ORB, invoque el método resolve_initial_references en el ORB para obtener una referencia al contexto inicial. El siguiente ejemplo de código invoca resolve_initial_reference en una referencia de ORB.

...
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
...
// Obtener una referencia de ORB tal como se muestra en los ejemplos anteriores que aparecen en esta sección
...
org.omg.CORBA.Object obj = _orb.resolve_initial_references("NameService");
NamingContextExt initCtx = NamingContextExtHelper.narrow(obj);
...

Tenga en cuenta que la clave NameService se pasa al método resolve_initial_references. Las demás claves de contexto inicial se registran en los servidores del producto. Por ejemplo, NameServiceServerRoot se puede utilizar para obtener una referencia al contexto de raíz de servidor del servidor de nombres de rutina de carga. Para obtener más información sobre los contextos iniciales registrados en los ORB de servidor, consulte el tema sobre el soporte de contexto inicial.

Invocación de string_to_object mediante un URL de objeto CORBA

Puede utilizar un ORB compatible con INS para obtener un contexto inicial, incluso si el ORB no se ha inicializado mediante ninguna referencia inicial o propiedad de rutina de carga o si dichos valores de propiedades son para un servidor distinto del servidor de nombres desde el que desea obtener el contexto inicial. Para obtener un contexto inicial especificando explícitamente el servidor de nombres de rutina de carga, invoque el método string_to_object en el ORB, pasando un URL de objeto CORBA que contenga el host y puerto del servidor de rutina de carga.

El código del ejemplo siguiente invoca el método string_to_object en una referencia de ORB existente, pasando un URL de objeto CORBA que identifica el contexto inicial deseado.

... 
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
...
// Obtener una referencia de ORB tal como se muestra en los ejemplos anteriores que aparecen en esta sección
...
org.omg.CORBA.Object obj =
 orb.string_to_object("corbaloc:iiop:myhost.mycompany.com:2809/NameService");
NamingContextExt initCtx = NamingContextExtHelper.narrow(obj);
...

Tenga en cuenta que la clave NameService se utiliza en el URL de corbaloc. Las demás claves de contexto inicial se registran en los servidores del producto. Por ejemplo, puede utilizar NameServiceServerRoot para obtener una referencia al contexto de raíz de servidor del servidor de nombres de rutina de carga.

Uso de un ORB existente e invocación de string_to_object mediante un URL de objeto CORBA

Los URL de los objetos CORBA pueden contener más de una dirección de servidor de rutina de carga. Utilice esta característica cuando intente obtener un contexto inicial desde un clúster de servidores. Puede especificar en el URL las direcciones de servidor de rutina de carga de todos los servidores del clúster. La operación se ejecutará correctamente si como mínimo uno de los servidores está ejecutándose, lo que elimina un punto de anomalía individual. No se garantiza que la lista de direcciones se procesará en ningún orden concreto. Por ejemplo, es posible que se utilice la dirección del segundo servidor de rutina de carga para obtener el contexto inicial, aunque esté disponible el primer servidor de rutina de carga de la lista. A continuación, se muestra un ejemplo de un URL de corbaloc con varias direcciones:

... 
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
...
// Considerar que orb es una instancia existente de ORB
org.omg.CORBA.Object obj = orb.string_to_object(
"corbaloc::host1:9810,:host1:9811,:host2:9810/NameService");
NamingContextExt initCtx = NamingContextExtHelper.narrow(obj);
...

Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rnam_example_corba1
File name: rnam_example_corba1.html