Hace unos días me pasó que para resetear unas cachés de un servicio, tenía que reiniciar el web server Jetty de AEM. Normalmente en circunstancias como esta, hubiese sido mejor reiniciar el servidor y déjarse de rollos, pero no tenía acceso ssh por consola a la máquina remota y era la única forma. En cualquier caso, e independientemente de como hayas llegado a esta situación, este post te ayudará a salir del apuro si el AEM web server no arranca.

¿Qué ocurre si paras el bundle de Jetty?

Resulta que vas a la vista de bundles de la web console Apache Felix OSGi y paras el bundle de Jetty. Pues bien, que sepas que sin web server:

  1. ¡No hay web admin console! Suena obvio, pero si el web server está apagado no hay nadie que se encargue de servirte la consola de administración web ni ninguna interfaz web.
  2. Aquí ya da igual que reinicies o no, ahórrate el tiempo porque si decides parar un bundle, cuando reinicies seguirá parado. Esto con el resto de bundles no es un problema, pero con el web server podrás pensar… ¿Y ahora cómo arreglo esto?

Apache Felix + Gogo al rescate

OK, no tenemos acceso a la consola de administración web, pero la plataforma OSGi Apache Felix sigue funcionando, lo único que ocurre, es que el bundle de Jetty no arranca. Aquí es cuando recordé, que un día trasteando con la documentación de Apache Felix, me encontré con Apache Gogo.

Apache Gogo es una shell para entornos basados en OSGi, que nos permitirá acceder y controlar Apache Felix por línea de comandos.

Estrategia

Nuestra estrategia consistirá en instalar Apache Gogo, acceder a OSGi por línea de comandos y reiniciar el bundle del servicio HTTP parado.

Instalación de Apache Gogo

Para instalar Apache Gogo haremos lo siguiente:

  1. Descarga los siguientes módulos de Gogo:
    1. Command: implementa un conjunto de comandos.
    2. Runtime: implementa el entorno de proceso de comandos.
    3. Shell: proporciona la interfaz para interactuar por línea de comandos.
  2. Copia estos bundles en la carpeta crx-quickstart/install para que sean instalados automáticamente.
  3. Descarga el bundle Remote Shell de Apache Felix y cópialo en la carpeta crx-quickstart/install.

 

Apache Gogo – OSGi en el shell

Una vez que ya tenemos instalado Gogo vamos a reiniciar el bundle de Jetty por línea de comandos.

  1. Abre un shell o terminal e introduce telnet localhost 6666. Por defecto Gogo estará escuchando en el puerto 6666. El resultado será algo similar a lo que puedes ver a continuación. Lo importante es que el símbolo del Shell de Gogo g! nos aparezca para poder introducir comandos.
  2. Introduce el comando lb http o lb jetty para que liste los bundles relacionados con http
  3. Aquí podemos ver que el bundle de Apache Felix Http Jetty está parado (resolved), también vemos que su número de bundle es el 28, por lo cual ejecutaremos el siguiente comando para arrancarlo:
  4. Para comprobar si Jetty ha vuelto a la vida ejecutaremos de nuevo lb http.

    ¡Perfecto! Vuelve a estar activo, intenta entrar en la interfaz web para comprobar que todo vuelve a funcionar.
  5. Pulsa Ctrl + D para salir de telnet y Gogo.
  6. Desinstala el último bundle que instalamos, Apache Felix Remote Shell (org.apache.felix.shell.remote). Esto es importante para evitar posibles ataques por este puerto en el futuro.

Espero que te haya sido útil e interesante el post de esta semana. Te invito a compartirlo con tus amigos y a suscribirte a mi newsletter para estar al tanto de las últimas novedades.