AnsweredAssumed Answered

Guia de Instalacion Alfresco 4.2.c en Jboss 7.1.1 Final...

Question asked by lexcorp on Dec 29, 2012
Latest reply on Feb 26, 2014 by psantis
Hola… este es mi regalo de año viejo… Despues de varios dias y horas y horas de buscar información de errores, leer acerca de jboss 7, por fin he logrado desplegar alfresco community 4.2.c en jboss 7. Espero que esta guía le sirva a alguien…

Plataforma

Sistema Operativo: Debian Squeeze 6.0.6 de 64bits
Base de Datos: MySQL 5
Java: JDK 1.7 update 09
Jboss: 7.1.1 Final
Alfresco Community: 4.2.c (Archivo WAR)

Prerrequisitos

Instalar y configurar JDK (El sistema viene con openjdk por defecto por lo que debemos cambiarlo)
Instalar y configurar la base de datos MySQL
Jboss 7.1.1
Alfresco Community 4.2.c (Archivo WAR)
MySQL Connector J

Consideraciones

Dicen que la suposición es la madre de todas las desgracias por lo que para evitar esto:

Se asume que el usuario de esta guía tiene conocimientos básicos del manejo de la consola de Linux y comandos básicos.
Se asume que el usuario de esta guía tiene conocimientos básicos de como desplegar aplicaciones en Jboss 7.
Se asume que el usuario de esta guía tiene creada una base de datos de alfresco en mysql.
Se asume que el usuario de esta guía cumple con los prerrequisitos de software ya que esta guía fue creada en este ambiente y no se asegura que pueda funcionar en configuraciones de ambiente distintos.

Instalación

Crear un directorio “alfresco42c” dentro de /opt

Descomprimir jboss-as-7.1.1.Final.zip dentro de la carpeta /opt/alfresco42c

Crear un directorio tmpalfresco dentro de /opt/alfresco42c/

Descomprimir alfresco-community-4.2.c.zip dentro de /opt/alfresco42c/ tmpalfresco


Configuración del datasource para conexiones a base de datos mysql

Crear un directorio “mysql” en /opt/alfresco42c/jboss-as-7.1.1.Final/modules/com/
Crear un directorio “driver” en /opt/alfresco42c/jboss-as-7.1.1.Final/modules/com/mysql/
Crear un directorio “main” en /opt/alfresco42c/jboss-as-7.1.1.Final/modules/com/mysql/driver/

Descargar el archivo .jar controlador de base de datos  y colocarlo en la carpeta “/opt/alfresco42c/jboss-as-7.1.1.Final/modules/com/mysql/driver/main”. Descargue el controlador MySQL Connector/J desde http://dev.mysql.com/downloads/connector/j/ y coloque el archivo .jar en la carpeta “/opt/alfresco42c/jboss-as-7.1.1.Final/modules/com/mysql/driver/main”.


Crear el archivo module.xml en la carpeta:

“/opt/alfresco42c/jboss-as-7.1.1.Final/modules/com/mysql/driver/main/”

e inserte el siguiente contenido:
<?xml version="1.0"?> 
<module xmlns="urn:jboss:module:1.0" name="com.mysql.driver">
<resources>
<resource-root path="mysql-connector-java-5.1.22-bin.jar" />
</resources>
<dependencies>
<module name="javax.api" />
<module name="javax.mail.api" />
<module name="javax.servlet.api" />
<module name="javax.servlet.jsp.api" />
<module name="javax.transaction.api" />
</dependencies>
</module>

Modifique el archivo standalone.xml ubicado en la carpeta “/opt/alfresco42c/jboss-as-7.1.1.Final/standalone/configuration/”, añadiendo el datasource y el driver dentro del elemento <datasources>.

1.- Primero agregue el datasource dentro del elemento <datasources>

<datasource jndi-name="java:jboss/datasources/AlfrescoDS" pool-name="AlfrescoDS" enabled="true" jta="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:mysql://localhost/alfresco</connection-url>
<driver>mysql</driver>
<security>
<user-name>root</user-name>
<password>root</password>
</security>
</datasource>

2.- Agregue <driver name="mysql" module="com.mysql.driver"/> dentro del elemento <drivers> que esta dentro de <datasources>

Antes del siguiente paso vaya a "Desplegar Alfresco"

Editar el archivo jboss-web.xml ubicado en “/opt/alfresco42c/jboss-as-7.1.1.Final/standalone/deployments/alfresco.war/WEB-INF/” y eliminar o comentar:

<!– <jboss-web>
   <resource-ref>
      <res-ref-name>jdbc/dataSource</res-ref-name>
      <jndi-name>java:alfresco-datasource</jndi-name>
   </resource-ref>
</jboss-web>
–>
y añadir

<jboss-web>
   <resource-ref>
      <res-ref-name>jdbc/dataSource</res-ref-name>
      <jndi-name>java:jboss/datasources/AlfrescoDS</jndi-name>
   </resource-ref>
</jboss-web>


Editar el archivo web.xml ubicado en “/opt/alfresco42c/jboss-as-7.1.1.Final/standalone/deployments/alfresco.war/WEB-INF/” y eliminar o comentar:

<!– <resource-ref>
      <description>The Alfresco database connection</description>
      <res-ref-name>jdbc/dataSource</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Unshareable</res-sharing-scope>
   </resource-ref>
–>

y añadir

<resource-ref>
      <description>The Alfresco database connection</description>
      <res-ref-name>java:jboss/datasources/AlfrescoDS</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Unshareable</res-sharing-scope>
</resource-ref>

Crear el archivo persistence.xml en la carpeta “/opt/alfresco42c/jboss-as-7.1.1.Final/standalone/deployments/alfresco.war/META-INF” y agregar el siguiente contenido:

