|
Buscador
Secciones
Otras zonas
Registro
Foros
Recomendamos
|
El siguiente ejemplo define un interface java.rmi.Remote: Hello que tiene un método, sayHello().
public interface Hello extends Remote {
public String sayHello() throws RemoteException;
}
También define una implementación para este interface, HelloImpl.
public class HelloImpl extends UnicastRemoteObject implements Hello {
public HelloImpl() throws RemoteException {
}
public String sayHello() throws RemoteException {
return ("Hello, the time is " + new java.util.Date());
}
}
Este ejemplo también crea un ejemplar de HelloImpl y lo une al directorio, asignándole el nombre "cn=RemoteHello".
// Create the remote object to be bound, and give it a name
Hello h = new HelloImpl();
// Bind the object to the directory
ctx.bind("cn=RemoteHello", h);
Después de que el objeto se haya unido al directorio, una aplicación puede buscarlo usando el siguiente código.
Hello h2 = (Hello)ctx.lookup("cn=RemoteHello");
h2.sayHello();
Para ejecutar este ejemplo, debemos hacer lo siguiente.
RemoteObj no termina, porque crea el objeto remoto HelloImpl con el que otros clientes RMI pueden contactar para usarlo. Sin embargo, este programa terminará eventualmente, cuando el objeto remoto se convierta en recolectable para la basura. Para evitar esto, debemos mantener (viva) una referencia al objeto remoto. Si hemos registrado el objeto en el registro RMI, entonces mantener una referencia no será necesario porque el registro la mantiene automáticamente. Cuando posteriormente busquemos el objeto desde el directorio, éste devolverá el objeto HelloImpl unido. El RMI descargará automáticamente las clases necesarias desde el codebase especificado en la propiedad "java.rmi.server.codebase". Puedes ir a la lección Leer Objetos desde el Directorio para ver un ejemplo.
|
|
Antes de continuar:
Este ejemplo requiere que hayamos arrancado el registro RMI en nuestra máquina. También necesitamos rmiregistry.jar, como se explicó en la introducción de esta lección. |
El siguiente ejemplo usa la mismas clases Hello y HelloImpl del ejemplo anterior. Crea una Reference que contiene una URL RMI ("rmi://mymachine/hello") y la une al directorio.
String rmiurl = "rmi://mymachine/hello";
// Create the reference containing the (future) location of the object
Reference ref = new Reference("Hello", new StringRefAddr("URL", rmiurl));
// Bind the object to the directory
ctx.bind("cn=RefHello", ref);
Luego crea un ejemplar de HelloImpl y lo une al registro RMI local usando la misma URL RMI ("rmi://mymachine/hello").
// Create the remote object to be bound Hello h = new HelloImpl(); // Bind the object to the RMI registry ctx.rebind(rmiurl, h);
Después de que el objeto se haya unido en el directorio y en el registro RMI, una aplicación puede buscar el objeto usando el siguiente código.
Hello h2 = (Hello)ctx.lookup("cn=RefHello");
System.out.println(h2.sayHello());
En efecto, este método tiene más de un nivel de indirección que los que ofrecían los ejemplos anteriores. La información almacenada en el directorio (la Reference) es realmente un puntero a información almacenada en otro servicio de nombres (el registro RMI), que a su vez, contiene la referencia al objeto java.rmi.Remote.
Para ejecutar este ejemplo, debemos hacer lo siguiente.
# javac RemoteRef.java
# java -Djava.rmi.server.codebase=http://web1/example/classes/ RemoteRef
RemoteRef no termina, porque crea el objeto remoto HelloImpl con el que pueden contactar otros clientes RMI.
Cuando posteriormente busquemos este objeto en el directorio, éste devolverá el objeto remoto HelloImpl unido. El RMI descargará automáticamente los ficheros class necesarios desde el codebase especificado en la propiedad "java.rmi.server.codebase". Puedes ir a la lección Leer Objetos desde el Directorio para ver un ejemplo.
Unir un Objeto Remoto que usa IIOP
|
Antes de Continuar:
Este ejemplo requiere que tengamos ldapbp.jar, como se explicó en la introducción a esta lección. Si no estamos usando el Java 2 SDK, v1.3, también necesitamos instalar el RMI-IIOP Standard Extension. Si no estamos usando el Java 2 SDK, v1.2 o una versión superior, también necesitamos instalar Java IDL, una versión que viene con RMI-IIOP Standard Extension. |
El procedimiento de unir un objeto java.rmi.Remote que usa IIOP o JRMP es identico en lo que a JNDI concierne. Desde la perspectiva del usuario/aplicación, sólo se diferencian en cómo se genera el esqueleto (stub) para el objeto java.rmi.Remote. La búsqueda del objeto presenta una diferencia mayor: cuando el objeto es buscado desde el directorio (o algún otro servicio de nombres) el resultado debe apuntarse usando javax.rmi.PortableRemoteObject.narrow() en lugar de usar el operador de forzado de tipo de Java.
El siguiente ejemplo usa el interface Hello del ejemplo JRMP. Define una implementación de este interface, RiHelloImpl, que es análoga a HelloImpl, excepto que desciende de javax.rmi.PortableRemoteObject en lugar de java.rmi.server.UnicastRemoteObject.
public class RiHelloImpl extends PortableRemoteObject implements Hello {
public RiHelloImpl() throws RemoteException {
}
public String sayHello() throws RemoteException {
String date = new String((new java.util.Date()).toString());
return ("RMI/IIOP hello | " + date);
}
}
El ejemplo crea un ejemplar de RiHelloImpl y lo une al directorio, asignándole el nombre "cn=RmiiiopHello".
// Create the remote object to be bound, and give it a name
Hello h = new RiHelloImpl();
// Bind the object to the directory
ctx.bind("cn=RmiiiopHello", h);
Después de que el objeto se haya unido al directorio, una aplicación puede buscarlo usando el siguiente código.
// Look up the object
org.omg.CORBA.Object cobj = (org.omg.CORBA.Object)ctx.lookup("cn=RmiiiopHello");
// Narrow the object to the desired type
Hello robj = (Hello)PortableRemoteObject.narrow(cobj, Hello.class);
// Invoke the method
System.out.println(robj.sayHello());
Para ejecutar este ejemplo, debemos hacer lo siguiente.
# javac Hello.java RiHelloImpl RmiiiopObj.java
# rmic -iiop RiHelloImpl
# java -Djava.rmi.server.codebase=http://web1/example/classes/ RmiiiopObj
RmiiiopObj no termina, porque crea el objeto remoto RiHelloImpl con el que otros clientes RMI pueden contactar y utilizar.
Cuando posteriormente buscamos este objeto desde el directorio, éste devolverá el objeto remoto RiHelloImpl unido. El RMI descargará automáticamente los ficheros class necesarios desde el codebase especificado en la propiedad "java.rmi.server.codebase".
Puedes ir a la lección Leer Objetos desde el Directorio para ver un ejemplo.
| Leer comentarios (19) | |
| Escribir comentario | |
| Puntuación: |
|
| Votar | |
| Recomendar este tutorial | |
| Estadísticas |
Copyright © 1999-2007
Programación en castellano.
Todos los derechos reservados.
Formulario de Contacto -
Datos legales -
Publicidad
Hospedaje web y servidores dedicados linux por Ferca Network
red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados