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
https://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»