Secciones

Integrando Alfresco y Grails mediante CMIS

Una de las grandes ventajas que ofrece alfresco son sus capacidades de integración, permitiendo acceder al repositorio mediante por ejemplo servicios SOAP o Rest.

En esta entrada vamos a explicar como realizar una integración desde grails para modificar el estado de un documento utilizando los servicios Rest de CMIS.

El servicio que ofrece Alfresco para realizar esta modificación es:
  • /alfresco/service/cmis/i/
Este servicio necesita que se le envíe por put una cadena xml, y en el ejemplo siguiente, estamos indicando que modifique la propiedad factura:estadoProceso por el valor Pendiente Legalizar.

Para realizar esta llamada desde grails, debemos utilizar el siguiente código:
        try{  
            if (alfrescoIDs.size != 0){
                for (i in 0..alfrescoIDs.size - 1){
   
                    def httpAlfresco = new RESTClient(ALFRESCO_URL)
                       
                    def authString = USR_ALFRESCO + ":" + PSW_ALFRESCO
                    def authHash = authString.bytes.encodeBase64().toString()
                      
                    def idAlfresco = alfrescoIDs[i].toString()
                    idAlfresco = idAlfresco.replaceAll("urn:uuid:", "")
                      
                    def resp = httpAlfresco.put(
                        path: "/alfresco/service/cmis/i/${idAlfresco}",
                        requestContentType : 'application/atom+xml',
                        contentType: TEXT,
                        headers:[Authorization:"Basic ${authHash}"],
                        body : " " + status + ""
                        )
                        assert resp.status == 200
   
                }
                actualizaEstado = true
            }  
        } catch (Exception e){
            log.info(e.message)
        }
 Hay que prestar especial atención a dos temas:
  1. La autenticación se debe pasar como un parámetro en el header y codificarlo en base64, ya que utilizando el método auth de RestClient no funciona correctamente.
  2. Se debe establecer el requestContenType como application/atom+xml sino recibiremos un mensaje de error. Para más información podéis consultar esta entrada. https://forums.alfresco.com/en/viewtopic.php?f=45&t=37563.
  3. Se debe utilizar el cliente RESTClient ya que es el único que he encontrado que implementa el método put.
Saludos,

JK

Como crear un proceso quartz en grails

Hay veces que necesitamos ejecutar cierto funcionalidades cada cierto tiempo, por ejemplo, sincronizar ciertos datos de usuario, verificar si se ha producido alguna acción en otros sistemas, comprobar si un sistema ha dejado de responder,etc..

Quartz es un framework java para crear procesos planificados open source muy sencillo y potente. En grails tenemos la posibilidad de utilizar en formato de plugins.

Para poder utilizar quartz, lo primero que tenemos que hacer es instalar el plugin:
grails install-plugin quartz2
Una vez instalado personalizamos el fichero Config.groovy agregando los imports de quartz2:
import static org.quartz.JobBuilder.*
import static org.quartz.SimpleScheduleBuilder.*
import static org.quartz.CronScheduleBuilder.*
import static org.quartz.CalendarIntervalScheduleBuilder.*
import static org.quartz.TriggerBuilder.*
import static org.quartz.DateBuilder.*
import org.quartz.*
Después, creamos la clase para el job HelloWorldJob.groovy que implementará la lógica que queremos ejecutar:

package net.juancarlosfernandez.samples

import org.quartz.Job
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

class HelloWorldJob implements Job {

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException{
        println "Hello World!"
    }
}
Agregamos el import de esta clase al fichero Config.groovy
import net.juancarlosfernandez.samples.HelloWorldJob


Ahora sólo nos falta agregar en el mismo fichero Config.groovy la configuración que necesitamos aplicar al Job:

grails.plugin.quartz2.jobSetup.job1 = { quartzScheduler, ctx ->
JobDetail job = newJob(SignatureJob.class)
            .withIdentity("signatureServiceJob")
            .usingJobData(new JobDataMap([jobDetailName:'mainConfig']) )
            .build()
Trigger trigger = newTrigger()
            .withIdentity("signatureServiceTrigger")
            .withSchedule(simpleSchedule()
                .withIntervalInSeconds(60)
                .repeatForever())
            .startNow()
            .build()

 // Tell quartz to schedule the job using our trigger
 quartzScheduler.scheduleJob(job, trigger);
Y con esto ya tenemos nuestro servicio quartz listo para ejecutarse.

Links de referencia:

https://github.com/9ci/grails-quartz2

Saludos,

JK

Mis primeras impresiones en Grails.

Desde hace algunos meses llevo trabajando con el framework grails para varios proyectos en mi actual empresa y la verdad es que la experiencia está siendo muy positiva.

Grails, al igual que play framework o ruby on rails, es un framework que se basa en el paradigma "coding by convention" o "convention over configuration" y cuyo objetivo principal es mejorar la productividad de los desarrollos web.

Un buen desarrollador Java, con experiencia de al menos 5 años, puede llevar a cabo desarrollos muy productivos en Java, pero en la mayoría de ocasiones nuestros equipos no cuentan únicamente con perfiles experimentados, y hay que reconocer que la curva de aprendizaje Java en entornos empresariales es bastante larga, no sólo por el lenguaje Java en sí, que es similar a cualquier lenguaje orientado a objetos del mercado, sino porque para poder llevar a cabo desarrollos en entornos JEE es necesario conocer con suficiente profundidad al menos Spring Framework, Hibernate, Struts, JSF, Ant, Maven,...

Desde hace algunos años hay muchas voces muy respetadas en el mundo Java como Craig McClanahan o James Gosling, que están contemplando seriamente la posibilidad de buscar alternativas fuera del mundo Java.

A todos aquellos que estéis en esta situación os aconsejo echar una ojeada a esta presentación de Matt Raible en la que se hace una comparativa muy interesante de frameworks Web.
Las principales ventajas que he visto en Grails son:

- Seguir el model MVC es muy sencillo en intuitivo.
- SpringSource ofrece un entorno de desarrollo adaptado.
- Basta con una línea de comandos y un editor de texto para poder desarrollar con facilidad. En OSX, TextMate y un terminal es suficiente.
- Se pueden probar los cambios sin tener que parar y arrancar el servidor. Mi experiencia con este punto ha sido de lo más gratificante.
- No es necesario mantener infinidad de ficheros xml de configuración.
- La curva de aprendizaje es relativamente corta.
- El resultado se puede empaquetar en un war y desplegar en cualquier servidor java.
- Permite seguir utilizando nuestras librerías Java de siempre.
- Utiliza maven o apache ivy para la gestión de dependencias y ciclo de vida del desarrollo.

En próximas entradas iré explicando más cosas sobre este framework y os animo a todos a hacer vuestros primeros pinitos. Es realmente sencillo comenzar sobre todo para todos los que venimos de Java.

Aquí os dejo un pequeño screencast que demuestra lo que os digo.



Saludos,

JK

Screencast sobre como crear un gadget en JIRA

Aquí os dejo dos pequeños screencast sobre los pasos que se deben seguir para comenzar a desarrollar gadget en JIRA.

Primera Parte.

Segunda Parte.