Ejemplo: obtención de un contexto inicial estableciendo la propiedad del URL de proveedor

Por lo general, los clientes JNDI (Java™ Naming and Directory Interface) pueden presuponer que el entorno correcto ya está configurado, por lo que no es necesario establecer de forma explícita los valores de propiedad y pasarlos al constructor InitialContext. No obstante, es posible que un cliente JNDI tenga que acceder a un espacio de nombres que no sea el identificado en su entorno. En este caso, es necesario establecer de forma explícita la propiedad java.naming.provider.url (el URL de proveedor) utilizado por el constructor InitialContext. Un URL de proveedor contiene información acerca del servidor de rutina de carga que la fábrica de contexto inicial puede utilizar para obtener un contexto inicial. Cualquier valor de propiedad que se pase directamente al constructor InitialContext tiene prioridad sobre los valores de las mismas propiedades encontradas en otro lugar del entorno.

Puede utilizar dos formatos de URL de proveedor diferentes con la fábrica de contexto inicial de WebSphere Application Server:
  • Un URL de objeto CORBA
  • Un URL de IIOP

Los URL de objeto CORBA son más flexibles que los URL de IIOP y son el formato de URL que se recomienda utilizar. Los URL de objetos CORBA forman parte de la especificación de nombres interoperativa (Interoperable Naming Specification) OMG CosNaming. Un URL de corbaname, por ejemplo, puede incluir la información de nombre de búsqueda y el contexto inicial y se puede utilizar como nombre de búsqueda sin necesidad de obtener explícitamente otro contexto inicial. Los URL de IIOP son el formato JNDI heredado, aunque la fábrica de contexto inicial de WebSphere Application Server todavía les dé soporte.

Los ejemplos siguientes muestran el uso de estos URL.

Utilización de un URL de objeto CORBA

Este ejemplo muestra un URL de objeto CORBA.

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

Utilización de un URL de objeto CORBA con varias direcciones de servidor de nombres

Los URL de los objetos CORBA pueden contener más de una dirección de rutina de carga. Puede utilizar esta característica cuando intente obtener un contexto inicial desde un clúster de servidores. Puede especificar en el URL las direcciones de rutina de carga de todos los servidores del clúster. La operación se ejecuta correctamente si, como mínimo, uno de los servidores se está ejecutando, 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 segunda dirección de rutina de carga para obtener el contexto inicial aunque esté disponible el servidor de la primera dirección de rutina de carga de la lista.

Los URL de proveedor de varias direcciones que se resuelven en servidores de sistemas que no sean z/OS no pueden contener direcciones de rutina de carga para procesos de agente de nodo. Esto se debe a que la rutina de carga de un agente de nodo devuelve un contexto inicial no habilitado para WLM. En consecuencia, no se utiliza WLM. En su lugar, los URL sólo deberían contener direcciones de programa de arranque de miembros del mismo clúster de forma que el contexto inicial esté habilitado para WLM. Si los URL contienen las direcciones de programa de arranque de varios clústeres, el sistema podría tener un comportamiento incorrecto. Un nombre dado puede no resolverse, o resolverse en el mismo objeto en todos los clústeres. Al resolverse en servidores que se ejecutan en el sistema operativo z/OS, los URLs pueden contener direcciones de programa de arranque para procesos de agente de nodo porque, en z/OS, un agente de nodo devuelve un contexto inicial habilitado para WLM.

A continuación, se muestra un ejemplo de un URL de corbaloc con varias direcciones:

...
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");
// Todos los servidores del URL de proveedor que aparece a continuación son miembros
// del mismo clúster.
env.put(Context.PROVIDER_URL,
     "corbaloc::myhost1:9810,:myhost1:9811,:myhost2:9810");
Context initialContext = new InitialContext(env);
...

Utilización de un URL de objeto CORBA desde una implementación de JNDI que no es de WebSphere Application Server.

Lo más probable es que las fábricas de contexto inicial para implementaciones de plug-in CosNaming JNDI que no sean la fábrica de contexto inicial de WebSphere Application Serverobtengan un contexto inicial utilizando la clave de objeto NameService. Cuando utilice este tipo de fábrica de contexto para obtener un contexto inicial desde un servidor de nombres de WebSphere Application Server, el contexto inicial es el contexto de raíz de célula. Dado que los artefactos del sistema, como las ubicaciones iniciales de EJB asociadas a un servidor están enlazados bajo el contexto de raíz de servidor del servidor, los nombres que se utilizan en las operaciones JNDI deben estar cualificados. Si desea utilizar nombres relativos, asegúrese de que el contexto inicial es el contexto de raíz de servidor bajo el que se enlaza el objeto de destino. Para que el contexto de raíz de servidor sea el contexto inicial, especifique un URL de proveedor de corbaloc con una clave de objeto de NameServiceServerRoot.

En este ejemplo se muestra un URL de tipo de objeto CORBA procedente de una implementación de JNDI que no es de WebSphere Application Server. Este ejemplo presupone que se da soporte total al URL de objeto CORBA mediante la implementación de JNDI que no es de WebSphere Application Server. La clave de objeto de NameServiceServerRoot se especifica de modo que el contexto inicial será el contexto de raíz de servidor del servidor especificado.

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

Si se utilizan nombres cualificados, puede utilizar la clave predeterminada de NameService.

Utilización de un URL de IIOP

El tipo IIOP de URL es un formato heredado que no es tan flexible como los URL de objetos CORBA. No obstante, se sigue dando soporte a los URL de este tipo. El siguiente ejemplo muestra un URL de tipo IIOP como el URL de proveedor.

...
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://mihost.miempresa.com:2809");
Context initialContext = new InitialContext(env);
...

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_prop2
File name: rnam_example_prop2.html