Blog tecnico

Blog técnico

 

 

Solucionar un bug en el código fuente de Alfresco

Solucionar un bug en el código fuente de Alfresco

Alfresco

Al trabajar con Alfresco, lo lógico es utilizar las últimas versiones del producto, que incorporan nuevas funcionalidades y solucionan problemas detectados en versiones anteriores. Sin embargo, como en cualquier otro producto (OpenSource o no), toda versión de Alfresco suele contener errores (bugs) que pueden darnos algún que otro quebradero de cabeza. Por eso, a la hora de escoger la versión de Alfresco para un nuevo proyecto, en éticco no solemos trabajar con la última y recién publicada versión del producto, sino que preferimos utilizar una versión que ya lleve disponible al menos unos meses. De este modo, esos posibles bugs que pueda tener la versión ya habrán sido detectados y existirá una forma más o menos fácil de solucionarlos.

 

La forma fácil sería cuando la clase que contiene el bug es un bean de Spring que puede ser sobrescrito mediante configuración. En ese caso, únicamente tenemos que crear nuestra clase y un fichero de configuración indicándole a Alfresco que debe utilizarla y meter ambos en el classpath de ejecución.

 

La forma un poco más difícil es cuando ese bug está en alguna clase del core de Alfresco. En ese caso, no se podrá sobrescribir el producto mediante configuración y tendremos dos opciones:

 

- Subir de versión: Es decir, actualizar nuestra versión de Alfresco a otra más reciente en la que ese bug esté solucionado. Esta opción sólo es válida en caso de que no hayamos realizado muchas personalizaciones en la vista (aplicación share), porque de lo contrario todos esos cambios podrían no funcionar bien con la nueva versión, puesto que Alfresco puede modificar sus ficheros de una versión a la siguiente (y de hecho lo hace con bastante frecuencia). Además, es posible que a nuestro cliente no le interese un cambio de versión, por razones organizativas o por cualquier otra razón.

 

- Reparar el bug manteniendo la versión. Esta es la solución que vamos a explicar hoy. Si no podemos solucionar el bug sobrescribiendo la configuración del producto y tampoco podemos subir de versión, nos queda una opción que sólo está disponible en los productos OpenSource como Alfresco: corregir el bug sobre el propio código de Alfresco. Vamos a ver los pasos que hay que dar para conseguirlo, de forma resumida:

 

1. Encontrar el bug en el JIRA: https://issues.alfresco.com/jira/secure/Dashboard.jspa y comprobar que se ha resuelto.

2. Localizar la fecha en la que se da por resuelto el bug. Si además pone la revisión en la que se hizo, mejor.

3. Buscar la revisión concreta del svn que coincide con la que estamos trabajando. Se puede ver en las release notes de la versión. Por ejemplo: http://wiki.alfresco.com/wiki/Alfresco_Community_4.2.c_Release_Notes, en el apartado: Public SVN Revision number

4. Descargarse los fuentes de Alfresco de: https://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/COMMUNITYTAGS. Habrá que bajarse la revisión concreta que se ajuste a la versión con la que estamos trabajando.

5. Sobre el svn de Alfresco, consultar el log, concretamente a partir de la versión o de la fecha que hemos visto en el punto 2. Lógicamente, deberá ser una revisión posterior a la que nos hemos bajado en el punto 4.

6. Localizar en el log cuando se da por resuelto el bug que hemos visto en el JIRA y revisar los ficheros modificados.

7. Juntar esos ficheros modificados con los fuentes de Alfresco que nos hemos descargado en el paso 4, es decir, teniendo el proyecto completo de Alfresco en el Eclipse (o en nuestro IDE favorito), sobrescribimos la clase (o clases y ficheros) con el bug por la clase (o clases y ficheros) que lo solucionan. Este paso habrá que darlo con un poco de cuidado, asegurándonos de que no se ha cambiado nada más que la corrección del bug y utilizando nuestras habilidades como programadores para asegurarnos de que los cambios no van a afectar a nada más.

8. Recompilar los fuentes, siguiendo las instrucciones de: https://wiki.alfresco.com/wiki/Alfresco_SVN_Development_Environment. Es fundamental que se compile con la misma versión de java que utilice Alfresco en esa versión. Lo mejor es usar el mismo jdk que viene con la instalación del bundle, por ejemplo.

9. En este punto, se puede desplegar el war completo de nuevo, o simplemente actualizar el jar afectado por el cambio sobre el war que ya teníamos.

10. Cruzar los dedos y redesplegar el war. Todo debería funcionar igual que antes del cambio, salvo el bug, que debería estar corregido.

 

Es un cambio bastante importante y que puede asustar un poco, pero en éticco lo hemos hecho ya un par de veces y ha funcionado todo sin problemas. Esta es una clarísima ventaja de los productos OpenSource sobre productos propietarios!