====== Configurar el proyecto para trabajar con JBoss AS 7 ======
En esta guía técnica, vamos a ver los pasos necesarios para poder desplegar proyectos en el servidor JBoss As 7. Esta guía indica una serie de modificaciones en FundeWeb 2.0.x y en el proyecto, que permite trabajar con los servidores Weblogic 12 y JBoss AS 7.
La base de estas modificaciones es FundeWeb 2.0.0, sino estas en esta versión es recomendable actualizarse.
Realizar previamente las siguientes guías técnicas\\
* [[:fdw2.0:fundeweb2.0:gt:actualizacion-sistema-autenticación|Actualización del Sistema de Autenticación]], **SOLO** para aplicaciones con creadas con arquetipos anteriores al 0.0.7.
* [[fdw2.0:fundeweb2.0:gt:gt-eclipse:gt-actualizar-me2|Actualizar M2E]]
* [[:fdw2.0:fundeweb2.0:gt:gt-eclipse:gt-instalar-m2e-maven-fundeweb-build-helper-plugin|Instalar el plugin: M2E connector for maven-fundeweb-build-helper-plugin]] - Disponible a partir de FundeWeb 2.0.26 Win32 y 2.0.18 Win64.
* [[fdw2.0:fundeweb2.0:gt:gt-eclipse:gt-instalar-m2e-build-helper-maven-plugin|Instalar el plugin: M2E connector for build-helper-maven-plugin]]
===== Integrar el Servidor JBoss AS 7 en FundeWeb =====
Para integrar JBoss AS en FundeWeb, tenemos que seguir los siguientes pasos:
* Lo primero es descargar el servidor [[ftp://ftp.um.es/pub/Fundeweb/instalaciones/servidores/jboss-eap-6.4-fundeweb.zip|JBoss EAP 6.4]] - (que contiene un JBoss AS 7.5) y descomprimir el fichero (con //Extraer aquí//) en la carpeta //_ruta_instalacion_fundeweb_\FundeWeb\2.0\servidores//.
Para navegadores Chromuin --> [[ https://www.um.es/ftp/Fundeweb/instalaciones/servidores/|JBoss EAP 6.4]]
* Se creará la carpeta //jboss-eap-6.4//.
*Vamos a Eclipse y seleccionamos la pestaña //Servers//. Dentro de esta mostramos el menú contextual (botón derecho del ratón) y seleccionamos //New --> Server//.
{{ :fdw:fundeweb:gt:gt-jbossas7:add-jboss-server-i.jpg |Integrar JBoss EAP 6.4 en FundeWeb - Añadir Servidor}}
* En la ventana que aparece, buscamos //Red hat JBoss Middleware --> JBoss Enterprise Application Platform 6.1+// y el campo //Server name// lo modificamos por //JBoss Enterprise Application Platform 6.4// y pinchamos en el botón //Next//.
{{ :fdw:fundeweb:gt:gt-jbossas7:add-jboss-server-ii.jpg |Integrar JBoss EAP 6.4 en FundeWeb - Seleccionar tipo de servidor}}
* En la ventana que aparece, tenemos que seleccionar el //runtime//, pero como no esta creado pinchamos en el botón //Next// para crearlo.
{{ :fdw:fundeweb:gt:gt-jbossas7:add-jboss-server-iii.jpg |Integrar JBoss EAP 6.4 en FundeWeb - Seleccionar runtime del servidor}}
* En la ventana que aparece, establecemos el nombre como //JBoss EAP 6.4 Runtime//, //Home Directory// como //_ruta_instalacion_fundeweb_\FundeWeb\2.0\servidores\jboss-eap-6.4// y //Execute Environment// como //JavaSE-1.7//. Pinchamos en el botón //Finish//.
{{ :fdw:fundeweb:gt:gt-jbossas7:add-jboss-server-iv.jpg |Integrar JBoss EAP 6.4 en FundeWeb - Configurar el runtime del servidor}}
Ahora el servidor nos aparecerá en la pestaña //Servers//.
{{ :fdw:fundeweb:gt:gt-jbossas7:add-jboss-server-v.jpg |Integrar JBoss EAP 6.4 en FundeWeb - Servidor en pestaña Servers}}
===== Modificaciones Generales del Proyecto =====
=== Modificar el POM Principal del Proyecto ===
Tenemos que editar el fichero POM principal del proyecto y buscar la etiqueta XML //// (esta tiene que tener como //// el valor //parent//) modificando el valor de la etiqueta hija //// con el valor //2.0.24//.
Abrimos el fichero //build.properties// y añadimos al inicio de este lo siguiente:
# Configuracion de los perfiles de empaquetado
#jdk=jdk7
#environment=local
#target.server=weblogic12
#cliente=umu
==== Modificaciones en el Módulo EAR ====
Solo tenemos que realizar dos acciones:
- Copiar el fichero {{:fdw2.0:fundeweb2.0:gt:gt-jbossas7:jboss-deployment-structure.zip|jboss-deployment-structure.zip}} en la carpeta //src\main\application\META-INF// del módulo y descomprimirlo. Una vez descomprimido se puede eliminar.
- Editamos el fichero //jboss-deployment-structure.xml// y en el elemento //// con atributo //name="_miaplicacion_-web.war"// sustituimos //_miaplicacion_// por el nombre de nuestra aplicación.
- Realizar modificaciones en el fichero POM del módulo.
=== Modificaciones en el fichero POM ===
Editamos el fichero //pom.xml// del módulo y vamos a las sección //// del plugin //maven-ear-plugin//. Realizamos las siguientes modificaciones:
* Añadimos la etiqueta //_nombre_aplicacion_// antes de la etiqueta ////. Cambiamos //_nombre_aplicacion_// con el mismo valor que tiene la etiqueta //// (que suele ser el mismo valor que contiene la etiqueta //// del fichero POM principal del proyecto).
* Modificamos la etiqueta ////, hija de la etiqueta ////, añadiendole al contenido el postfijo //.war//.
* Modificamos la etiqueta //// que esta en la etiqueta //// y la dejamos con el calor: //${ejb.unpack}//
* * Modificamos la etiqueta //// que esta en la etiqueta //// y la dejamos con el calor: //${web.unpack}//
* Antes del cierre de la etiqueta //// añadimos lo siguiente:
weblogic12
true
**/jboss-deployment-structure.xml
jboss_as7
**/weblogic-application.xml,
==== Modificaciones en el Módulo WEB ====
Solo tenemos que realizar dos acciones:
* Descargar fichero {{fdw2.0:fundeweb2.0:gt:gt-jbossas7:filtros-web.zip|filtros-web.zip}} en la carpeta //src/main// del módulo y descomprimirlo. Una vez descomprimido se puede eliminar. Contiene ficheros con variables dependientes del servidor.
* Editamos los ficheros //filtro-jbossas7.properties// y //filtro-jbossas7-local.properties// de la carpeta //src/main/perfiles/jbossas7/filters// y en la propiedad //pu.name.prefix//, sustituimos el valor //_miaplicacion_// por el nombre de la aplicación (aparece dos veces en dicha propiedad).
* Editamos el fichero //components.properties// de la carpeta //src/main/resources//. Modificando la propiedad //puName// quedando de la siguiente manera: //puName=${pu.name.prefix}defaultPU//
* Movemos el fichero //weblogic.xml// de la carpeta //src/main/webapp/WEB-INF// a la carpeta //src/main/perfiles/weblogic/webapp/WEB-INF// (sino existe alguna carpeta en la ruta, se crea).
* Realizar modificaciones en el fichero POM del módulo.
=== Modificaciones en el fichero POM ===
Las modificaciones que tenemos que hacer en el fichero POM del módulo son:
* Borrar la dependencia con //artifactId// //oc4jclient//.
* Borrar la dependencia con //artifactId// //fundeweb-java-services-config//, si esta dentro de las dependencia generales. Si esta dentro de las dependencias del perfil //weblogic12//, no se borra.
* Buscamos dentro de //// el plugin con //// //maven-war-plugin//. Dentro de ////, las etiquetas //// que tengan //false// o no este definido //// (por defecto, toma valor false), se colocan antes de los //// que tengan //true//. De esta forma ya no es necesaria la definición de //// de ficheros filtrados que hay en la declaración de //// no filtrados. Si debemos dejar las exclusiones de los ficheros //WEB-INF/.pages.xml.spdia// y //WEB-INF/.faces-config.xml.jsfdia// (sino los tenemos, los añadimos). Veamos un ejemplo:
...
...
org.apache.maven.plugins
maven-war-plugin
false
src/main/webapp
WEB-INF/.pages.xml.spdia
WEB-INF/.faces-config.xml.jsfdia
false
src/main/web_resources
false
src/main/webapp
WEB-INF/web.xml
WEB-INF/pages.xml
index.html
login.page.xml
true
...
...
...
* Buscamos dentro de //// las etiquetas //// (no las que estén dentro del plugin // maven-war-plugin//), y las que tengan //false// o no este definido //// (por defecto, toma valor false), se colocan antes de los //// que tengan //true//. De esta forma ya no es necesaria la definición de //// de ficheros filtrados que hay en la declaración de //// no filtrados. Veamos un ejemplo:
...
...
src/main/filters/filtro-${entorno}.properties
src/main/resources
src/main/resources
components.properties
log4j.xml
true
...
* Añadimos en el //// del //// principal del POM filtrado el fichero //META-INF/persistence.xml//. Quedando como en el ejemplo siguiente:
...
src/main/resources
META-INF/persistence.xml
components.properties
log4j.xml
true
* Añadimos la siguiente extensión (sino esta ya incluida) con //artifactId// //maven-fundeweb-extension// al final de la etiqueta ////:
...
...
es.um.atica.fundeweb.maven.extensions
maven-fundeweb-extension
...
* Añadimos los siguientes perfiles (si existen los perfiles //weblogic12// y/o //jboss_as7//, se sobreescriben):
weblogic12
true
src/main/perfiles/weblogic
${weblogic.profile.folder}/filters/filtro-weblogic.properties
es.um.atica.fundeweb.maven.plugins
maven-fundeweb-build-helper-plugin
add-weblogic-webResources
generate-resources
add-webResource
${weblogic.profile.folder}/webapp
false
es.um.atica.fundeweb.weblogic
fundeweb-java-services-config
es.um.atica.fundeweb.weblogic
fundeweb-jersey
jboss_as7
src/main/perfiles/jbossas7
**/log4j.xml
**/log4j.xml
${jbossas.profile.folder}/filters/filtro-jbossas7.properties
${jbossas.profile.folder}/filters/filtro-jbossas7-${entorno}.properties
com.google.gwt
gwt-servlet
compile
es.um.atica.fundeweb.jboss-as
fundeweb-java-services-config
es.um.atica.fundeweb.jboss-as
fundeweb-jersey
org.jboss.seam.integration
jboss-seam-int-jbossas
runtime
com.oracle.weblogic.clients
wlthint3client
runtime
* Si teníamos la configuración especificada en la guía técnica [[fdw2.0:fundeweb2.0:gt:tareas-programadas#modulo_web|Tareas Programadas - Automatizar la copia del fichero weblogic-ejb-jar.xml]], eliminadla, ya se incluye en lo anterior. Solo tenéis que descomentar el //// con //// //weblogic12-cluster//.
De esta forma tenemos la configuración básica. Más información sobre filtros en [[fdw2.0:fundeweb2.0:gt:gt-jbossas7:gt-configurar-proyecto-para-jbossas7#aclaraciones|Aclaraciones - Filtrado]].
=== Modificaciones en el fichero persistence.xml ===
En el fichero //persistence.xml// tenemos que realizar dos modificaciones:
* Cambiar el valor de la propiedad //hibernate.transaction.jta.platform// por //${hibernate.transaction.jta.platform}//. El nuevo valor depende de los filtros de servidor.
Veamos un ejemplo de como quedaría:
org.hibernate.ejb.HibernatePersistence
jdbc/Clarasuma DataSource
===== Como desplegar la Aplicación en el JBoss AS 7 de Eclipse =====
Para poder desplegar en el servidor JBoss AS 7 de Eclipse, tenemos que tener actualizado el framework a la versión 2.0.13 para Win64 o 2.0.21 para Win32.
Una vez aplicado ese parche, tendremos disponible el servidor JBoss AS 7 dentro de Eclipse para poder desplegar la aplicación.
Como ya no tenemos las tareas ANT para desplegar, tenemos que indicar los perfiles que queremos activar a la hora de trabajar para JBoss AS. Tenemos que ir a cada módulo del proyecto (EAR, EJB, WEB) e indicar los perfiles.
Para seleccionar los perfiles para trabajar con JBoss AS, podemos hacerlo seleccionando varios módulos a las vez o módulos individualmente.
==== Selección de Varios Módulos ====
Para seleccionar los perfiles de varios módulos a la vez, tenemos que seleccionar los módulos y pulsar el botón derecho del ratón y seleccionar //Maven --> Select Maven Profiles...// (el //shortcut// es //Ctrl// + //Alt// + //P//). Con los botones //Move Up// y //Move Down//, podemos ordenar los perfiles, seleccionando uno o varios.
{{ fdw:fundeweb:gt:gt-jbossas7:seleccion-perfiles-i.jpg | Selección de Perfiles para JBoss As - I }}
==== Selección Individual de Módulo ====
Veamos un ejemplo con el módulo //EAR// (para el resto de módulo, se utiliza el mismo procedimiento), tenemos que seleccionar un módulo, pulsar el botón derecho del ratón y seleccionar //Maven --> Select Maven Profiles...// (el //shortcut// es //Ctrl// + //Alt// + //P//).
{{ fdw:fundeweb:gt:gt-jbossas7:seleccion-perfiles-ii.jpg | Selección de Perfiles para JBoss As - II }}
En la ventana que aparece seleccionamos los perfiles //jdk7//, //local// y //jboss-as7//, el resto de perfiles se desmarca (a no ser que quieras especificar el perfil de un //cliente//). Con los botones //Move Up// y //Move Down//, podemos ordenar los perfiles, seleccionando uno o varios.
{{ fdw:fundeweb:gt:gt-jbossas7:seleccion-perfiles-iii.jpg | Selección de Perfiles para JBoss As - III }}
En la imagen se selecciona dos veces el perfil //jboss-as7//, uno que viene heredado por el //parent// y otro definido en el propio módulo que es el que hay que marcar.
En la parte superior de la ventana, aparece el orden en que se aplican en Maven los perfiles, si tenéis definidas una misma variable en varios ficheros de filtro (que se utiliza dependiendo del perfil utilizado), se aplicará el valor del fichero de filtro del último perfil de esta lista.
{{ fdw:fundeweb:gt:gt-jbossas7:seleccion-perfiles-iv.jpg | Selección de Perfiles para JBoss As - IV }}
==== Ordenación de los Perfiles Seleccionados en Eclipse ====
El orden general de los perfiles en //FundeWeb// es el siguiente: perfil del JDK, perfil del entorno, perfil del servidor, perfil del cliente y cluster (este ultimo no es necesario en entorno local y lo calcula directamente la tarea ANT).
Si tenéis definidas una misma variable en varios ficheros de filtro (que se utiliza dependiendo del perfil utilizado), se aplicará el valor del fichero de filtro del último perfil de esta lista.
Además de en la ventana de dialogo de selección de perfiles, podemos ordenar los perfiles desde otro punto, en la ventana de preferencias del proyecto. Para entrar, tenemos que seleccionar un módulo, pulsar el botón derecho del ratón y seleccionar //Properties// (la //shortcut// es //Alt// + //Entrar// (o //Intro// o //Enter//).
{{ fdw:fundeweb:gt:gt-jbossas7:seleccion-perfiles-v.jpg | Selección de Perfiles para JBoss As - V }}
En la ventana que aparece, en el árbol de la parte derecha, seleccionamos //Maven//, y en la parte izquierda nos aparecen los perfiles, en un campo de entrada (Es una lista separada por comas), que podemos editar.
{{ fdw:fundeweb:gt:gt-jbossas7:seleccion-perfiles-vi.jpg | Selección de Perfiles para JBoss As - VI }}
La duplicidad de perfiles, no es necesaria, con seleccionar una vez el perfil //jboss-as7// es suficiente.
==== Configuración de los Perfiles en las Tareas ANT ====
En el fichero //build.properties// especificaremos los perfiles a utilizar para realizar empaquetados para determinadas configuraciones. Estas propiedades las especificaremos al principio del fichero. Veamos un ejemplo:
# Configuracion de los perfiles de empaquetado
jdk=jdk7
environment=preproduccion
target.server=weblogic12
cliente=umu
...
La propiedades son:
* //jdk//: para especificar el JDK a utilizar, tenemos disponibles los perfiles //jdk6// y //jdk7//. Por defecto, el valor el perfil utilizado es //jdk7//.
* //environment//: el entorno en el que va a desplegarse el empaquetado de la aplicación. Tenemos disponibles los siguientes entornos: //local//, //desarrollo//, //preproduccion// y //produccion//. El valor por defecto es //local//.
* //target.server//: servidor donde se va a desplegar el empaquetado de la aplicación. Tenemos disponibles los servidores: //weblogic12// y //jboss_as7//. Por defecto, se utiliza el servidor //weblogic12//.
* //cliente//: cliente al que va dirigido la aplicación. Por defecto, es la propia Universidad de Murcia. Solemos especificarlo con el identificador //umu//.
Para asegurarnos que esta configuración va a funcionar correctament, tenemos que abrir el fichero //common.build.xml// y buscar la tarea //maven.profile// que debe tener la siguiente configuración:
...
...
Por ahora, el perfil de //cluster// solo se obtiene cuando el servidor es //weblogic12// y el cliente es //umu//. Si se necesita para otra configuración, tiene que añadirse en esta tarea.
==== Crear la Fuente de Datos en JBoss AS ====
Antes de desplegar el archivo //EAR//, tenemos que configurar la fuente de datos, y podemos crear fuentes de datos NO-XA y fuentes XA.
=== Fuentes de Datos NO-XA ===
Para crear una fuente NO-XA, editamos el fichero //standalone.xml// de la carpeta //standalone/configuration// y buscamos el elemento ////. Dentro crearemos la fuente de datos con los siguientes datos:
CONNECTION_URL
oracle
USUARIO_BBDD
PWD_USUARIO_BBDD
true
false
donde:
* //DATASOURCE_NAME//: es el nombre interno de la fuente de datos (no admite espacions en blanco). Ejemplo: PortafirmasDataSource
* //JNDI_NAME//: es la ruta JNDI, debe de empezar por //java:///. Ejemplo: java:/jdbc/Portafirmas DataSource
* //CONNECTION_URL//: la URL de conexión a la BBDD, del tipo: jdbc:oracle:thin:@isis.atica.um.es:1522:ISIS
* //USUARIO_BBDD//: el usuario de conexión a la BBDD. os recomendamos utilizar el usuario //JV_//, y que vaya en mayúsculas.
* //PWD_USUARIO_BBDD//: la contraseña del usuario de conexión a la BBDD, y que vaya en mayúsculas.
=== Fuentes de Datos XA ===
Para crear una fuente XA, editamos el fichero //standalone.xml// de la carpeta //standalone/configuration// y buscamos el elemento ////. Dentro crearemos la fuente de datos con los siguientes datos:
CONNECTION_URL
oracleXA
USUARIO_BBDD
PWD_USUARIO_BBDD
USUARIO_BBDD
PWD_USUARIO_BBDD
false
true
false
donde:
* //DATASOURCE_NAME//: es el nombre interno de la fuente de datos (no admite espacions en blanco). Ejemplo: PortafirmasDataSourceXA
* //JNDI_NAME//: es la ruta JNDI, debe de empezar por //java:///. Ejemplo: java:/jdbc/Portafirmas DataSource
* //CONNECTION_URL//: la URL de conexión a la BBDD, del tipo: jdbc:oracle:thin:@isis.atica.um.es:1522:ISIS
* //USUARIO_BBDD//: el usuario de conexión a la BBDD. os recomendamos utilizar el usuario //JV_//, y que vaya en mayúsculas.
* //PWD_USUARIO_BBDD//: la contraseña del usuario de conexión a la BBDD, y que vaya en mayúsculas.
También es recomendable para que la recuperación XA funcione correctamente, realizar las siguientes operaciones:
GRANT SELECT ON sys.dba_pending_transactions TO user;
GRANT SELECT ON sys.pending_trans$ TO user;
GRANT SELECT ON sys.dba_2pc_pending TO user;
GRANT EXECUTE ON sys.dbms_xa TO user; (If using Oracle 10g R2 (patched) or Oracle 11g)
OR
GRANT EXECUTE ON sys.dbms_system TO user; (If using an unpatched Oracle version prior to 11g)
==== Despliegue en el Sevidor JBoss As ====
Para poder desplegar el proyecto en el servidor JBoss AS, utilizamos el mismo proceso que para desplegar en el servidor Weblogic, seleccionamos el módulo //EAR//, pulsamos el botón derecho del ratón y seleccionamos //Run as --> Run on Server//.
{{ fdw:fundeweb:gt:gt-jbossas7:desplegar-jbossas.jpg | Desplegar en JBoss As }}
Para poder desplegar en modo depuración el proyecto en el servidor JBoss AS, utilizamos el mismo proceso que para desplegar en el servidor Weblogic, seleccionamos el módulo //EAR//, pulsamos el botón derecho del ratón y seleccionamos //Debug as --> Debug on Server//.
{{ fdw:fundeweb:gt:gt-jbossas7:desplegar-jbossas-debug.jpg | Desplegar en Modo Depuración en JBoss As }}
==== Guías Técnicas Relacionadas ====
* [[:fdw2.0:fundeweb2.0:gt:customize_application|Personalización de Aplicaciones para Otros Clientes]]
==== Aclaraciones ====
=== Filtrado ===
Los valores definidos en los ficheros de filtrado, se aplican a todos los ficheros de los //'s// que indican que se filtran (//// con valor a //true//), no solo los especificados en un ////. El ////, solo añade nuevos ficheros a los ya definidos.
Los ficheros de filtrado se aplican en el siguiente orden:
* Los primeros en aplicarse, son los definidos en /filter>// dentro de la etiqueta /build>// general del POM (no definida en /profiles>//). Estos a su vez, se ordenan según el orden de definición del /filter>//.
* Después, según el orden de definición de los perfiles al lanzar las tareas //Maven// o al especificarlo en la configuración de //Maven// para //Eclipse//. El orden general en //FundeWeb// es el siguiente: perfil del JDK, perfil del entorno, perfil del servidor, perfil del cliente y cluster (este ultimo no es necesario en entorno local y lo calcula directamente la tarea ANT).
* El orden dentro de un perfil, se establece según el orden de definición de los /filter>//.
== Ficheros de Filtrado definidos en un Perfil ==
Como ejemplo, en los perfiles de //weblogic// y //jbossas7// tenemos definido un fichero de propiedades general del servidor (//filtro-.properties//). Además, podemos definir ficheros de propiedades específicos para el entorno (que en principio están comentados: //filtro--${entorno}.properties//), en la configuración siempre tiene que ir detrás del fichero de propiedades general del servidor.
Si descomentamos algún //filtro--${entorno}.properties//, como trabajamos con 4 entornos, tenemos que tener un fichero por entorno, veamos un ejemplo para weblogic: //filtro-weblogic-local.properties//, //filtro-weblogic-desarrollo.properties//, //filtro-weblogic-preproduccion.properties// y //filtro-weblogic-produccion.properties//.
Los ficheros tienen que existir, aunque estén vacíos. Si falta alguno de estos ficheros, entonces la tarea Maven fallara para dicho entorno.
El orden de aplicación de los ficheros de filtrado (los definidos en etiquetas /filter>//, se establece según el orden de definición, y permiten sobrescribir el valor de propiedades, tomando como valor, la última definición encontrada para dicha propiedad, según el orden de defunción de los filtros.
==== Bibliografia ====
* [[https://docs.jboss.org/author/display/AS72/Documentation|Documentación de JBoss AS 7.2]]
* [[https://developer.jboss.org/wiki/DesignOfAS7Multi-JSFFeature|Design of WildFly Multi-JSF feature]]
* [[https://developer.jboss.org/wiki/StepsToAddAnyNewJSFImplementationOrVersionToWildFly|Steps to add any new JSF implementation or version to WildFly]]
* [[https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.4/html/Administration_and_Configuration_Guide/chap-Introduction.html|JBoss EAP 6.4 - Guía de Administración y Configuración]]
----
--- //[[juanmiguelbg@um.es|JUAN MIGUEL BERNAL GONZALEZ]] 2016/09/23 08:49//