Tabla de Contenidos

Personalización de Aplicaciones para Otros Clientes - Guía General

Para poder personalizar una aplicación para diferentes clientes, entorno y servidor, vamos a utilizar los perfiles (<profiles>) de Maven. Como ya se empezó a indicar en la guía técnica la guía técnica Configurar el Proyecto para JBoss AS 7 para FundeWeb 2.0 (Configurar el Proyecto para JBoss AS 7 para FundeWeb 1.5).

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

Con los perfiles, podemos añadir nuevos ficheros para filtrar (<filter>), directorios de código fuente, recursos (<resources>) y directorios con contenido para el módulo WEB (<webResource>).

Añadiendo un Perfil para un Cliente

Vamos a ver este punto, utilizando como ejemplo la aplicación Portafirmas (actualmente es FundeWeb 1.5, para aplicaciones FundeWeb 2.0, todo estaría en el módulo WEB), donde:

Módulo EJB

Vamos a añadir la definición del perfil umu en el módulo EJB:

<project>
 
	...
 
 
	<profiles>
 
		...
 
		<profile>
			<id>umu</id>
 
			<activation>
				<!-- Activado por defecto cuando no se especifican perfiles -->
				<activeByDefault>true</activeByDefault>
			</activation>
 
			<properties>
				<umu.profile.folder>src/main/perfiles/umu</umu.profile.folder>
			</properties>
 
			<build>
				<filters>
					<filter>${umu.profile.folder}/filters/filtro-umu.properties</filter>
<!--					<filter>${umu.profile.folder}/filters/filtro-umu-${entorno}.properties</filter> -->
<!-- 					<filter>${umu.profile.folder}/filters/filtro-umu-${servidor}.properties</filter> -->
<!--					<filter>${umu.profile.folder}/filters/filtro-umu-${servidor}-${entorno}.properties</filter> -->
				</filters>
 
				<plugins>
					<plugin>
		                		<groupId>org.codehaus.mojo</groupId>
				                <artifactId>build-helper-maven-plugin</artifactId>
				                <executions>
		                		    <execution>
				                        <id>add-umu-sources</id>
				                        <phase>generate-sources</phase>
		                		        <goals>
				                            <goal>add-source</goal>
				                        </goals>
		                		        <configuration>
				                            <sources>
				                                <source>${umu.profile.folder}/java</source>
				                            </sources>
				                        </configuration>
				                    </execution>
				                    <execution>
							<id>add-umu-resources</id>
							<phase>generate-resources</phase>
							<goals>
								<goal>add-resource</goal>
							</goals>
							<configuration>
				                            <resources>
				                                <resource>
				                                    <directory>${umu.profile.folder}/resources</directory>
				                                    <includes>
				                                	<include>config/servicios/servicios.properties</include>
				                                    </includes>
				                                    <filtering>true</filtering>
				                                </resource>
				                            </resources>
							</configuration>
				                    </execution>
				                </executions>
					</plugin>
				</plugins>
			</build>
		</profile>
 
		...
 
	</profiles>
 
</project>

Vamos a describir el perfil:

Más información sobre filtros en Aclaraciones - Filtrado.

No es obligatorio crear las carpetas de código fuente y recursos, solo hay que crearlas cuando sean necesarias, pero si se especifican en el perfil, hay que crearlas.

Dentro de las carpetas de código fuente, podemos tener las clases Java necesarias para personalizar la aplicación con respecto al cliente.

Dentro de las carpetas de recursos, podemos tener, mensajes y ficheros de configuración, necesarios para personalizar la aplicación con respecto al cliente.

Módulo WEB

Vamos a añadir la definición del perfil umu en el módulo WEB:

<project>
 
	...
 
 
	<profiles>
 
		...
 
		<profile>
			<id>umu</id>
 
			<activation>
				<!-- Activado por defecto cuando no se especifican perfiles -->
				<activeByDefault>true</activeByDefault>
			</activation>
 
			<properties>
				<umu.profile.folder>src/main/perfiles/umu</umu.profile.folder>
			</properties>
 
			<build>
				<filters>
					<filter>${umu.profile.folder}/filters/filtro-umu.properties</filter>
<!-- 					<filter>${umu.profile.folder}/filters/filtro-umu-${entorno}.properties</filter> -->
<!--					<filter>${umu.profile.folder}/filters/filtro-umu-${servidor}.properties</filter> -->
<!-- 					<filter>${umu.profile.folder}/filters/filtro-umu-${servidor}-${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-umu-webResources</id>
								<phase>generate-resources</phase>
								<goals>
									<goal>add-webResource</goal>
								</goals>
								<configuration>
									<webResources>
										<resource>
											<directory>${umu.profile.folder}/webapp</directory>
											<filtering>false</filtering>
										</resource>
										<resource>
											<directory>${umu.profile.folder}/webapp</directory>
											<includes>
												<include>prueba-filtro.html</include>
											</includes>
											<filtering>true</filtering>
										</resource>
									</webResources>
								</configuration>
							</execution>
						</executions>
					</plugin>
					<plugin>
						<groupId>org.codehaus.mojo</groupId>
						<artifactId>build-helper-maven-plugin</artifactId>
						<executions>
							<execution>
								<id>add-umu-resource</id>
								<phase>generate-resources</phase>
								<goals>
									<goal>add-resource</goal>
								</goals>
								<configuration>
									<resources>
										<resource>
											<directory>${umu.profile.folder}/resources</directory>
										</resource>
									</resources>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
 
 
		...
 
	</profiles>
 
</project>

Vamos a describir el perfil:

Más información sobre filtros en Aclaraciones - Filtrado.

No es obligatorio crear las carpetas de recursos y webapp, solo hay que crearlas cuando sean necesarias, pero si se especifican en el perfil, hay que crearlas.

Dentro de las carpetas de recursos, podemos tener, mensajes y ficheros de configuración, necesarios para personalizar la aplicación con respecto al cliente.

Dentro de las carpetas webapp, podemos tener los ficheros Javascript, CSS, imagenes, etc., necesarios para personalizar la aplicación con respecto al cliente.

Recordaros que para aplicaciones FundeWeb 2.0, toda la configuración estaría dentro de un único perfil en el módulo WEB.

También es muy util recordaros como se pueden Filtrar el Código de Clases JAVA Maven.

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.


JUAN MIGUEL BERNAL GONZALEZ 2016/11/08 13:10