====== 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//