Tabla de Contenidos

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

Integrar el Servidor JBoss AS 7 en FundeWeb

Para integrar JBoss AS en FundeWeb, tenemos que seguir los siguientes pasos:

Para navegadores Chromuin –> JBoss EAP 6.4

Integrar JBoss EAP 6.4 en FundeWeb - Añadir Servidor

Integrar JBoss EAP 6.4 en FundeWeb - Seleccionar tipo de servidor

Integrar JBoss EAP 6.4 en FundeWeb - Seleccionar runtime del servidor

Integrar JBoss EAP 6.4 en FundeWeb - Configurar el runtime del servidor

Ahora el servidor nos aparecerá en la pestaña Servers.

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 <parent> (esta tiene que tener como <artifactId> el valor parent) modificando el valor de la etiqueta hija <version> 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:

  1. Copiar el fichero jboss-deployment-structure.zip en la carpeta src\main\application\META-INF del módulo y descomprimirlo. Una vez descomprimido se puede eliminar.
  2. Editamos el fichero jboss-deployment-structure.xml y en el elemento <sub-deployment> con atributo name=“_miaplicacion_-web.war” sustituimos _miaplicacion_ por el nombre de nuestra aplicación.
  3. 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 <configuration> del plugin maven-ear-plugin. Realizamos las siguientes modificaciones:

	<profiles>
		<profile>
			<id>weblogic12</id>
 
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
 
			<properties>
				<maven-ear-plugin.packagingExcludes>
					**/jboss-deployment-structure.xml
				</maven-ear-plugin.packagingExcludes>
			</properties>
		</profile>
 
		<profile>
			<id>jboss_as7</id>
 
			<properties>
				<maven-ear-plugin.packagingExcludes>
					**/weblogic-application.xml,
				</maven-ear-plugin.packagingExcludes>
			</properties>
		</profile>
	</profiles>
 
</project>

Modificaciones en el Módulo WEB

Solo tenemos que realizar dos acciones:

Modificaciones en el fichero POM

Las modificaciones que tenemos que hacer en el fichero POM del módulo son:

<project>
	...
 
	<build>
		...
 
		<plugins>
            		<plugin>
		                <groupId>org.apache.maven.plugins</groupId>
		                <artifactId>maven-war-plugin</artifactId>
		                <configuration>
		                	<archive>
		                		<addMavenDescriptor>false</addMavenDescriptor>
		                	</archive>
 
					<webResources>
			                        <resource>
			                            <directory>src/main/webapp</directory>
			                            <excludes>
			                                <exclude>WEB-INF/.pages.xml.spdia</exclude>
			                                <exclude>WEB-INF/.faces-config.xml.jsfdia</exclude>
			                            </excludes>
			                            <filtering>false</filtering>
			                        </resource>
			                        <resource>
			                            <directory>src/main/web_resources</directory>
			                            <filtering>false</filtering>
			                        </resource>
			                        <resource>
			                            <directory>src/main/webapp</directory>
			                            <includes>
			                                <include>WEB-INF/web.xml</include>
			                                <include>WEB-INF/pages.xml</include>
			                                <include>index.html</include>
			                                <include>login.page.xml</include>
			                            </includes>
			                            <filtering>true</filtering>
			                        </resource>
 					</webResources>
		                </configuration>
			</plugin>
 
			...
 
		</plugins>
 
		...
 
	</build>
 
	...
 
</project>
<project>
 
	...
 
	<build>
 
		...
 
		<filters>
			<filter>src/main/filters/filtro-${entorno}.properties</filter>
		</filters>
 
		<resources>
			<resource>
				<directory>src/main/resources</directory>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>components.properties</include>										
					<include>log4j.xml</include>
				</includes>
				<filtering>true</filtering>
			</resource>
		</resources>
 
	</build>
 
	...
 
</project>
		<resources>
 
			...
 
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>META-INF/persistence.xml</include>
					<include>components.properties</include>
					<include>log4j.xml</include>
				</includes>
				<filtering>true</filtering>
			</resource>
		</resources>
<project>
 
	...
 
	<build>
		...
 
		<extensions>
			<extension>
				<groupId>es.um.atica.fundeweb.maven.extensions</groupId>
				<artifactId>maven-fundeweb-extension</artifactId>
			</extension>
		</extensions>
	</build>
 
	...
 
</project>
	<profiles>
		<profile>
			<id>weblogic12</id>
 
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
 
			<properties>
				<weblogic.profile.folder>src/main/perfiles/weblogic</weblogic.profile.folder>
			</properties>
 
			<build>
				<filters>
					<filter>${weblogic.profile.folder}/filters/filtro-weblogic.properties</filter>
