
Este fin de semana estuve “destripando” ServiceMix, específicamente la distribución 4.2.0-fuse-02-00 de Fuse. El objetivo era generar un war desplegable en Tomcat6, ya que la versión de Fuse sólo viene como aplicación standalone.
Al final fue no fue tan complicado, porque hay un ejemplo que facilita enormemente la tarea.
Al grano
Para ejecutivos de tiempo escaso, estos son los pasos a seguir.
Supuestos:
- Linux, distribución Ubuntu Karmic x86_64.
- Tomcat6 instalado vía apt (relevante, porque determina rutas, permisos y usuario tomcat6).
- estar conectado a internet (se bajarán componentes en la instalación).
Pasos:
- Baja el war karaf-smx-1.4.0-fuse-02-00.war
- Como root, crea el directorio .karaf en el home de tomcat6: mkdir /usr/share/tomcat6/.karaf
- Cambia el owner de .karaf a tomcat6: chown tomcat6:tomcat6 /usr/share/tomcat6/.karaf
- Crea un link a etc en el directorio de trabajo de tomcat: ln -sf /var/lib/tomcat6/webapps/karaf-smx/WEB-INF/karaf/etc /var/lib/tomcat6/etc
- Despliega el war: cp /path/to/karaf-smx-1.4.0-fuse-02-00.war /var/lib/tomcat6/webapps/karaf-smx.war
Ahora deberás esperar un buen rato, porque Karaf empezará a bajar e instalar los bundles de ServiceMix. Puedes ir vigilando lo que pasa en el log:
$ tail -f /var/lib/tomcat6/webapps/karaf-smx/WEB-INF/karaf/data/log/servicemix.log
Para verificar que todo está listo, abre una consola (el password es smx):
$ ssh -p 8101 -l smx localhost
Ejecuta el comando list, para ver los bundles instalados:
smx@root> list
START LEVEL 100
ID State Blueprint Spring Level Name
[ 0] [Active ] [ ] [ ] [ 0] OSGi System Bundle (3.5.1.R35x_v20090827)
[ 1] [Active ] [ ] [ ] [ 5] OPS4J Pax Url - mvn: (1.1.2)
[ 2] [Active ] [ ] [ ] [ 5] OPS4J Pax Url - wrap: (1.1.2)
...
[ 173] [Active ] [ ] [ ] [ 60] Apache ServiceMix Bundles: commons-io-1.3.2 (1.3.2.3)
[ 174] [Active ] [ ] [ ] [ 60] camel-cxf (2.2.0.fuse-02-00)
[ 175] [Active ] [ ] [ ] [ 60] camel-jms (2.2.0.fuse-02-00)
smx@root>
Cuando sean 175 debería esta todo listo para la acción
.
Read more…
Una pregunta común que hacen usuarios nuevos de Maven es cómo crear un jar ejecutable. Generalmente las soluciones propuestas van en la línea de generar un sólo jar gigante –con todas las dependencias dentro– utilizando algo como uberjar, fatjar o el descriptor jar-with-dependencies de maven-assembly-plugin. Esto, en mi opinión, es inconveniente y poco estético, por varias razones:
- El jar resultante es una sopa de artefactos, ya que se mezclan todas las dependencias directas y transitivas con la aplicación misma.
- No escala; para proyectos con muchas dependencias, el proceso de formar el “super jar” es lento, por lo que no es una opción viable para utilizar en tiempo de desarrollo (sólo al hacer un release).
- Pueden haber problemas de licencia. Algunas dependencias pueden exigir que se mantenga la integridad de los binarios que distribuyen, prohibiendo “reempaques”.
Los requerimientos que deseo satisfacer son bastante simples:
- Generar un jar con el manifiesto necesario; esto es, que indique la clase con el punto de entrada main y las dependencias.
- Poder obtener todos los jars de las dependencias, directas y transitivas, en un directorio de salida aparte (lib, por ejemplo).
- Generar un pequeño script bash, que lance el jar con el classpath configurado.
- Obtener una distribución de la aplicación, o sea, copiar todo lo anterior en un directorio del sistema (o en target).
- Debe ser rápido!, ya que será ejecutado recurrentemente, en tiempo de desarrollo.
En algún momento del pasado lejano llegué a una configuración que satisface los objetivos listados, consistente en una combinación de maven-jar-plugin, maven-dependency-plugin y maven-resources-plugin. Read more…
Para alegría de la internecz , he vuelto! (dejavú)
. Claramente no tengo alma de bloguero, es cosa de ver haber visto las espaciadas fechas entre mis post cero-aporte. No es que la pereza me consuma o que no tenga nada que decir, si no que simplemente, hace rato, “no estoy ni ahí loco”. Desde hace un par de primaveras he estado más concentrado en mis propios afanes, que se reducen a la lectura y al perfeccionamiento de mis habilidades ninja en el área del desarrollo de software (y de forma marginal, a cosas más mundanas que no vale la pena mencionar). Digamos que, con los años, el espíritu voyerista de mi adolescencia se ha ido extinguiendo, y exteriorizar mis intimidades ha perdido todo el brillo que alguna vez tuvo. De hecho, releyendo vieeeeeeeejos post no he podido dejar de sentir un poco de vergüenza con algunos. Reflexionando al respecto, no puedo concluir otra cosa que, la culpable de mi arrebato de pudor, típico de vieja polleruda, es ni más ni menos que la adultez!. Si señores, los años no pasan en vano, y aunque las series de animé sigan estando en mi lista de descargas, cosas como ahorrar para un departamento y el que tu mamá hable de nietos es sintomático de que ya ha pasado harta agua bajo el puente. Read more…
Ultimos comentarios