Web Analytics

A Cup of My Famous Java


Por si no lo sabes, querido lector, eso lo digo por esto.

Por lo demás, quería hacer que una aplicación web no necesitase servidor... Bueno... Eso no se puede... Lo que quería decir es que una aplicación web no necesite un servicio de hospedaje. La cuestión es ahorrar. La aplicación, tal como está, es medio funcional y no tiene servicios que podamos llamar de comunidad como compartición de feeds, noticias ni nada por el estilo. Sí que se pueden ahorrar recursos si la gente da de alta la misma web como entrada de datos ya que sólo se descargará una copia.

La idea final es poner en explotación la aplicación en un servidor permanente por aquello de que se puedan automatizar publicaciones a cualquier hora, pero para pruebas es una tontería. La cuestión ahora es que pruebe más gente y tengo la constumbre de apagar el ordenador para dormir y cuando no estoy en casa, osea que no me vale tenerlo allí.

Una aplicación Struts2 es imposible de desplegar en ningún servidor gratuito y creo que ya se por qué es: Al desplegar da un error muy poco descriptivo como IOException que puede ocurrir por cualquier cosa, pero después, en la pila aparece algo sobre NoClassDefFound y es que, cada uno, tiene su ClassLoader para hacer sus chamullos y no dejarnos cargar la aplicación que nos de la gana a los usuarios, así que Spring o Struts2 se me chiflan. Probablemente sea Struts2 que tiene cienes de plugins desperdigados en jars por ahí a los que no va a tener acceso y de los que no va a poder cargar sus clases. Spring tampoco podrá cargar sus ficheros de configuración.

Asístamos. Y para dejar copias a la gente y que no se me chiflen arrancando servidores, bases de datos, configurando puertos y servicios afronto el problema como mejor puedo y sin salirme de java ni tirarme de los pelos he solucionado los tres problemas principales. Es fácil, cómodo y hasta divertido. Los tres fundamentos son HSQLDB, JSmooth y Tomcat.

La pega más grande es que los paquetes de distribución crecen bastante ya que hay que empaquetar también un runtime para garantizar que el cliente tenga instalado el que se debe tener. Vamos por partes.

HSQLDB es un sistema gestor de bases de datos 100% java que soporta guardado en ficheros de texto SQL y en memoria RAM. Con eso, podría arrancar desde mi aplicación el servidor de BDD y seguir adelante. Además no hace falta ni arrancarlo, sólo con incluir el JAR ya tenemos base de datos... El problema de esto es que es intrusivo con la implementación... Aquí viene la parte de Tomcat.

Catalina es contenedor de servlets gratuito por excelencia, con decir que la mierda que usamos en el trabajo lo lleva dentro, lo digo todo. Digo Catalina porque es el contenedor de servlets. Coyote es el servidor HTTP, Jasper es el compilador de JSPs y todo esto y mucho más es Jakarta Tomcat... Bueno... Pues uno puede coger los JAR de Tomcat y hacerse el suyo propio. También coincide que la clase donde reside la función main de Tomcat es Catalina.java, el código es muy sencillo y se puede lanzar fácilmente una copia de Tomcat desde cualquier aplicación Java.

Como decía antes esto viene que ni pintado porque para no inmiscuir este problema con a implementación de la aplicación, puedo crear una clase que lance HSQLDB, lance Tomcat, despliegue la aplicación y, al finalizar, vuelque el contenido de HSQLDB para próximas sesiones.

¡Otro caso resuelto! ^^

Peeero...

JSmooth, sí, ocurre también que a la gente... Bueno... A la gente de bien, que también hay a quien le ponen los pingüinos... No critico a nadie... Pues que a la gente no le mola naaaada esto de java -jar... Osea... escribir... Además, las cosas quedan mucho más chulas con un iconito y con un ejecutable que aparezca en el explorador de archivos vistoso, reluciente, digno y de ganas de hacerle doble click, manque sea para ver qué pasa.

JSmooth te crea un ejecutable al que le puedes decir qué classpath usar, qué máquina virtual y, si se da el caso, se descargaría una de no tenerla el cliente. Todo es configurable y al ejecutarse la aplicación aparecerán diálogos de instalación para solucionar todos los problemas que falten.

Así que al final tengo:
  • /FeedStrainer


    • FeedStrainer.exe

    • FeedStrainer.ico

    • /jre_1.6xx

    • /tomcat6xx

    • /data

    • /lib


      • FeedStrainer.war

      • hsqldbxxx.jar





Y la aplicación parece de escritorio. Además, la última linea del primer bloque de main lanza la primera página en el navegador... Quizá meta el Firefox portable y así propago la palabra...