<!-- 					<filter>${weblogic.profile.folder}/filters/filtro-weblogic-${entorno}.properties</filter> -->
				</filters>
 
				<plugins>
					<plugin>
						<groupId>es.um.atica.fundeweb.maven.plugins</groupId>
						<artifactId>maven-fundeweb-build-helper-plugin</artifactId>
						<executions>
							<execution>
								<id>add-weblogic-webResources</id>
								<phase>generate-resources</phase>
								<goals>
									<goal>add-webResource</goal>
								</goals>
								<configuration>
									<webResources>
										<resource>
											<directory>${weblogic.profile.folder}/webapp</directory>
											<filtering>false</filtering>
										</resource>
									</webResources>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
 
			<dependencies>
				<dependency>
					<groupId>es.um.atica.fundeweb.weblogic</groupId>
					<artifactId>fundeweb-java-services-config</artifactId>
				</dependency>
 
				<dependency>
					<groupId>es.um.atica.fundeweb.weblogic</groupId>
					<artifactId>fundeweb-jersey</artifactId>
				</dependency>
			</dependencies>
 
		</profile>
 
		<profile>
			<id>jboss_as7</id>
 
 
			<properties>
				<jbossas.profile.folder>src/main/perfiles/jbossas7</jbossas.profile.folder>
				<maven-war-plugin.server.warSourceExcludes>**/log4j.xml</maven-war-plugin.server.warSourceExcludes>
				<maven-war-plugin.server.packagingExcludes>**/log4j.xml</maven-war-plugin.server.packagingExcludes>
			</properties>
 
			<build>
				<filters>
					<filter>${jbossas.profile.folder}/filters/filtro-jbossas7.properties</filter>
 					<filter>${jbossas.profile.folder}/filters/filtro-jbossas7-${entorno}.properties</filter>
				</filters>
			</build>
 
			<dependencies>				
				<dependency>
					<groupId>com.google.gwt</groupId>
					<artifactId>gwt-servlet</artifactId>
					<scope>compile</scope>
				</dependency>
 
				<dependency>
					<groupId>es.um.atica.fundeweb.jboss-as</groupId>
					<artifactId>fundeweb-java-services-config</artifactId>
				</dependency>
 
				<dependency>
					<groupId>es.um.atica.fundeweb.jboss-as</groupId>
					<artifactId>fundeweb-jersey</artifactId>
				</dependency>
 
				<dependency>
					<groupId>org.jboss.seam.integration</groupId>
					<artifactId>jboss-seam-int-jbossas</artifactId>
					<scope>runtime</scope>
				</dependency>
 
				<dependency>
					<groupId>com.oracle.weblogic.clients</groupId>
					<artifactId>wlthint3client</artifactId>
					<scope>runtime</scope>
				</dependency>
			</dependencies>
		</profile>
 
		<!--profile>
			<id>weblogic12-cluster</id>
 
			<properties>
				<weblogic-cluster.profile.folder>src/main/perfiles/weblogic-cluster</weblogic-cluster.profile.folder>
			</properties>
 
			<build>
				<plugins>
					<plugin>
						<groupId>es.um.atica.fundeweb.maven.plugins</groupId>
						<artifactId>maven-fundeweb-build-helper-plugin</artifactId>
						<executions>
							<execution>
								<id>add-weblogic-cluster-webResources</id>
								<phase>generate-resources</phase>
								<goals>
									<goal>add-webResource</goal>
								</goals>
								<configuration>
									<webResources>
										<resource>
											<directory>${weblogic.profile.folder}/webapp</directory>
											<filtering>false</filtering>
										</resource>
									</webResources>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile-->
 
	</profiles>

De esta forma tenemos la configuración básica. Más información sobre filtros en Aclaraciones - Filtrado.

Modificaciones en el fichero persistence.xml

En el fichero persistence.xml tenemos que realizar dos modificaciones:

Veamos un ejemplo de como quedaría:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 
	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">
 
	<persistence-unit name="defaultPU" transaction-type="JTA">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>jdbc/Clarasuma DataSource</jta-data-source>
		<properties>
			<property name="hibernate.hbm2ddl.auto" value="validate"/>
         	<property name="hibernate.show_sql" value="false"/>
         	<property name="hibernate.format_sql" value="true"/>
 
			<!-- Añadir el esquema por defecto de la Base de Datos -->
			<property name="hibernate.default_schema" value="Clarasuma"/>
 
			<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> 
 
			<!-- JTA Platform --> 
			<property name="hibernate.transaction.jta.platform"
				value="${hibernate.transaction.jta.platform}"/>
 
<!--		
			hqlLiteral=SQL_LITERAL or hqlFunction=SQLFUNC
 
			Map from tokens in Hibernate queries to SQL tokens, such as function or literal names.
 
			https://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch03.html#configuration-optional-querysubstitution
 
			<property name="hibernate.query.substitutions" value="true=1, false=0, toLowerCase=LOWERCASE"/>
