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

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:

  • Vamos a añadir nuevas carpetas de código fuente y recursos para el módulo EJB.
  • Vamos a añadir nuevas carpetas de recursos y webapp para el módulo WEB.

Módulo EJB

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

  • Tenemos la carpeta umu en la ruta src/main/perfiles.
  • Tenemos las carpetas filters, java y resources dentro de la carpeta umu.
  • Tenemos el fichero filtro-umu.properties dentro de la carpeta filters.
  • En el fichero POM del módulo EJB, añadimos el siguiente perfil en la etiqueta <profiles>:
<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:

  • El perfil se activa (<activation>) por defecto si no se especifican estos al lanzar las tareas Maven.
  • La propiedad umu.profile.folder contiene la ruta relativa a la carpeta del perfil, a partir del inicio del módulo.
  • Añadimos los filtros (<filters>) que necesitemos. En principio esta disponible el fichero general del perfil filtro-umu.properties. Pero podemos definir diferentes tipos de filtros (que están comentados, descomentar para poder utilizar el deseado):
    • Relacionados con el entorno de ejecución: filtro-umu-${entorno}.properties
    • Relacionados con el servidor: filtro-umu-${servidor}.properties
    • Relacionados con el entorno de ejecución y el servidor: filtro-umu-${servidor}-${entorno}.properties

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

  • Para añadir nuevas carpetas de código fuente y recursos, tenemos que utilizar el plugin build-helper-maven-plugin. Como vemos, tiene dos elementos <execution>:
    • Uno para añadir el código fuente con <id> add-umu-sources (para cada cliente generamos el id con la plantilla add-_cliente_-sources, donde _cliente_ se sustituye por el <id> del perfil).
    • Otro para añadir la carpeta de recursos con <id> add-umu-resources (para cada cliente generamos el id con la plantilla add-_cliente_-resources, donde _cliente_ se sustituye por el <id> del perfil).

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:

  • Tenemos la carpeta umu en la ruta src/main/perfiles.
  • Tenemos las carpetas filters, resources y webapp dentro de la carpeta umu.
  • Tenemos el fichero filtro-umu.properties dentro de la carpeta filters.
  • En el fichero POM del módulo WEB, añadimos el siguiente perfil en la etiqueta <profiles>:
<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:

  • El perfil se activa (<activation>) por defecto si no se especifican estos al lanzar las tareas Maven.
  • La propiedad umu.profile.folder contiene la ruta relativa a la carpeta del perfil, a partir del inicio del módulo.
  • Añadimos los filtros (<filters>) que necesitemos. En principio esta disponible el fichero general del perfil filtro-umu.properties. Pero podemos definir diferentes tipos de filtros (que están comentados, descomentar para poder utilizar el deseado):
    • Relacionados con el entorno de ejecución: filtro-umu-${entorno}.properties
    • Relacionados con el servidor: filtro-umu-${servidor}.properties
    • Relacionados con el entorno de ejecución y el servidor: filtro-umu-${servidor}-${entorno}.properties

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

  • Para añadir nuevas carpetas de recursos tenemos que utilizar el plugin build-helper-maven-plugin. Como vemos, tiene definido un elemento <execution> para añadir la carpeta de recursos con <id> add-umu-resources (para cada cliente generamos el id con la plantilla add-_cliente_-resources, donde _cliente_ se sustituye por el <id> del perfil).
  • Para añadir nuevas carpetas webapp, tenemos que utilizar el plugin maven-fundeweb-build-helper-plugin. Como vemos, tiene un elemento <execution> para añadir el código fuente con <id> add-umu-webResources (para cada cliente generamos el id con la plantilla add-_cliente_-webResources, donde _cliente_ se sustituye por el <id> del perfil).

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:

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


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

  • fdw2.0/fundeweb2.0/gt/customize_application.txt
  • Última modificación: 21/04/2021 12:03
  • por JUAN MIGUEL BERNAL GONZALEZ