Como crear y destruir programáticamente un RMI Registry

0
15645

Creación: 05-02-2008

Índice de contenidos

1.Introducción
2.Entorno
3.Arrancando el Registry
4.Parando el Registry
5.Conclusiones
6.Sobre el autor

1. Introducción

En el tutorial
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=rmiRemoteRegistry
ya hemos visto (lo veíamos en el punto 5.1) como podemos levantar un Registry desde línea de comandos con:

$ rmiregistry &

Esto levantará un nuevo proceso en el sistema. En Linux podríamos pararlo haciendo un kill de este proceso.

En este sencillo tutorial vamos a ver como podemos arrancar o parar el Registry programáticamente, es decir lo arrancaremos y pararemos desde el propio programa Java.


2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil Asus G1 (Core 2 Duo a 2.1 GHz, 2048 MB RAM, 120 GB HD).
  • Sistema Operativo: GNU / Linux, Debian (unstable), Kernel 2.6.23, KDE 3.5
  • JDK 1.5.0_13 (instalada con el paquete sun-java5-jdk de Debian)
  • Eclipse Europa 3.3, con soporte para desarrollo JEE (WTP 2.0)


3. Arrancando el Registry

Arrancar un Registry programáticamente es muy sencillo. Basta con usar la clase LocateRegistry, la misma clase que veíamos en el otro tutorial para localizar el Registry, pero esta vez usaremos el método createRegistry(int port).

Por ejemplo:

final Registry registry = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);

Donde Registry.REGISTRY_PORT es el puerto por defecto donde se suele levantar el Registry (1099).

Con este método obtendremos una excepción si, por ejemplo, el puerto ya está siendo usado.

4. Parando el Registry

Pararlo no es tan fácil como arrancarlo, y tiene un poco de truco. De hecho si buscáis en la documentación o por Internet, cuesta un poco encontrarlo (o por lo menos, en su día, a mi me costo 😉

UnicastRemoteObject.unexportObject(registry, true);

Y diréis ¿donde está el truco? ¿cual es la complicación? Bien, complicación ninguna, y el truco está en que «registry» tiene que ser exactamente la misma instancia que nos había devuelto el método createRegistry.

Es decir, no vale con localizar el Registry mediente LocateRegistry.getRegistry(), es necesario pasarle al UnicastRemoteObject.unexportObject() exactamente la misma instancia (la misma referencia) que nos había devuelto LocateRegistry.createRegistry().

5. Conclusiones

Muchas veces las cosas son más sencillas de lo que parecen, sólo hay que saber el «truco». Desde Autentia (http://www.autentia.com), a través de estos tutoriales, intentamos que estos «trucos» estén al alcance de todos y dejen de ser «trucos» para convertirse en conocimiento general.

6. Sobre el autor

Alejandro Pérez García, Ingeniero en Informática (especialidad de Ingeniería del Software)

Socio fundador de Autentia (Formación, Consultoría, Desarrollo de sistemas transaccionales)

mailto:alejandropg@autentia.com

Autentia Real Business Solutions S.L. – «Soporte a Desarrollo»

http://www.autentia.com

 

Alejandro es socio fundador de Autentia y nuestro experto en Java EE, Linux y optimización de aplicaciones empresariales. Ingeniero en Informática y Certified ScrumMaster. Seguir @alejandropgarci Si te gusta lo que ves, puedes contratarle para darte ayuda con soporte experto, impartir cursos presenciales en tu empresa o para que realicemos tus proyectos como factoría (Madrid). Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad