Ejemplo: obtención del contexto inicial por omisión

Hay varios modos de que un programa obtenga el contexto inicial por omisión.

El ejemplo siguiente obtiene el contexto inicial por omisión. Tenga en cuenta que no se pasa un URL de proveedor al constructor javax.naming.InitialContext.

...
import javax.naming.Context;
import javax.naming.InitialContext;
...
   Context initialContext = new InitialContext();
...

El contexto inicial predeterminado que se devuelve depende del entorno de ejecución del cliente JNDI (Java™ Naming and Directory Interface). Los siguientes son los contextos iniciales devueltos en los diferentes entornos:

Cliente ligero
El contexto raíz de servidor del servidor que se está ejecutando en el host local del puerto 2809.
Cliente puro
El contexto inicial especificado por la propiedad java.naming.provider.url que se pasa al mandato launchClient con el parámetro de línea de mandatos -CCD. El contexto normalmente será el contexto raíz de servidor del servidor en la dirección especificada en el URL, aunque se puede construir un URL de corbaname o corbaloc que se resuelva en cualquier otro contexto.

Si no se especifica el URL del proveedor, es el contexto raíz de servidor del servidor que se está ejecutando en el host y puerto especificados por los parámetros de línea de mandatos -CCproviderURL o -CCBootstrapHost y -CCBootstrapPort. El host predeterminado es el host local y el puerto predeterminado es 2809.

Proceso servidor
El contexto inicial es el contexto raíz de servidor para dicho proceso.

Aunque no se especifica explícitamente ningún URL de proveedor en el ejemplo anterior, es posible que el constructor InitialContext encuentre un URL de proveedor definido en otros lugares que busque para obtener valores de propiedades.

Los usuarios de propiedades relacionadas con la inicialización de ORB deben leer el resto de esta de sección para obtener una mayor comprensión sobre cómo se obtienen exactamente los contextos iniciales.

Determinación del servidor que se va a utilizar para obtener el contexto inicial

Los servidores de nombres de WebSphere Application Server son servidores de nombres CosNaming de CORBA y el producto proporciona una implementación de plug-in CosNaming JNDI para que los clientes JNDI realicen operaciones de denominación en los espacios de nombres del producto. La implementación de plug-in CosNaming se selecciona mediante una propiedad JNDI que se pasa al constructor InitialContext. Esta propiedad es java.naming.factory.initial y especifica la implementación de fábrica de contexto inicial que se debe utilizar para obtener un contexto inicial. La fábrica devuelve una instancia javax.naming.Context, que forma parte de la implementación.

