Reunión de Junio del ZaragozaJUG

El pasado mes de Marzo organizamos ZaragozaJUG, algo parecido a un Java User Group. Digo parecido porque no se habla exclusivamente de Java, lo que ayuda a enriquecer el grupo, pero todos trabajamos/hemos trabajado/tenemos interés en la plataforma Java.

Desde entonces, empezamos a organizar reuniones mensuales(para quien lo conozca, tipo cócktail cadius), aunque al ser todavía poquita gente no tenemos impuesto un día concreto al mes y tratamos que le vaya bien a la mayoría. Simplemente nos juntamos unos cuantos alrededor de unas cañas y charlamos sobre lo que surja, o sobre intereses e inquietudes de alguno de los asistentes, además de ser una buena forma de conocer gente interesante.

La reunión será el lunes 16 a partir de las 20:00, en principio en el Universal en Fernando el Católico, al lado de la plaza San Francisco.

Grails Morph Plugin

Ayer hablaba de los pasos para desarrollar una micro-aplicación con Grails y cómo desplegarla en Morph, había un paso molesto teniendo que generar y modificar el web.xml para añadir un recurso, que había que quitar para ejecutar la aplicación en entornos diferentes al de producción en Morph.

Ya pensaba en un plugin para esto mientras escribía el post anterior, pero por el comentario de dahernan me lancé a crearlo, lo que sólo me llevó unos minutos. Es un pequeño plugin que modifica el web.xml dinámicamente, o mejor dicho, que participa en su generación.

El plugin se llama Morph Plugin, está disponible el para descargarlo y en el SVN está disponible el código. Aunque se vean muchos archivos, la chicha está en MorphGrailsPlugin.groovy:


def doWithWebDescriptor = { xml ->
def env = System.getProperty("grails.env")
if(env=="production"){
def resourceRef = xml.'resource-ref'
resourceRef+{
'description'("Morphlabs Datasource")
'res-ref-name'("jdbc/morph-ds")
'res-type'("javax.sql.DataSource")
'res-auth'("Container")
}
}
}

Para instalarlo sólo hay que descargarlo y ejecutar dentro del directorio de la aplicación este comando:
grails install-plugin elpathquesea/grails-morph-0.1.zip

El ejemplo de la TODO list ya está desplegado de esta manera, y ya no es necesario ejecutar el comando grails install-templates para modifcar el web.xml ni tenemos ningún problema para seguir trabajando en local.

Si alguien está interesado en la creación de plugins para Grails, existe una guía para desarrolladores.

Desplegando una aplicación Grails en Morph

Morph es un servicio de hosting, que utiliza por detrás los servicios de Amazon, hasta no hace mucho sólo tenía soporte para Rails pero han añadido soporte a Java (vía Jetty), que todavía está en beta.

Morph tiene un plan gratuito para desarrolladores, y he probado a subir una micro-aplicación desarrollada con Grails. Como lo interesante es ver lo sencillo que es desplegar una aplicación, he creado una TODO list muy básica, sin gestión de usuarios y utilizando el scaffolding dinámico, que también podría servir para iniciarse en éste framework.

Primero deberemos registrarnos, y tras esto descargar el morph_deploy.jar y el morph_deploy.properties que usaremos para desplegar nuestra aplicación cuando la tengamos terminada.

Creamos la aplicación y, dentro del directorio de la aplicación que se ha creado, una clase del dominio:

grails create-app todo
grails create-domain-class task

En la clase Task.groovy le añadimos algún atributo:

class Task {
String task
}

Creamos un controller vacío:

grails create-controller task

Y para el andamiaje, añadimos al controller:

def scaffold = true

