Archivos de etiquetas: WebSphere

Instalar WQS y AWE en WebSphere 7

Pasos para incluir en el fichero .ear de Alfresco 3.4.x Enterprise el módulo Web Quick Start y Alfresco Web Editor para su instalación en WebSphere Application Server.

  1. Bajar Web Quick Start (zip bundle)

alfresco-enterprise-wcmqs-3.4.4.zip

  2. Desempaquetar el fichero EAR

mkdir alfresco-enterprise-3.4.3.3-WQS
cd alfresco-enterprise-3.4.3.3-WQS
jar -xvf ../alfresco-enterprise-3.4.3.3.ear

  3. Desempaquetar el fichero que contiene WQS

jar -xvf ../alfresco-enterprise-wcmqs-3.4.3.zip

  4. Desempaquetar el fichero que contiene el Alfresco Web Editor

jar -xvf ../alfresco-enterprise-webeditor-3.4.3.zip

  5. Instalar paquetes AMP en Alfresco y Share

java -jar ../alfresco-mmt-3.3.5.jar install alfresco-enterprise-wcmqs-3.4.3.amp alfresco.war -verbose
java -jar ../alfresco-mmt-3.3.5.jar install alfresco-enterprise-wcmqs-share-3.4.3.amp share.war -verbose

  6. Editar application.xml de META-INF y añadir los nuevos WAR

   Alfresco
  
    
         alfresco.war
         /alfresco
    
  
  
    
         share.war
         /share
    
  
  
    
         wcmqs.war
         /wcmqs
    
  
  
    
         awe.war
         /awe
    
  
  
    
         customer.war
         /customer
    
  

  7. Empaquetar como EAR todos los ficheros WAR

jar cvf alfresco-enterprise-3.4.3.3-WQS.ear *.war

  8. Mover los ficheros jar a una ubicación para compartirla en WAS

mkdir -p /opt/IBM/WebSphere/AppServer/lib/awe
mv *.jar /opt/IBM/WebSphere/AppServer/lib/awe

  9. Mover los ficheros xml al «extension» de configuración y añadir lo siguiente para la conexión.
mv awe-config-custom.xml /opt/alf343WAS7_shared_cluster/web-extension
vi /opt/alf343WAS7_shared_cluster/web-extension/awe-config-custom.xml
(incluir lo siguiente):

  
     
        
     
  

  
     
        
            alfresco
            Alfresco – user access
            Access to Alfresco Repository WebScripts that require user authentication
            alfresco
            http://localhost:9080/alfresco/s
           
            user
        
     
  

  10. En WebSphere, crear una biblioteca compartida para los ficheros y asignarla a la aplicación AWE.

  11. Actualizar aplicación desde el Manager de WAS 7 usando el fichero ear creado e iniciar Alfresco ECM.

  12. Copiar el fichero de propiedades de wcmqs al extension y modificarlo si es necesario.
cp ../installedApps/alfpru1Cell01/Alfresco.ear/wcmqs.war/WEB-INF/classes/alfresco/extension/wqsapi-custom.properties /opt/alf343WAS7_shared_cluster/extension/

vi /opt/alf343WAS7_shared_cluster/extension/wqsapi-custom.properties

(contenido del fichero)
wcmqs.api.alfresco=http://localhost:9080/alfresco
wcmqs.api.user=admin
wcmqs.api.password=admin

Datos sobre la instalación:
Alfresco 3.4.3 en clúster sobre WebSphere 7
Directorio de instalación: /opt/IBM/WebSphere
Directorio de configuración (vía NFS): /opt/alf343WAS7_share_cluster
Directorio del repositorio (vía NFS): /opt/alf343WAS7_repo_cluster
Directorio de índices: /opt/alf343WAS7_index_cluster

