13.1.09

Iniciar/Detener/Reiniciar una aplicación web en Glassfish remotamente mediante JMX

Saludos y buen dia...


EL titulo creo que es mas que sugerente sino deja que te lo cuente :P


Resulta que glassfish como sabras es un "servidor de aplicaciones" y puedes tener varias de estas alojadas sobre un mismo dominio (no el DNS). Pero hay monentos en que estas en el periodo de desarrollo y tienes un servidor centralizado donde cada programador despliega alli su proyecto o aplicacion web, hasta aqui no hay nada que contar.... pero resulta que tu aplicacion por x motivo puede fallar, ya sea porque te dio un error desastroso la persistencia o cualquier otro y para dejarla disponible necesitaras reiniciar el glassfish para las pruebas que vayas haciendo ya que no es un error o actualizacion que necesites reinstalarla o desplegarla nuevamente simplemente necesitas reiniciarla, normalmente con un simple reinicio del glassfish se solucionaria el problema pero al ser un servidor centralizado de desarrollo es realmente molesto y hasta cansino el tener que avisar a cada uno de los programadores que vas a reinciar su entorno de pruebas solo para resolver un problema tuyo con las conocidas molestias que esto puede causar, vamos que uno que lleva un rato probando la migracion de datos y venga uno y le diga "eh que reinicio la cosa esta y lo que estes haciendo pues....." y todo el trabajo hecho a la mier.... solo porque hace falta que se reinicie el glassfish para poder dejar funcionando otra aplicacion en el servidor.......... y no solo en estos casos de desarrollo sino tambien en casos en que las aplicaciones esten en produccion y haya que reiniciar una de ellas para que sea aplicable un cambio de configuracion X.


Creo que han pillado la idea, asi que sin rodeos empecemos nuevamente :P :D


Este tema surge debido a que tendremos varios proyectos desplegados sobre el mismo servidor de aplicaciones y hay momentos en que es necesario reiniciar el proyecto que tengamos para que se apliquen los cambios en la configuracion u otros, si tuvieramos solo una aplicacion en el servidor no habria problemas pero cuando hay varias que esten en produccion el detener todo el servidor solo para actualizar una, penalizaria la disponibilidad de las otras aplicaciones lo cual segun que proyectos no sera nada aconsejable por la necesidad que tendran de estar siempre disponibles por eso el encontrar  una solucion de como reiniciar una aplicacion sin necesidad entonces de reiniciar las otras que no lo necesiten era necesario.



La via mas rapida encontrada fue utilizar el servicio JMX(Java Management Extensions) que se inicia con el glassfish y usando JConsole conectarnos remotamente para asi poder realizar la operacion necesaria.
El JConsole normalmente viene con el java
Los pasos para reiniciar una aplicacion web desplegada en glassfish serian:
  • Abrimos el JConsole y nos saldra una ventana para realizar una coneccion. Seleccionamos "Remote Process" y alli utilizamos la siguiente url de conexion:
service:jmx:rmi:///jndi/rmi://HOSTNAME:PORT/jmxrmi
donde HOSTNAME sera el nombre el servidor o el ip del mismo y PORT , sera el utilzado por el servicio jmx, normalmente el 8686
  • Una vez conectados vamos a la pestaña MBeans(Appserver Management Extensions)
  • En el arbol que sale buscamos amx/WebModule/null/server/
  • Estando alli escogemos la applicacion web que queremos reiniciar teniendo en cuenta el siguiente formato para el nombre
    //server/NOMBREDEAPLICACIONWEB
  • Expandemos las opciones para esta aplicacion web seleccionada y vamos a Operations y las expandimos, podremos ver entonces dos opciones , la lista expandida de las operaciones o en la parte derecha salen un poco mas visual, vamos de solo "click y ya esta"
Con las que vamos a jugar son con Stop() , Start() y Reload(). Estas son las que detienen la aplicacion web y la inician.
Cuando ejecutemos el metodo Stop() en el servidor glassfish deberiamos ver un mensaje como el siguiente : PWC1240: No se ha iniciado el contenedorWebModule? [/SercotelConectorNfactorial]
y cuando ejecutemos el metodo Start() deberiamos ver el siguiente mensaje : :S No me salio ningun mensaje del tipo "se ha iniciado" debo indagar un poco mas :P , si le vuelvo a decir Start() me sale un mensaje del tipo : PWC1238: Ya se ha iniciado el contenedor WebModule? [/SercotelConectorNfactorial]
y si le damos el Reload() sale un mensaje parecido a este: PWC1294: Se ha iniciado la recarga de este contexto

Y pues esto es lo que necesitariamos para poder reiniciar solo una aplicacion web desplegada en glassfish sin que afecte a las demas.

Sin mas....
Me despido deseandoles buena suerte a todos

Creative Commons License This page is powered by Blogger. Isn't yours?