La entrada de hoy es para explicar como funciona el módulo Alfresco Bulk Filesystem import desarrollado por Peter Monks. Este módulo nos va a permitir importar un conjunto de ficheros permitiendonos incorporar metadatos en el proceso.
Alfresco trae varios mecanismos para importar contenidos:
En todos los casos anteriores necesitamos crear reglas o los mecanismos necesarios usando la API para asignar los metadatos.
Mediante el módulo simplemente creando un fichero con el mismo nombre que el original pero con la extension metadata.properties hará que se lea su contenido y se incorporen los metadatos de forma dinámica.
Por ejemplo, tengo un documento que llamado Documentación.odf y otro Documentación.metadata.properties ubicado en el mismo directorio
Dentro del fichero properties se pondrá el tipo de contenido y cada uno de los metadatos:
He subido a alfresco mediante FTP y utilizando Filezilla configurado para subir los ficheros de 1 en 1, (haciéndolo de 2 en dos tuve fallos en varios ficheros y fue más lento).
El tiempo para subir 1,4Gb de datos distribuidos en 679 ficheros fue de 4:24 segundos. Esto sin haber asignado ningún metadato.
A continuación y para poder realizar la prueba con metadatos de forma rápida me situé en la carpeta donde se habían subido los documentos (/opt/alfresco34/alf_data/contentstore/2011/6/14/12) y con un pequeño script cree los ficheros de metadatos introduciendo únicamente el tipo de contenido:
He comprobado además que en la carpeta del contentstore únicamente están los archivos cargados por FTP y que los nuevos se van a copiar en la hora siguiente.
Ya tenemos los ficheros a subir con sus metadatos. Con la importación del módulo se añade un web-script que nos ofrece una página desde donde podemos iniciar la importación masiva en Alfresco y monitorizar todo el proceso. En mi caso localhost (ojo de no poner barra al final!!):
http://localhost:8080/alfresco/service/bulk/import/filesystem
En esta pantalla pondremos donde se encuentran los ficheros que queremos importar. Esto ha de ser una ruta en el sistema de ficheros y puede ser local o estar montada de forma remota.
El siguiente campo es donde queremos que se ubiquen los ficheros. La página usa Ajax y nos ayudará a auto completar este campo, lo que resulta muy útil.
Una vez lanzada la importación veremos como va el progreso
El resultado fue que se subieron los ficheros en 2 minutos 39 segundos, casi la mitad de tiempo. No está nada mal.
Como nota final, mencionar que es posible incorporar metadatos a ficheros que ya existen en Alfresco simplemente poniendo los ficheros de metadatos.
ACTUALIZACIÓN:
El formato del fichero de metadatos ya no es un fichero de texto plano, si no que se ha pasado al formato xml para dar un mejor soporte a carácteres unicode. El formato que sigue es:
Más información
http://blogs.alfresco.com/wp/pmonks/2009/10/22/bulk-import-from-a-filesystem/
http://code.google.com/p/alfresco-bulk-filesystem-import/
Alfresco trae varios mecanismos para importar contenidos:
- Servidor Alfresco JLAN – permite acceder al repositorio como si fuera una unidad de red de Windows , un servidor FTP, WebDAV o NFS.
- CMIS API
- REST API
- SOAP API
- Ficheros ACP
En todos los casos anteriores necesitamos crear reglas o los mecanismos necesarios usando la API para asignar los metadatos.
Mediante el módulo simplemente creando un fichero con el mismo nombre que el original pero con la extension metadata.properties hará que se lea su contenido y se incorporen los metadatos de forma dinámica.
Por ejemplo, tengo un documento que llamado Documentación.odf y otro Documentación.metadata.properties ubicado en el mismo directorio
Dentro del fichero properties se pondrá el tipo de contenido y cada uno de los metadatos:
# tipo de contenido
type=cm:content
# Aspectos
aspects=cm:versionable, custom:myAspect
# Propiedades
cm\:title=This is the value of the cm:title field.
cm\:description=This is the value of the cm:description field.
# Enlace a un tag (es necesario apuntar a la referencia)
cm\:taggable=workspace://SpacesStore/3da6c395-3a4b-4a57-836d-8e5
# Propiedad personalizada de nuestro modelo de datos:
custom\:myProperty=This is the value of the custom:myProperty field.
# Propiedad con multiples valores
custom\:mvProperty=first value,second value,third value.
# Fechas (sólo formato ISO8601)
cm\:created=2011-06-15T10:00:01.234+01:00
cm\:modified=2011-06-15T10:00:01.234+01:00
Otra de las ventajas de las que se habla es que la importación mediante este metodo es mucho más rápida, ya que nos ahorramos el overhead de los protocolos y estamos cargando los datos desde un disco local, así que me he decidido a comprobarlo por mi mismoHe subido a alfresco mediante FTP y utilizando Filezilla configurado para subir los ficheros de 1 en 1, (haciéndolo de 2 en dos tuve fallos en varios ficheros y fue más lento).
El tiempo para subir 1,4Gb de datos distribuidos en 679 ficheros fue de 4:24 segundos. Esto sin haber asignado ningún metadato.
A continuación y para poder realizar la prueba con metadatos de forma rápida me situé en la carpeta donde se habían subido los documentos (/opt/alfresco34/alf_data/contentstore/2011/6/14/12) y con un pequeño script cree los ficheros de metadatos introduciendo únicamente el tipo de contenido:
# for i in `find . -type f` ;do echo "type=cm:content" > $i.metadata.properties;done
De esta manera he podido crear de una forma muy rápida todos los ficheros. He usado el contenido del contentstore porque sabemos que los nombres en el contenstore no tienen espacios, y el miniscript me dio algún problema con los ficheros que tenían espacios en los nombres. El módulo es muy sensible a fallos, si no existe algún fichero de metadatos no se ejecutará.He comprobado además que en la carpeta del contentstore únicamente están los archivos cargados por FTP y que los nuevos se van a copiar en la hora siguiente.
Ya tenemos los ficheros a subir con sus metadatos. Con la importación del módulo se añade un web-script que nos ofrece una página desde donde podemos iniciar la importación masiva en Alfresco y monitorizar todo el proceso. En mi caso localhost (ojo de no poner barra al final!!):
http://localhost:8080/alfresco/service/bulk/import/filesystem
En esta pantalla pondremos donde se encuentran los ficheros que queremos importar. Esto ha de ser una ruta en el sistema de ficheros y puede ser local o estar montada de forma remota.
El siguiente campo es donde queremos que se ubiquen los ficheros. La página usa Ajax y nos ayudará a auto completar este campo, lo que resulta muy útil.
Una vez lanzada la importación veremos como va el progreso
El resultado fue que se subieron los ficheros en 2 minutos 39 segundos, casi la mitad de tiempo. No está nada mal.
Como nota final, mencionar que es posible incorporar metadatos a ficheros que ya existen en Alfresco simplemente poniendo los ficheros de metadatos.
ACTUALIZACIÓN:
El formato del fichero de metadatos ya no es un fichero de texto plano, si no que se ha pasado al formato xml para dar un mejor soporte a carácteres unicode. El formato que sigue es:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <entry key="key1">value1</entry> <entry key="key2">value2</entry> ... </properties>
Más información
http://blogs.alfresco.com/wp/pmonks/2009/10/22/bulk-import-from-a-filesystem/
http://code.google.com/p/alfresco-bulk-filesystem-import/