Para verlo en local (http://localhost:8080/todo/):

grails run-app

Podríamos dejar la configuración a la base de datos con hsqldb y no tener que hacer ninguna modificación al estar embebida, pero para usar PostgreSQL, deberemos descargarnos el driver, añadirlo al directorio /lib de nuestra aplicación y hacer las siguientes modificaciones en el DataSource.groovy, en el entorno de producción:

driverClassName = "org.postgresql.Driver"
url = "jdbc:postgresql://XXX.XXX.XXX.XXX/db_XXX"
username = "XXX"
password = "XXX"

Inicio Actualización 09/06/2008: Utilizando el plugin para Morph, ya no es necesario este paso.

Debemos añadir el recurso del DataSource en el web.xml, que se genera con grails install-templates:

<resource-ref>
<description>Morphlabs Datasource</description>
<res-ref-name>jdbc/morph-ds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

Este recurso, lo tendremos que comentar para probarlo en local, ya que nos dará errores al ejecutar la aplicación.

Fin Actualización

Ya sólo nos quedaría empaquetarlo en un .war:
grails war
Y desplegarlo:
java -jar morph_deploy.jar --config morph_deploy.properties pathdelwar/todo-0.1.war
Que posteriormente, pedirá nuestro usuario/password con los que nos hemos dado de alta en morph y nos desplegará la aplicación.

Tras esto, sólo nos queda esperar unos minutos a que haga se efectúe el despliegue, y ya tenemos la aplicación corriendo. El ejemplo está disponible en http://danilat.morphexchange.com/, como se puede ver, me ha costado más escribir el post que la aplicación+despliegue :P.

Los despliegues se pueden hacer también con Ant y Maven, esto y alguna cosita más se puede encontrar en el Java Cookbook de Morph.

Lo que no tengo demasiado claro son las limitaciones que tendrá el servicio, a parte de poder usar sólo PostgreSQL, estando todavía en beta y si habrá muchas diferencias de los planes de pago con el plan gratuito.

Trabajando con Linking Paths

Cuando hablé de mi independencia, ya comenté que había algo más pero que otros tenían que ser quienes lo anunciaran y ya lo hizo Aitor, estuve unos días en Madrid para acelerar mi puesta a punto y empezar a trabajar con Linking Paths durante unos meses, en lo que han bautizado como Linking Internship 2008.

linking paths

En estos días con Alberto, he empezado a aprender Ruby on Rails(tarde o temprano seguro que habrá una comparativa cara a cara con Grails :P) y a ver Tog.

Pero sobre todo he comprobado lo que sospechaba, que es una empresa que se sale de lo habitual, con una especie de caos controlado, con personas muy interesantes e ideas muy interesantes.

Desarrollador Independiente

Es lo que soy a partir de hoy, tras un último día de trabajo un poco raro he dejado ya Net2u y aprovecho esta semana para cerrar algún tema pendiente, para empezar la semana que viene completamente centrado.

Es algo que desde que empecé a estudiar esto de la informática siempre me ha rondado por la cabeza, y ya con bastante experiencia, muchas ganas y mi punto de inconsciencia, creo que ya ha llegado el momento de lanzarse a intentarlo ahora como autónomo y, si todo va bien, porqué no crear una empresa en el futuro.

¿Tendrá algo que ver el ya conocido como el virus de jaiku?, sin duda, eso se parece cada vez más a la mafia de PayPal XD.

Por ahora empiezo bien, el verano ya lo voy a tener ocupado completamente. Tendré que dedicarle tiempo al Summer of Code que empezó oficialmente ayer, a un proyecto que está en el horno y... bueno esto que lo hagan público otros ;). Aparte tengo por ahí un par de pet-projects pendientes que por el momento van a tener que esperar.

A nivel de tecnología, hoy por hoy puedo desarrollar proyectos en PHP y Java.
Por el momento PHP lo tengo pensado sólo para proyectos pequeños que necesiten un hosting económico, aunque quizás acabe ojeando algún framework por si acaso y tienen todos los números CodeIgniter o Zend, por su sencillez probablemente sería el primero.
En Java los frameworks que conozco bastante bien son Struts(para mantenimientos/ampliaciones), JSF(MyFaces) y Grails, es probable que tal y como me vaya descargando estudie Spring MVC.
Otro de los frameworks que tengo que estudiar es Ruby on Rails, este sí que será en breve, hace un tiempo que hice mis primeras pruebas con este framework, me pareció interesante, y he de decir también que el soporte de NetBeans a Ruby y RoR me pareció bastante bueno.

Por otro lado, tras el verano, tengo pensado empezar a mover en serio jLibrary y a dar soporte para integraciones con otras aplicaciones o para desarrollar aplicaciones usándolo como base.

Muchos planes y sólo una persona, sólo sé una cosa, que no me voy a aburrir :).