Objetos remotos - RMI - EJB
Objetivos
-
Introducir la noción de objeto remoto.
-
Crear y utilizar objetos remotos en Java (RMI).
-
Presentar los objetos remotos en JEE: los EJB.
Principio de los objetos remotos
Un objeto remoto se instancia en una aplicación y se utiliza en otra.
La aplicación que instancia el objeto se llama servidor de objetos remotos.
La aplicación que utiliza el objeto es una aplicación cliente. Las dos aplicaciones se pueden ejecutar en dos máquinas diferentes.
1. Esquema
El siguiente esquema muestra el principio de comunicación entre el cliente y el servidor. Las clases Stub y Skeleton permiten la comunicación entre ambos.
2. Funcionamiento general
a. Stub
Cuando el código de un cliente quiere invocar un método remoto, llama a un método ordinario encapsulado en un objeto de sustitución llamado Stub. El Stub es una representación local del objeto remoto.
El Stub está en la máquina cliente.
-
El método del Stub en el cliente construye un bloque de datos compuesto por:
-
Un identificador del objeto remoto que se va a utilizar.
-
Una descripción del método que se va a llamar.
-
Los argumentos codificados.
-
El Stub envía esta información al servidor.
Del lado del servidor, un objeto de recepción (Skeleton) realiza las siguientes acciones para cada llamada de método remoto:
-
Decodifica los argumentos codificados.
-
Sitúa el objeto que se va a llamar.
-
Llama el método especificado.
-
Captura y codifica el valor de retorno o la excepción devuelta por la llamada.
-
Envía un bloque...
Creación y utilización de objetos remotos en Java (RMI)
1. RMI
RMI (Remote Method Invocation) es una interfaz de programación (API) de Java que permite llamar a métodos de objetos remotos.
RMI se utiliza en una arquitectura Cliente/Servidor. Su uso hace necesaria la realización de las siguientes tareas:
Del lado servidor
-
Escribir un programa servidor que:
-
Instancie el objeto remoto.
-
Lo inscriba en el servidor de direccionamiento.
-
Espere las consultas de los clientes.
-
Definir una interfaz que contenga los métodos del objeto remoto.
-
Esta interfaz da a los clientes la lista de los métodos utilizables. Se dice que la interfaz expone los métodos del objeto remoto.
-
Escribir la clase del objeto remoto, que implementa la interfaz anterior.
En las últimas versiones del JDK, ya no es necesario generar explícitamente la clase Stub y la clase Skeleton. Esto se hacía antes con la herramienta rmic del JDK.
Del lado cliente
-
Obtención de una referencia sobre el objeto remoto a partir de su nombre, gracias al servidor de direccionamiento.
-
Llamar al método a partir de esta referencia.
2. Ejemplo: un objeto remoto de ordenación
El objeto remoto desarrollado en el ejemplo sirve para ordenar una tabla de objetos que implementan la interfaz Comparable. Su interfaz, llamada Clasificador, expone el método ordenar(). La clase ClasificadorImpl implementa la interfaz Clasificador.
a. Programación del servidor
Crear la Interfaz Clasificador.java: métodos expuestos por el objeto remoto
La interfaz de un objeto remoto RMI debe heredar de la interfaz Remote.
Los métodos deben lanzar una RemoteException.
package objetoRemoto;
import java.rmi.*;
public interfaz Clasificador extends Remote
{
public Comparable[] ordenar(Comparable tabla[]) throws RemoteException;
}
Crear la clase ClasificadorImpl.java: implementación del objeto remoto
La clase del objeto remoto debe heredar de la clase UniqueRemoteObject. La instanciación de este objeto lanza un thread de escucha de las consultas de los clientes.
package objetoRemoto;
import java.rmi.*; ...
Objetos remotos y JEE: Enterprise Java Beans (EJB 3)
Los EJB que se presentan en el libro se corresponden con los EJB 3 (Versión 3).
Un servidor JEE contiene un contenedor de EJB:
Este contenedor es un servidor de objetos remotos.
Los objetos remotos se designan con el nombre de EJB Session.
Para crearlo y usarlo, hay que seguir las mismas etapas que para los objetos RMI, excepto la escritura del programa servidor, porque se trata del contenedor de EJB del servidor JEE.
¿Qué es un EJB?
Un EJB es un objeto que se ejecuta en el contenedor de EJB de un servidor JEE. Hay diferentes tipos.
1. Los diferentes tipos de EJB
-
Los EJB Session con o sin estado (Stateless o Stateful): son objetos remotos.
-
Los EJB Entity realizan el mapping Objeto/Relacional.
-
Los EJB Message permiten operaciones asíncronas.
Los EJB Session son objetos remotos. Son los únicos accesibles por un cliente.
Para utilizar los EJB Entity y los EJB Message, el cliente se debe dirigir a un EJB Session.
2. El directorio para los EJB Session
En el caso de los EJB Session, el directorio (servidor de direccionamiento) se conoce con el nombre de servidor JNDI (Java Naming and Directory Interface). Durante la creación del EJB Session, hay que asignarle un nombre (JNDI name) e inscribirlo en el directorio. Este es el nombre que el cliente utiliza para acceder a la EJB Session.
3. Contenedor EJB - contenedor web
Hay analogías entre el funcionamiento del contenedor de EJB y el del contenedor web. De esta manera, es el contenedor de EJB el que se encarga de la instanciación y de la destrucción de los EJB, mientras que el contenedor web se encarga de la instanciación y destrucción de los Servlets.
4. Diferencia JavaBeans/EJB
Un JavaBean es una clase Serializable, que tiene un constructor por defecto (sin argumento) y todas las propiedades tienen un método set() y otro get(). Los JavaBeans se pueden utilizar...