====== Filtrar el Código de Clases JAVA ======
Para filtrar el código de clases JAVA se puede utilizar el plugin [[http://mojo.codehaus.org/templating-maven-plugin/|Templating Maven Plugin]] que en su versión //1.0-alpha-4-SNAPSHOT// tiene integración con [[http://eclipse.org/m2e/|M2E]], el plugin de integración de Maven con Eclipse.
==== Configuración de Maven ====
* Para aplicaciones FundeWeb 2.x, tendremos que utilizar el //parent// versión //2.0.7//.
* Para aplicaciones FundeWeb 1.x migradas a Weblogic el //seam-parent// versión //1.5.6//.
Para las aplicaciones FundeWeb 2.x con un //parent// con versión anterior a la //2.0.5// tendremos que actualizar el parent lo que conlleva la actualización a Primefaces 5.1.
Si no se quiere actualizar a Primefaces 5.1, se puede añadir en el POM principal del proyecto lo siguiente:
1.0.0
org.codehaus.mojo
templating-maven-plugin
${templating-maven-plugin.version}
Ahora tenemos que añadir el plugin en el POM del modulo que contiene el código fuente de la clase JAVA que queremos filtrar, dentro de la etiqueta //// (lo mejor se dejarlo justo encima de la etiqueta de cierre ////).
org.codehaus.mojo
templating-maven-plugin
filter-src
filter-sources
Ahora tenemos que crear la carpeta //java-templates// dentro de la carpeta //src/main// del módulo. Veamos un ejemplo:\\
\\
{{ :fdw2.0:fundeweb2.0:gt:templating-maven-plugin-i.jpg | Templating Maven Plugin - Crear la Carpeta java-templates }}
Una vez creada esta carpeta, automáticamente se creara la carpeta de código fuente //target/generated-sources/java-templates// en el módulo, donde aparece la clase filtrada con los valores indicados en los ficheros de filtro del módulo (que estan en la carpeta //src/main/filters//).\\
\\
{{ :fdw2.0:fundeweb2.0:gt:templating-maven-plugin-ii.jpg | Templating Maven Plugin - Carpeta target/generated-sources/java-templates }}
El código fuente lo podemos editar directamente desde la carpeta //src/main/java-templates//. Si tenemos la opción //Project --> Build Automatically// o cuando forcemos el //build// con //Crtl + B//, el código de la carpeta //target/generated-sources/java-templates// se actualiza automaticamente.
==== Modificación en el Código de la Clase JAVA ====
Para poder filtrar valores en el código de la clase JAVA, este tiene que estar entre los delimitadores //${}// o //@@//. Veamos un Ejemplo:
package com.intalio.bpms.workflow.ib4p_20051115;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceFeature;
import org.jboss.seam.log.Log;
import org.jboss.seam.log.Logging;
/**
* This class was generated by Apache CXF 2.2.12 Wed Feb 20 08:58:33 CET 2013
* Generated source version: 2.2.12
*
*/
@WebServiceClient(name = "completeTask",
wsdlLocation = "${bpms.server.url}/ode/processes/completeTask?wsdl",
targetNamespace = "http://www.intalio.com/bpms/workflow/ib4p_20051115")
public class CompleteTask extends Service {
public final static URL WSDL_LOCATION;
public final static QName SERVICE = new QName("http://www.intalio.com/bpms/workflow/ib4p_20051115", "completeTask");
public final static QName UIFWPort = new QName("http://www.intalio.com/bpms/workflow/ib4p_20051115", "UIFWPort");
private static Log LOG = Logging.getLog( CompleteTask.class );
static {
URL url = null;
try {
url = new URL("${bpms.server.url}/ode/processes/completeTask?wsdl");
} catch (MalformedURLException e) {
LOG.error("Can not initialize the default wsdl from [#0].", e, url);
}
WSDL_LOCATION = url;
}
public CompleteTask(URL wsdlLocation) {
super(wsdlLocation, SERVICE);
}
public CompleteTask(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
public CompleteTask() {
super(WSDL_LOCATION, SERVICE);
}
@WebEndpoint(name = "UIFWPort")
public CompleteTaskPortType getUIFWPort() {
return super.getPort(UIFWPort, CompleteTaskPortType.class);
}
@WebEndpoint(name = "UIFWPort")
public CompleteTaskPortType getUIFWPort(WebServiceFeature... features) {
return super.getPort(UIFWPort, CompleteTaskPortType.class, features);
}
}
Como se puede observar, dentro de la anotación [[https://docs.oracle.com/javaee/6/api/javax/xml/ws/WebServiceClient.html|@WebServiceClient]] tenemos la propiedad //wsdlLocation// con su valor filtrado con //${bpms.server.url}//. El resultado del filtrado lo podemos ver en el código generado dentro de la carpeta //target/generated-sources/java-templates//. Veamos el resultado:
package com.intalio.bpms.workflow.ib4p_20051115;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceFeature;
import org.jboss.seam.log.Log;
import org.jboss.seam.log.Logging;
/**
* This class was generated by Apache CXF 2.2.12 Wed Feb 20 08:58:33 CET 2013
* Generated source version: 2.2.12
*
*/
@WebServiceClient(name = "completeTask",
wsdlLocation = "http://mncs.atica.um.es:8080/ode/processes/completeTask?wsdl",
targetNamespace = "http://www.intalio.com/bpms/workflow/ib4p_20051115")
public class CompleteTask extends Service {
public final static URL WSDL_LOCATION;
public final static QName SERVICE = new QName("http://www.intalio.com/bpms/workflow/ib4p_20051115", "completeTask");
public final static QName UIFWPort = new QName("http://www.intalio.com/bpms/workflow/ib4p_20051115", "UIFWPort");
private static Log LOG = Logging.getLog( CompleteTask.class );
static {
URL url = null;
try {
url = new URL("http://mncs.atica.um.es:8080/ode/processes/completeTask?wsdl");
} catch (MalformedURLException e) {
LOG.error("Can not initialize the default wsdl from [#0].", e, url);
}
WSDL_LOCATION = url;
}
public CompleteTask(URL wsdlLocation) {
super(wsdlLocation, SERVICE);
}
public CompleteTask(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
public CompleteTask() {
super(WSDL_LOCATION, SERVICE);
}
@WebEndpoint(name = "UIFWPort")
public CompleteTaskPortType getUIFWPort() {
return super.getPort(UIFWPort, CompleteTaskPortType.class);
}
@WebEndpoint(name = "UIFWPort")
public CompleteTaskPortType getUIFWPort(WebServiceFeature... features) {
return super.getPort(UIFWPort, CompleteTaskPortType.class, features);
}
}
El valor de la propiedad //bpms.server.url// que esta definida en el fichero //filtro-local.properties// (ya que en eclipse se aplica el perfil //local// por defecto) es http://mncs.atica.um.es:8080.
Si definimos la propiedad para el resto de entornos, cuando utilicemos las tareas de sincronización para un entorno, el valor sera el correspoandiente al filtro de propiedades de dicho entorno.
----
--- //[[juanmiguelbg@um.es|JUAN MIGUEL BERNAL GONZALEZ]] 2014/12/02 18:50//