Para más información, ir a la documentación oficial de Alfresco (http://docs.alfresco.com) y a la wiki (http://wiki.alfresco.com).

Quiero agradecer la ayuda y consejos de Mikel Asla, experto en sistemas, Alfresco y WebSphere.

Alfresco 3.4.x ECM, WAS 7 y JGroups

Cuando se configuran tanto Alfresco ECM como IBM Websphere Application Server 7 (WAS7) en clúster, pueden presentarse algunos problemas o dificultades propias de este particular servidor de aplicaciones, entre estos está la configuración de JGroups.

La configuración es la siguiente:

2 nodos llamados alfpru1 (IP: 192.168.56.101/24) y alfpru2 (IP: 192.168.56.102/24).

En alfpru1:

– Está instalado MySQL con acceso para ambos nodos.
– Los recursos compartidos por NFS del repositorio y las configuraciones.
– WebSphere Application Server 7.0.17 (WAS7) con el Deploy Manager instalado.

En alfpru2:

– Websphere Application Server  7.0.17 (WAS7)

En la configuración del WAS7 se han creado dos servidores (alfpru1Cluster y alfpru2Cluster) que son miembros del cluster (alfrescoCluster).

La configuración del alfresco-global.properties es:

# Repository and indexes
#
dir.shared.root=/opt/alf343WAS7_data_cluster
dir.local.root=/opt/alf343WAS7_index_cluster
dir.root=${dir.shared.root}
dir.contentstore=${dir.shared.root}/contentstore
dir.contentstore.deleted=${dir.shared.root}/contentstore.deleted
dir.auditcontentstore=${dir.shared.root}/audit.contentstore
dir.indexes=${dir.local.root}/lucene-indexes
dir.indexes.backup=${dir.local.root}/backup-lucene-indexes
dir.indexes.lock=${dir.indexes}/locks
#
# Cluster config
#
alfresco.cluster.name=AlfpruClusterWAS7
alfresco.jgroups.defaultProtocol=TCP
alfresco.tcp.initial_hosts=alfpru1[7800],alfpru2[7800]
#
# Audit config
#
audit.enabled=false
audit.useNewConfig=false
#
# Tuning config
#
db.pool.initial=50
db.pool.min=50
db.pool.max=275
db.pool.idle=-1
hibernate.jdbc.fetch_size=150
#
# Tools config
#
jodconverter.officeHome=/usr/lib/openoffice.org3
jodconverter.portNumbers=8101
jodconverter.enabled=true
img.root=/usr
swf.exe=/usr/bin/pdf2swf
#
# Hibernate
#
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
#
# Lucene indexes config
#
index.recovery.mode=AUTO
index.tracking.cronExpression=0/5 * * * * ?
index.tracking.reindexLagMs=5000
#
# For WAS config
#
mbean.server.locateExistingServerIfPossible=false

El problema que puede presentarse ahora es que salga un error de este tipo:

[8/4/11 10:56:41:865 CEST] 0000001b ContextLoader E org.springframework.web.context.ContextLoader initWebApplicationContext Context initialization failed
                                 org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘propertyBackedBeanExporter’ defined in file [/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/alfpru1Cell01/Alfresco.ear/alfresco.war/WEB-INF/classes/alfresco/enterprise/repository-jmx-context.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.alfresco.enterprise.repo.management.subsystems.PropertyBackedBeanExporter]: Constructor threw exception; nested exception is org.alfresco.error.AlfrescoRuntimeException: 07040000 Failed to initialise JGroups channel:
   Cluster prefix:    AlfpruClusterWAS7
   App region:        org.alfresco.enterprise.repo.management.subsystems.PropertyBackedBeanExporter
   Channel:           org.jgroups.JChannel@48a648a6
   Configuration URL: file:/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/alfpru1Cell01/Alfresco.ear/alfresco.war/WEB-INF/classes/alfresco/jgroups/alfresco-jgroups-TCP.xml
[…]
Caused by: org.jgroups.ChannelException: failed to start protocol stack
[…]
Caused by: java.net.BindException: No available port to bind to

Este error es debido a que en el inicio de JGroups la dirección IP no es encontrada (o hay algún tipo de conflicto)

Para solucionar esto hay varias formas, pero la más sencilla es incluir el valor de jgroups.bind_addr para cada servidor directamente en los parámetros de inicio de la máquina virtual de Java. Para ello en WAS7 la introducimos en:

Servidores de aplicaciones de WebSphere/alfpru1Cluster/Java y gestión de procesos/Definición de proceso/Máquina virtual de java/Argumentos de JVM genéricos el valor: -Djgroups.bind_addr=alfpru1

Y en:

Servidores de aplicaciones de WebSphere/alfpru2Cluster/Java y gestión de procesos/Definición de proceso/Máquina virtual de java/Argumentos de JVM genéricos el valor: -Djgroups.bind_addr=alfpru2

Con esto se soluciona este error de manera sencilla y tendremos funcionando un clúster WAS7 + un clúster JGroups en Alfresco ECM

Para más información:
Alfresco Docs (Installing Alfresco in WebSphere)
Alfresco Docs (Configuring JGroups)
The JGroups 3.x Tutorial

Trucos para mantener un cluster en WebSphere 7 con Alfresco 3.4.x

Para instalar Alfresco ECM 3.4.x en WebSphere 7, lo mejor es seguir el siguiente enlace: http://docs.alfresco.com/3.4/index.jsp?topic=%2Fcom.alfresco.Enterprise_3_4_0.doc%2Ftasks%2Falf-websphere-install.html

Si además creamos un clúster de nodos en el mismo WebSphere además de la configuración para Alfresco ECM mediante JGroups, tenemos todavía algunas cosas que el servidor de aplicaciones no controla. Una de ellas es el control de los ficheros de configuración, comunmente llamados «ficheros del extension» o extension/alfresco.

Esto es fácil si compartimos mediante NFS estos ficheros. Imaginemos que tenemos dos servidores, alfpru1 y alfpru2, en ambos hay una instalación de WAS 7 en: /opt/IBM/WebSphere/AppServer

En esta existe un directorio llamado lib donde generalmente se crea un directorio llamado alfresco y dentro de este se introducen los ficheros de configuración. Bien, solo hay que exportar el recurso en la máquina o cabina, en este caso es la misma máquina alfpru1 y en la misma localización por defecto (lo suyo es tener evidentemente una cabina de discos para esto):

El fichero /etc/exports tendrá la siguiente línea:

/opt/IBM/WebSphere/AppServer/lib/alfresco       alfpru2(rw,sync)

Además deberá exportar el recurso compartido para el repositorio, etc.

Bien, ahora en alfpru2 creamos un directorio alfresco dentro de /opt/IBM/WebSphere/AppServer/lib y montamos el recurso como:

mount alfpru1:/opt/IBM/WebSphere/AppServer/lib/alfresco /opt/IBM/WebSphere/AppServer/lib/alfresco

Y listo!!… bueno, no del todo. Resulta que hay un fichero llamado alfresco-global.properties que está en el mismo nivel que el directorio alfresco. Como no queremos (ni podemos) exportar todo el directorio lib, lo que se puede hacer es mover este fichero dentro de lib y crear dos enlaces simbólicos, uno en cada servidor, de esta forma:

En alfpru1:

mv alfresco-global.properties ./alfresco
ln -s alfresco/alfresco-global.properties .

En alfpru2 (después de haber montado el recurso):

ln -s alfresco/alfresco-global.properties .

Para prácticamente toda la configuración vale que se compartan los ficheros, en algún caso excepcional necesitaremos otros valores, en el caso además de subsistemas podrémos realizar este truco también de forma que parte esté como recurso compartido y parte no.

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_MACHINESYSTEMCurrentControlSetServicesWebClientParameters llamado UseBasicAuth con el valor a 1.

En Windows 7, crear un valor DWORD en HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesWebClientParameters 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.