Sistema de Nombrado en Java (JNDI) [Parte I]

El ejemplo serializaci�n mostraba que un objeto almacenado (serializado) en un directorio puede leerse usando Context.lookup().�

// Check that the object is bound
Button b2 = (Button)ctx.lookup("cn=Button");
System.out.println(b2);

De forma similar, en los ejemplos referencia, atributos, Objeto remoto, objeto CORBA, y Objeto personalizado, podr�amos simplemente usar lookup() para recuperar el objeto almacenado.

.�Factor�as de Objetos

En el ejemplo de atributos, el entorno usado para crear el contexto inicial ten�a una propiedad adicional, Context.OBJECT_FACTORIES.

Est� propiedad especifica los nombres de clase de una o m�s factorias de objetos a usar cuando afinemos la informaci�n almacenada en el directorio dentro de objetos Java esperados por la aplicaci�n.

Cuando un objeto se representa como una referencia en el directorio, la referencia contiene el nombre de la clase y, opcionalmente, la localizaci�n de la factor�a de objetos, Consecuentemente, el ejemplo referencia no necesitaba seleccionar la propiedad Context.OBJECT_FACTORIES. De forma similar, cuando se serializa un objeto, normalmente s�lo necesita ser des-serializado y no ser transformado posteriormente. Este era el caso del ejemplo anterior java.awt.Button, por eso de nuevo, tampoco se especific� una factor�a de objetos.

En el ejemplo atributos, lo que se almacena para representar el objeto Drink es simplemente una colecci�n de atributos, por eso necesitamos especificar una factor�a de objetos, DrinkFactory, a utilizar para convertir aquellos atributos de un objeto Drink.

Aunque no se especificaron factor�as en los ejempos de objetos remotos y CORBA, �stas se pre-configuraron dentro del proveedor de servicios LDAP que se utiliz�. El ejemplo del objeto personalizado tambi�n usaba una factor�a de objetos. Aqu�, la factor�a se especificaba usando un fichero de recursos de aplicaci�n.

Las factor�as de objetos se describen en m�s detalle en la lecci�n Factorias de Objetos.

.�Tipo de Objeto

El tipo de objeto devuelto por lookup() est� determinado por la factor�a de objetos y/o el proveedor de servicios. En el ejemplo de objeto remoto, el objeto buscado es un objeto java.rmi.Remote. En los ejemplos de objetos RMI/IIOP y CORBA, el objeto buscado es un objeto CORBA.

Abajo tenemos algunos ejemplos de c�mo se usa un objeto despu�s de haberlo buscado desde el directorio.

El siguiente c�dido busca un objeto remoto unido usando los ejemplos uni�n directa� y referencia.

// Read from the directory 
Hello h = (Hello)ctx.lookup(name);

// Execute the remote method
System.out.println(h.sayHello());

Para ejecutar este ejemplo con �xito, el RMI requiere que especifiquemos un controlador de seguridad y una pol�tica de seguridad.

# java -Djava.security.manager -Djava.security.policy=.policy \
    LookupRemote cn=RemoteHello

Despu�s de realizar la lookup(), podemos forzar el resultado a una clase Hello y llamar a un m�todo sobre ella.

Nota:

Los ficheros stub y server deben haberse situado en la localizaciones especificadas por el programa servidor (es decir, el especificado por la propiedad "java.rmi.server.codebase"), o directamente por el ejemplo uniones.

El siguiente c�digo busca un objeto CORBA unido usando el ejemplo de Objeto CORBA.

// Look up the object
org.omg.CORBA.Object cobj = (org.omg.CORBA.Object)ctx.lookup("cn=CorbaHello");

// Narrow the object to the right type
HelloApp.hello h2 = HelloApp.helloHelper.narrow(cobj);

// Invoke the method on the object
System.out.println(h2.sayHello());

Despu�s de realizar la lookup(), debemos usar el m�todo narrow() apropiado para apuntar al objeto del tipo correcto y luego invocar al m�todo apropiado sobre el objeto.

Nota:

Debemos copiar al classpath, o de otro modo hacerlos disponibles en el classpath, los ficheros class generados por idltojava (es decir, el directoro HelloApp y sus contenidos) en el ejemplo uniones.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO