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.