-->
<!--	Acceder a los objetos de BBDD por los sininimos publicos
 
			<property name="hibernate.synonyms" value="true"/>
-->
 
		</properties>
	</persistence-unit>
 
</persistence>

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.

 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).

 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.

 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.

 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).

 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.

 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:

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:

<?xml version="1.0" encoding="UTF-8"?>
<project name="project-common"
		 default=""
         basedir="."
         xmlns="antlib:org.apache.tools.ant"
         xmlns:antelope="antlib:ise.antelope.tasks"
         xmlns:artifact="antlib:org.apache.maven.artifact.ant">
 
        ...
 
	<target name="maven.profile">
	    <antelope:if name="jdk" exists="false">
		<property name="jdk" value="jdk7"/>
	    </antelope:if>
	    <antelope:if name="environment" exists="false">
		<property name="environment" value="local"/>
	    </antelope:if>
	    <antelope:if name="target.server" exists="false">
		<property name="target.server" value="weblogic12"/>
	    </antelope:if>
	    <antelope:if name="cliente" exists="false">
		<property name="cliente" value="umu"/>
	    </antelope:if>
 
	    <!-- Calculando el perfil para el cluster -->
	    <property name="cluster" value=""/>
	    <antelope:if>
			<bool>
	        	    <and>
	        	    	<equals arg1="${cliente}" arg2="umu"/>
	        	        <equals arg1="${target.server}" arg2="weblogic12"/>
	        	        <or>
	        	            <equals arg1="${environment}" arg2="preproduccion"/>
	        	            <equals arg1="${environment}" arg2="produccion"/>
	        	        </or>
	        	    </and>
	        	</bool>
	        <antelope:unset name="cluster"/>
	        <property name="cluster" value=",${target.server}-cluster"/>
	    </antelope:if>
 
	    <property name="profile" value="-P ${jdk},${environment},${target.server},${cliente}${cluster}"/>
	    <echo message="Establecidos los perfiles de empaquetado: ${profile}" />
	</target>
 
        ...
 
</project>

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 <datasources>. Dentro crearemos la fuente de datos con los siguientes datos:

                <datasource jta="true" jndi-name="JNDI_NAME" pool-name="DATASOURCE_NAME" enabled="true" use-java-context="false">
                    <connection-url>CONNECTION_URL</connection-url>
                    <driver>oracle</driver>
                    <security>
                        <user-name>USUARIO_BBDD</user-name>
                        <password>PWD_USUARIO_BBDD</password>
                    </security>
                    <validation>
			<validate-on-match>true</validate-on-match>
			<background-validation>false</background-validation>
			<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"></valid-connection-checker>
			<stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"></stale-connection-checker>
			<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"></exception-sorter>
                    </validation>
                </datasource>

donde:

Fuentes de Datos XA

Para crear una fuente XA, editamos el fichero standalone.xml de la carpeta standalone/configuration y buscamos el elemento <datasources>. Dentro crearemos la fuente de datos con los siguientes datos:

                <xa-datasource jndi-name="JNDI_NAME" pool-name="DATASOURCE_NAME" enabled="true" use-java-context="false">
                    <xa-datasource-property name="URL">CONNECTION_URL</xa-datasource-property>
                    <driver>oracleXA</driver>
                    <security>
                        <user-name>USUARIO_BBDD</user-name>
                        <password>PWD_USUARIO_BBDD</password>
                    </security>
                    <recovery>
                        <recover-credential>
                            <user-name>USUARIO_BBDD</user-name>
                            <password>PWD_USUARIO_BBDD</password>
                        </recover-credential>
                    </recovery>
                    <xa-pool>
                        <is-same-rm-override>false</is-same-rm-override>
                        <no-tx-separate-pools />
                    </xa-pool>
                    <validation>
                        <validate-on-match>true</validate-on-match>
                        <background-validation>false</background-validation>
                        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"></valid-connection-checker>
                        <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"></stale-connection-checker>
                        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"></exception-sorter>
                    </validation>
                </xa-datasource>

donde:

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.

 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.

 Desplegar en Modo Depuración en JBoss As

Guías Técnicas Relacionadas

Aclaraciones

Filtrado

Los valores definidos en los ficheros de filtrado, se aplican a todos los ficheros de los <resource>'s que indican que se filtran (<filtering> con valor a true), no solo los especificados en un <profile>. El <profile>, solo añade nuevos ficheros a los ya definidos.

Los ficheros de filtrado se aplican en el siguiente orden:

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-<nombre_servidor>.properties). Además, podemos definir ficheros de propiedades específicos para el entorno (que en principio están comentados: filtro-<nombre_servidor>-${entorno}.properties), en la configuración siempre tiene que ir detrás del fichero de propiedades general del servidor.

Si descomentamos algún filtro-<nombre_servidor>-${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


JUAN MIGUEL BERNAL GONZALEZ 2016/09/23 08:49