jueves, junio 09, 2011

Alfresco, WebDAV y WebSphere

WebDAV (Web-based Distributed Authoring and Versioning) es un protocolo que implementa Alfresco para poder conectar unidades y/o recursos compartidos y poder subir, modificar y borrar documentos de una forma sencilla.

Este protocolo además es bastante simple y se basa en comunicaciones vía HTTP y HTTPS con lo que es además muy sencillo de configurar entre balanceadores y firewalls. No obstante presenta algunos problemas cuando se conecta a través de Windows.

Uno de ellos es la codificación, Windows usa generalmente la ISO-8859-15 (en España) y Alfresco usa generalmente UTF-8 a nivel de Java y sobre todo si está instalado en máquinas Linux. Este problema de codificación cambia caracteres con tildes, eñes, etc. por lo que hay que prestar atención a la configuración y establecer todo al mismo sistema de codificación para evitar sorpresas.

Otro problema que me he encontrado en un cliente ha sido la conexión directamente con el servidor desde las estaciones de trabajo tanto Windows XP como Windows 7.

Realizando pruebas con un Apache 2.2 y mod_proxy_balancer hacia dos máquinas virtuales con Alfresco 3.3.4 no he tenido problemas siempre y cuando se sigan las indicaciones de los siguientes enlaces:

http://wiki.alfresco.com/wiki/File_Server_Configuration
http://wiki.alfresco.com/wiki/Client_WebDAV
http://support.microsoft.com/kb/841215
http://support.microsoft.com/kb/912152
http://www.webdavsystem.com/server/documentation/authentication/basic_auth_vista

Básicamente es actualizar el software del cliente WebDAV así como activar la autenticación básica tanto en plano como por SSL usando el registro de Windows.

Ejecutar regedit.exe

En Windows XP, crear un valor DWORD en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\ llamado UseBasicAuth con el valor a 1.

En Windows 7, crear un valor DWORD en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\ llamado BasicAuthLevel con el valor a 2.


Una vez realizados estos cambios solo hay que reiniciar el servicio cliente de WebDAV, reiniciando la máquina o parando e iniciando el servicio como:

NET STOP webclient
NET START webclient

Hasta aquí todo correcto, en las máquinas virtuales de laboratorio todo fue correctamente, pero en el cliente seguía habiendo problemas cuando se intentaba conectar con Windows XP, no así con Windows 7, ¿cual era la diferencia básica?

En el cliente, los accesos se realizan hacia un balanceador hardware que a su vez dirige las peticiones a sendos IBM HTTP Servers que no son más que un Apache modificado y estos se conectaban a los nodos de Alfresco en clúster (estos están en WAS o IBM WebSphere Application Server).

Para el balanceo de los servidores IBM HTTP Server se usa un plugin propio. Este se configura a través de un fichero llamado plugin-cfg.xml

En el siguiente enlace hay una descripción de los parámetros y valores posibles: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/rwsv_plugincfg.html

En su configuración, el parámetro AcceptAllContent está desactivado y su misión es la de si permite que los usuarios puedan incluir o no el contenido en las peticiones POST, PUT, GET, y HEAD cuando la cabecera de petición incluye una cabecera de longitud del contenido o de codificación de la transferencia.

Se puede especificar True para leer todas las peticiones o False en la que se espera sólo el contenido y sólo para las peticiones POST y PUT.

Poniendo este valor a True todo se ha solucionado y ahora los Windows XP (SP1, SP2 y SP3) pueden conectarse sin ningún problema.

Agradezco la ayuda aportada a la solución de este problema a Roberto Herrero Guindal, experto en WebSphere del departamento de sistemas del cliente que ha tenido este problema.


4 comentarios:

Anónimo dijo...

hola, veo que tienes mucha experiencia con alfresco tengo un lio y me parece q se debe al webdav, quiero subir archivos mediante un webservice mis archivos se encuentran en un carpeta de red montada en mi servidor linux, inicialmente me suben 2 archivos y me da esta excepcion:
16:27:41,661 INFO [STDOUT] 16:27:41,661 ERROR [feed.local.LocalFeedGridJob] java.lang.NullPointerException
16:27:41,661 INFO [STDOUT] 16:27:41,661 ERROR [activities.feed.AbstractFeedGenerator] Exception during generation of feeds
java.lang.Exception
at org.alfresco.repo.activities.feed.local.LocalFeedGridJob.execute(LocalFeedGridJob.java:58)
at org.alfresco.repo.activities.feed.local.LocalFeedGenerator.generate(LocalFeedGenerator.java:96)
at org.alfresco.repo.activities.feed.AbstractFeedGenerator.execute(AbstractFeedGenerator.java:137)
at org.alfresco.repo.activities.feed.FeedGeneratorJob.execute(FeedGeneratorJob.java:50)
at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)

Si pudieras ayudarme te lo agradeceria mucho.

fegor dijo...

El error que veo no lo relaciono con WebDav de primeras, así que si puedes darme más información mejor, incluso algo del código que has desarrollado.

Escríbeme a mi correo electrónico si quieres.

Un saludo.

MARY dijo...

hola, en cuanto al tema de la codificacion tengo alfresco en linux, obligatoriamente debe usar UTF-8?? y talvez otra consulta que no viene muy al caso, Alfresco tiene un numero maximo para transaccion de archivos?

fegor dijo...

Hola, no, no tiene por qué usar obligatoriamente UTF-8, puede usar también ISO-8859-1, etc. Sí que se recomienda que la codificación de la base de datos sea en UTF-8, porque eso lo controla totalmente Alfresco a través de Hibernate/iBatis.