Webservice JAX-WS (desarrollo y producción)

De todos es sabido la cantidad de veces que se necesita probar el código que se está desarrollando para ver si va cumpliendo nuestras espectativas o no. Normalmente uso Netbeans como IDE de desarrollo, con el que puedo efectuar estas tareas de depuración sin demasiada complicacion, pero en el caso del desarrollo de servicios web me encuentro con una restricción, no del IDE, sino del contenedor de servlets que suelo usar: Tomcat. Me gusta Tomcat porque es fácil de instalar, de configurar y es relativamente poco pesado, pero no me deja probar los servicios web conforme los voy desarrollando. Como la alternativa (implementar una aplicación cliente que consuma esos servicios) no me atrae demasiado, no me queda otra que usar GlassFish.

El problema con GlassFish es que soporta nativamente las especificaciones JRS-109, con lo que te encuentras que todo te va de maravilla mientras estas desarrollando, pero empieza a fallar estripitosamente cuando intentas pasarlo a un Tomcat en producción, y es que Tomcat NO soporta esta especificación. Esto no es un problema si tienes la precaución de modificar las propiedades de tu proyecto para que haga uso de un Tomcat en vez de Glassfish justo antes de desplegarlo. Como digo, Netbeans es un buen entorno de desarrollo y como tal te advertirá que el servidor seleccionado no soporta nativamente la citada especificación. Si le autorizas, él solo generará un archivo xml de configuración extra (sun-jaxws.xml) y creará algunas entradas servlet en el archivo de configuración web.xml. Y listo, vuelves a construir el proyecto y lo despliegas en Tomcat.

Ojo, si vuelves seleccionar Glassfish como servidor, Netbeans volverá a avisar, pero esta vez para indicarte que la configuración que acabas de añadir ya está soportada por el servidor, así que la eliminará.

Es un poco molesto andar cambiando de servidor según vayas a desarrollar o desplegar, pero al menos no hay que crear otra aplicación.

Instalar Tomcat en Linux

Instalar Tomcat en un servidor Linux es sencillo. Te vas a la página de descargas de Tomcat, eliges la versión que mejor te venga, la descargas y la descomprimes. Y ya está. Bueno te puedes crear un script de arranque y parada y colocarlo en /etc/init.d, pero en realidad no es necesario.

Simple, no? Pues no, no es tan simple. Hace tiempo que tenía pendiente la puesta en marcha de un servidor Tomcat que había instalado de la manera que acabo de indicar pero que en realidad no había llegado a probar. Esta tarde, cuando he ido a arrancar el servidor mi SO (un Debian sin escritorio) me ha sorprendido con un mensaje: Tomcat no puede iniciar porque no tiene definida la ruta a un JDK.

Lo primero que he hecho es comprobar que la variable de entorno JAVA_HOME estaba definida. Así era. Entonces, qué ha pasado? Tras un rato de busqueda he averiguado que que durante el inicio de Tomcat, éste busca en varios sitios del sistema predefinidos por alguna referencia a una ubicación válida del JDK, además de en el propio script de inicio. Así, pues, la solución es sencilla. O le dejamos que encuentra la ruta en uno de esos lugares predefidos, lo que podemos hacer creando un enlace simbólico a la ubicación del JDK…

ln -s /usr/lib/jvm/java-8-oracle /usr/lib/jvm/default-java

…o creamos la variable JAVA_HOME dentro de un archivo que el script de inicialización va a leer durante la misma y que es /etc/defaults/tomcat (si no existe, se debe crear). En él solo debemos añadir la ubicación del JDK

JAVA_HOME=/opt/java-oracle/jdk1.8.0_20