<?xml version="1.0" encoding="UTF-8"?>
<persistence
    xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

   <!– MySQL –>
   <persistence-unit name="tiny" transaction-type="JTA">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:jboss/datasources/AlfrescoDS</jta-data-source>
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
         <property name="hibernate.hbm2ddl.auto" value="update" />
         <property name="hibernate.show_sql" value="true" />
         <property name="hibernate.format_sql" value="true" />
      </properties>
   </persistence-unit>
   
</persistence>

Configurar las dependencias de alfresco

Crear el archivo jboss-deployment-structure.xml dentro de la carpeta “/opt/alfresco4jb7/jboss-as-7.1.1.Final/standalone/deployments/alfresco.war/WEB-INF/” y añadir el siguiente contenido:

<?xml version="1.0"?>

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
   <deployment>
      <exclusions>
         <module name="org.apache.log4j" />
         <module name="org.hibernate" />
      </exclusions>
      <dependencies>
         <module name="com.mysql.driver" />
         <module name="javax.mail.api" />
         <module name="org.apache.xerces" />
         <module name="org.jboss.modules" />
      </dependencies>
   </deployment>
</jboss-deployment-structure>

Configuración de memoria de la JVM

Realizar las siguientes modificaciones en el archivo standalone.conf ubicado en “/opt/alfresco42c/jboss-as-7.1.1.Final/bin”

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true -Duser.timezone=GMT -Xmx1024m -XX:MaxPermSize=256m”


Desplegar Alfresco

Crear un directorio alfresco.war dentro del directorio /opt/alfresco42c/jboss-as-7.1.1.Final/standalone/deployments/

Descomprimir el contenido del archivo /opt/alfresco42c/tmpalfresco/web-server/webapps/alfresco.war en el directorio /opt/alfresco42c/jboss-as-7.1.1.Final/standalone/deployments/alfresco.war

Crear el archivo alfresco.war.dodeploy en el directorio /opt/alfresco42c/jboss-as-7.1.1.Final/standalone/deployments/

Iniciar Jboss

Ejecute /opt/alfresco42c/jboss-as-7.1.1.Final/bin/./standalone.sh

Probar la aplicación

Una vez que el servidor ha iniciado, abra su navegador y coloque la url: http://localhost:8080/alfresco

Tareas Adicionales

Aun quedan detalles por afinar como son configurar jboss para reducir la salida en el log del servidor.

Hacer que alfresco lea el archivo de configuración alfresco-global.properties y las extensiones, para lo cual encontré el siguiente enlace https://community.jboss.org/wiki/HowToPutAnExternalFileInTheClasspath

ya que por ejemplo alfresco lee el archivo repository.properties ubicado en /opt/alfresco42c/jboss-as-7.1.1.Final/standalone/deployments/alfresco.war/WEB-INF/classes/alfresco/

en lugar del archivo alfresco-global.properties

Afinar y manejo de módulos y dependencias.
Verificar los nombres de los datasources específicamente los valores:
<res-ref-name>jdbc/dataSource</res-ref-name>

y

<jndi-name>java:jboss/datasources/AlfrescoDS</jndi-name>

ya que muy probablemente se pueden dejar los nombres que alfresco trae configurados por defecto.

Y muy probablemente algunos detalles que he dejado pasar, conforme lo vaya afinando lo compartiré.

Probar en otros ambientes con distribuciones Linux diferentes y versiones de java y conector de mysql.

Bueno… esta es mi experiencia hasta el momento con el despliegue de Alfresco Community 4.2.c en Jboss 7.1.1 hasta el momento, espero sus comentarios buenos o malos y desde luego sus aportaciones.

Errores comunes con los que me encontré:

ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC00001: Failed to start service jboss.deployment.unit."alfresco.war".PARSE: org.jboss.msc.service.StartException in service jboss.deployment.unit."alfresco.war".PARSE: Failed to process phase PARSE of deployment "alfresco.war"
   at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
   at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
   at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_09]
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_09]
   at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_09]
Caused by: java.lang.IllegalArgumentException: JBAS015533: Web Service endpoint org.apache.chemistry.opencmis.server.impl.webservices.RelationshipService with URL pattern /RelationshipService is already registered. Web service endpoint org.alfresco.repo.cmis.ws.DMRelationshipServicePort is requesting the same URL pattern.
   at org.jboss.as.webservices.metadata.model.AbstractDeployment.addEndpoint(AbstractDeployment.java:60)
   at org.jboss.as.webservices.metadata.model.JAXWSDeployment.addEndpoint(JAXWSDeployment.java:27)
   at org.jboss.as.webservices.deployers.WSIntegrationProcessorJAXWS_POJO.processAnnotation(WSIntegrationProcessorJAXWS_POJO.java:94)
   at org.jboss.as.webservices.deployers.AbstractIntegrationProcessorJAXWS.deploy(AbstractIntegrationProcessorJAXWS.java:87)
   at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
   … 5 more

Solucion: https://community.jboss.org/message/728811 gracias Niranjan

Esto sucede porque JBoss 7.1 ya inicia un servicio web service. Abra el archivo “/opt/alfresco42c/jboss-as-7.1.1.Final/standalone/configuration/standalone.xml” buscar webservices y comentar:

<!– <extension module="org.jboss.as.webservices"/> –>

<!–
        <subsystem xmlns="urn:jboss:domain:webservices:1.1">
            <modify-wsdl-address>true</modify-wsdl-address>
            <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>
            <endpoint-config name="Standard-Endpoint-Config"/>
            <endpoint-config name="Recording-Endpoint-Config">
                <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
                    <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
                </pre-handler-chain>
            </endpoint-config>
        </subsystem>
–>

Outcomes