Las aplicaciones normalmente utilizan la fábrica de contexto inicial, com.ibm.websphere.naming.WsnInitialContextFactory, para realizar operaciones JNDI. El entorno de ejecución de WebSphere Application Server se configura para que utilice esta fábrica de contexto inicial si el cliente JNDI no especifica explícitamente ninguna. Al invocar la fábrica de contexto inicial, se obtiene un contexto inicial. En los párrafos siguientes se explica cómo la fábrica de contexto inicial obtiene el contexto inicial en los entornos de servidor y cliente.

  • Registro de las referencias iniciales de los procesos de servidor

    Cada WebSphere Application Server tiene un ORB que se utiliza para recibir y asignar invocaciones en los objetos que se ejecutan en dicho servidor. Los servicios que se ejecutan en el proceso del servidor pueden registrar referencias iniciales con el ORB. Cada referencia inicial se registra con una clave, que es un valor de serie. Una referencia inicial puede ser cualquier objeto CORBA. Los servidores de nombres de WebSphere Application Server registran varios contextos de inicio como referencias iniciales mediante claves predefinidas. Cada referencia inicial de servidor de nombres es una instancia de la interfaz org.omg.CosNaming.NamingContext.

  • Obtención de referencias iniciales en los procesos de cliente puro

    Los clientes JNDI puros, es decir, los clientes JNDI que no se están ejecutando en un proceso de WebSphere Application Server, también tienen una instancia de ORB. Esta instancia de ORB de cliente se puede pasar al constructor InitialContext, aunque normalmente la fábrica de contexto inicial crea e inicializa la instancia de ORB de cliente de forma transparente. Un ORB de cliente se puede inicializar mediante referencias iniciales, aunque lo más probable es que las referencias iniciales se resuelvan en objetos que se ejecuten en algún servidor. La fábrica de contexto inicial no define ninguna referencia inicial predeterminada al inicializar un ORB. Si el método resolve_initial_references se invoca en el ORB de cliente cuando todavía no se ha configurado ninguna referencia inicial, el método de invocación no se realiza correctamente. Esta condición es característica de los procesos de cliente puro. Para obtener una referencia inicial de NamingContext, la fábrica de contexto inicial debe invocar string_to_object mediante un URL de objeto CORBA de tipo IIOP, como por ejemplo corbaloc:iiop:myhost:2809. El URL especifica la dirección del servidor desde donde se obtiene el contexto inicial. La información del host y puerto se obtiene del URL de proveedor que se pasa al constructor InitialContext.

    [AIX][HP-UX][Linux][Solaris][Windows][z/OS]Si no se define ningún URL de proveedor, la fábrica de contexto inicial de WebSphere Application Server utiliza el URL de proveedor predeterminado de corbaloc:iiop:localhost:2809.

    [IBM i]Si no se define ningún URL de proveedor, la fábrica de contexto inicial de WebSphere Application Server utiliza el URL de proveedor predeterminado de corbaloc:iiop:nombre.su.servidor:2809.

    El método string_to_object ORB resuelve el URL y se pone en contacto con el ORB de servidor de destino para obtener la referencia inicial.

  • Obtención de referencias iniciales en los procesos del servidor

    Si el cliente JNDI se está ejecutando en un proceso de WebSphere Application Server, la fábrica de contexto inicial obtiene una referencia a la instancia de ORB de servidor si el cliente JNDI no proporciona una instancia de ORB. Normalmente, los clientes JNDI que se ejecutan en los procesos del servidor utilizan la instancia de ORB de servidor, es decir, no pasan una instancia de ORB al constructor InitialContext. El servidor de nombres que se ejecuta en el proceso del servidor establece un URL de proveedor como propiedad java.lang.System para que actúe como URL de proveedor predeterminado de todos los clientes JNDI del proceso. Este URL de proveedor predeterminado es corbaloc:rir:/NameServiceServerRoot. Este URL se resuelve en el contexto de raíz de servidor de dicho servidor. (El URL equivale a invocar resolve_initial_references en el ORB mediante una clave de NameServiceServerRoot. El servidor de nombres registra el contexto de raíz de servidor como referencia inicial mediante esa clave.)

  • Descripción del protocolo de ORB heredado

    Los releases anteriores de WebSphere Application Server Versión 5 utilizaban una implementación de ORB diferente, que utilizaba un protocolo heredado distinto del protocolo INS (Interoperable Name Service) que se utiliza actualmente. Este cambio ha afectado a la implementación de la fábrica de contexto inicial. Ciertos tipos de clientes puros pueden comportarse de un modo distinto al de releases anteriores de WebSphere Application Server al obtener contextos JNDI iniciales. Este comportamiento se describe con más detalle más adelante en esta sección.

    Las siguientes propiedades de ORB se utilizan con el protocolo de ORB heredado para la inicialización de ORB y no tienen vigencia en la actualidad:

    • com.ibm.CORBA.BootstrapHost
    • com.ibm.CORBA.BootstrapPort

    El nuevo ORB de INS es distinto en una aspecto muy importante, ya que carece de comportamiento predeterminado si no se define ninguna referencia inicial.

    [AIX][HP-UX][Linux][Solaris][Windows][z/OS]En el ORB heredado, los valores del host y puerto de rutina de carga tenían como valor predeterminado localhost y 900.

    [IBM i]En el ORB de herencia, los valores del host y puerto de rutina de carga tenían como valor predeterminado nombre.su.servidor y 900.

    Todas las referencias iniciales se obtenían desde el servidor que se estaba ejecutando en el host y puerto de rutina de carga. De este modo, si el usuario de ORB no proporcionaba un host y puerto de rutina de carga, todas las referencias iniciales se resolvían desde el servidor que se estaba ejecutando en el host local del puerto 900. El ORB de INS carece del concepto de host o puerto de rutina de carga. Todas las referencias iniciales se definen independientemente. Es decir, distintas referencias iniciales se podían resolver en servidores diferentes. Si se invoca ORB.resolve_initial_references mediante una clave de modo que el ORB no se inicialice mediante una referencia inicial que tenga dicha clave, la llamada no se realiza correctamente.

    En releases anteriores a la versión 5, la fábrica de contexto inicial invocaba resolve_initial_references en el ORB si no existía un URL de proveedor. Esta acción se realizaba satisfactoriamente si el servidor de nombres en el host y puerto de rutina de carga se estaba ejecutando. En el release actual, esto no se realizaría satisfactoriamente con el ORB de INS. De hecho, el ORB volvería al protocolo heredado durante el período de puesta en desuso, aunque la operación no se realizaría satisfactoriamente cuando se dejase de dar soporte al protocolo heredado.

    [AIX][HP-UX][Linux][Solaris][Windows][z/OS]La fábrica de contexto inicial ahora utiliza un URL de proveedor predeterminado de corbaloc:iiop:localhost:2809 e invoca string_to_object mediante el URL de proveedor.

    [IBM i]La fábrica de contexto inicial utiliza ahora un URL de proveedor predeterminado de corbaloc:iiop:nombre.su.servidor:2809, e invoca string_to_object con el URL del proveedor.

    Esta operación hace que se mantenga el comportamiento que experimentaban los clientes puros en releases anteriores cuando no establecían el URL de proveedor ni propiedades de rutina de carga de ORB. Sin embargo, esta implementación de fábrica de contexto inicial distinta modifica cómo se comportan ciertos clientes puros heredados que no especifican un URL de proveedor:

    • Los clientes que establecen las propiedades de rutina de carga de ORB enumerados anteriormente al obtener un contexto inicial.
    • Los clientes que proporcionan su propia instancia de ORB al constructor InitialContext.

    Existen dos modos de pasar por alto este cambio de comportamiento:

    • Especifique siempre un URL de proveedor de tipo IIOP. Este modo de proceder no depende de las propiedades del host y puerto de rutina de carga y se realiza correctamente cuando se deja de dar soporte a las propiedades del host y puerto de rutina de carga. Por ejemplo, puede expresar los valores de propiedades del host y puerto de rutina de carga de MiHost y 2809, como corbaloc:iiop:MiHost:2809.
    • Utilice un URL de proveedor de tipo rir:
      • Especifique corbaloc:rir:/NameServiceServerRoot si el ORB se inicializa para utilizar un servidor de la versión 5 como servidor de rutina de carga.
      • Especifique corbaname:rir:/NameService#domain/legacyRoot si el ORB se inicializa para utilizar un servidor de la versión 4.0.x como servidor de rutina de carga.
      • Especifique corbaloc:rir:/NameService si el ORB se inicializa para utilizar un servidor distinto de un servidor de la versión 5 o 4.0.x como servidor de rutina de carga.

      Los URL de este tipo equivalen a invocar resolve_initial_references en el ORB mediante la clave especificada. Si las propiedades del host y del puerto de rutina de carga se están utilizando para inicializar el ORB, este modo de proceder no funcionará cuando se deje de dar soporte a las propiedades del host y puerto de rutina de carga.

  • Orden de búsqueda del constructor InitialContext para las propiedades JNDI

    Si una aplicación ejecuta el fragmento de código que se muestra al inicio de esta sección, el servidor de rutina de carga depende del valor de la propiedad java.naming.provider.url.

    [AIX][HP-UX][Linux][Solaris][Windows][z/OS]Si no establece la propiedad (en los procesos del servidor el valor predeterminado se establece en una propiedad del sistema), se utilizan el host predeterminado de localhost y el puerto predeterminado de 2809 como la dirección del servidor desde donde se obtiene el contexto inicial.

    [IBM i]Si no establece la propiedad (en los procesos del servidor el valor predeterminado se establece en una propiedad del sistema), se utilizan el host predeterminado de nombre.su.servidor y el puerto predeterminado de 2809 como la dirección del servidor desde donde se obtiene el contexto inicial.

    La especificación JNDI describe dónde busca el constructor InitialContext los valores de la propiedad java.naming.provider.url pero, de forma resumida, la propiedad se obtiene de los siguientes lugares en el orden en el que aparecen:

    Constructor InitialContext
    Esto no se aplica al ejemplo anterior ya que este ejemplo utiliza el constructor InitalContext vacío.
    Entorno del sistema
    Puede añadir propiedades JNDI al entorno del sistema como una opción de la invocación de mandatos Java y mediante el código del programa. El método recomendado para establecer el URL de proveedor en el entorno del sistema es como una opción proporcionada para invocar mandatos Java. Establecer el URL de proveedor de este modo no es temporal, por lo tanto, obtener un contexto inicial predeterminado siempre dará el mismo resultado. Generalmente se recomienda que el código del programa no establezca la propiedad del URL de proveedor en el entorno del sistema ya que como efecto secundario esto puede afectar de forma perjudicial otros códigos, que probablemente no estén relacionados y que estén ejecutándose en otro lugar del mismo proceso.
    Archivo jndi.properties
    Es posible que haya muchos archivos jndi.properties en vigor dentro del ámbito de cargador de clases. Todos los archivos jndi.properties se utilizan para establecer las propiedades JNDI, pero el valor del URL de proveedor se determina mediante el primer archivo jndi.properties que devuelve el cargador de clases.

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_prop1
File name: rnam_example_prop1.html