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

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

  • Lo primero es descargar el servidor 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 –> 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.

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.

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.

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.

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

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:

  • Añadimos la etiqueta <finalName>_nombre_aplicacion_</finalName> antes de la etiqueta <displayName>. Cambiamos _nombre_aplicacion_ con el mismo valor que tiene la etiqueta <displayName> (que suele ser el mismo valor que contiene la etiqueta <artifactid> del fichero POM principal del proyecto).
  • Modificamos la etiqueta <uri>, hija de la etiqueta <webModule>, añadiendole al contenido el postfijo .war.
  • Modificamos la etiqueta <unpack> que esta en la etiqueta <ejbModule> y la dejamos con el calor: ${ejb.unpack}
  • * Modificamos la etiqueta <unpack> que esta en la etiqueta <webModule> y la dejamos con el calor: ${web.unpack}
  • Antes del cierre de la etiqueta <project> añadimos lo siguiente:
	<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:

  • Descargar fichero 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 <build> el plugin con <artifactId> maven-war-plugin. Dentro de <webResources>, las etiquetas <resource> que tengan <filtering>false</filtering> o no este definido <filtering> (por defecto, toma valor false), se colocan antes de los <resource> que tengan <filtering>true</filtering>. De esta forma ya no es necesaria la definición de <exclude> de ficheros filtrados que hay en la declaración de <resource> 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:
<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>
  • Buscamos dentro de <build> las etiquetas <resource> (no las que estén dentro del plugin <artifactId> maven-war-plugin), y las que tengan <filtering>false</filtering> o no este definido <filtering> (por defecto, toma valor false), se colocan antes de los <resource> que tengan <filtering>true</filtering>. De esta forma ya no es necesaria la definición de <exclude> de ficheros filtrados que hay en la declaración de <resource> no filtrados. Veamos un ejemplo:
<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>
  • Añadimos en el <resource> del <build> principal del POM filtrado el fichero META-INF/persistence.xml. Quedando como en el ejemplo siguiente:
		<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>
  • Añadimos la siguiente extensión (sino esta ya incluida) con artifactId maven-fundeweb-extension al final de la etiqueta <build>:
<project>
 
	...
 
	<build>
		...
 
		<extensions>
			<extension>
				<groupId>es.um.atica.fundeweb.maven.extensions</groupId>
				<artifactId>maven-fundeweb-extension</artifactId>
			</extension>
		</extensions>
	</build>
 
	...
 
</project>
  • Añadimos los siguientes perfiles (si existen los perfiles weblogic12 y/o jboss_as7, se sobreescriben):
	<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:

  • 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:

<?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>

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:

  • 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:

<?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:

  • 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 <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:

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

 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:

  • 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-<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

  • fdw2.0/fundeweb2.0/gt/gt-jbossas7/gt-configurar-proyecto-para-jbossas7.txt
  • Última modificación: 21/04/2021 12:07
  • por JUAN MIGUEL BERNAL GONZALEZ