Ir al contenido principal

Creando un TLD dinamicamente con tobago apt plugin y Struts

Una de las tareas tediosas en JEE, es la de mantener nuestros TLD (definición de  librerías de Tag), cada vez que se cambia o agrega algo. Hace poco publique un post donde se explicaba como realizar taglibs utilizando el API de componentes de Struts, pues ahora se mostrara un plugin para Maven, mediante el cual podemos generar automáticamente un TLD, como observación interesante, cuando el TLD se almacena bajo el “META-INF”, no hay necesidad de agregarlo al “web.xml”, ni necesidad de tenerlo en bajo la estructura de directorios del WEB-INF.

Lo primero que debemos hacer, es agregar la carpeta “META-INF”, bajo main/resources, una nota al pie; Maven filtra cualquier directorio que no tenga ningún archivo, por lo tanto puedes agregar bajo “META-INF”, un archivo “README.txt”, con un mensaje como este (yo lo copie de Struts 2)

TLD file is generated inside META-INF after compilation.
If META-INF is empty, Maven will not copy it to the "target/classes" folder.
Please do not remove META-INF, or this file.

Esto permite que nuestra carpeta de “META-INF”, sea creada cuando se deploya el sobre la carpeta target, en caso que ya tengas un “META-INF” con al menos un archivo dentro, puedes omitir este paso.

El segundo paso es crear, la carpeta /src/site/resources/tags, en esta nuestro plugin almacena una serie de plantillas que utiliza para crear el TLD.

El siguiente trabajo es ir al pom.xml de Maven; en la sección de plugin e incluiremos el siguiente código:

                org.apache.myfaces.tobago
                maven-apt-plugin
                
                    target
                    false
                    true
                    true
                    true
                    org.apache.struts.annotations.taglib.apt.TLDAnnotationProcessorFactory
                    1.5
                    
                        **/*.java
                    
                
                
                    
                        compile
                        
                            execute
                        
                
                
            

Este plugin nos permite indicarle, los parámetros que deseamos utilizar para nuestro taglib, uri por ejemplo será el nombre de nuestro taglib, etc. El resultado cuando invoques a Maven compile, o algun objetivo que incluya esta fase del ciclo de vida, como packaged o install, seria algo como:

  2.2.3
  1.2
  my
  /my-tags
  "My Tags"
  

Puedes utilizar tanto los parámetros include o exclude al estilo de Ant, para agregar o limitar los paquetes o archivos a analizar.

Si te corres el nuevo pom.xml con tu Maven, te darás cuenta que el mismo crea tus taglib de HelloWord, que se había implementado en el articulo mencionado al inicio de este, sin embargo los atributos que incluye tu no los pusiste y además, en caso que agregues un atributo adicional, el taglib no será actualizado con este. Lo que pasa es que necesitas indicarle al Engine que crear el TLD, que tiene un atributo y deseas que el mismo se agregue al TLD, esto lo realizamos sencillo, anotando nuestro método set, con el siguiente annotation:

 @StrutsTagAttribute(description="Some attribute description", type="String", required=true)
Public void setNewAttribute () { …

Esto le indica, al Engine que este atributo debe ser agregado en nuestro TLD.


Como podrás notar, este proceso nos proporciona gran facilidad de mantenimiento y escalabilidad, pues el proceso de edición y creación de los taglib, se lo relegamos al ciclo de vida gestionado por Maven.

Algunos recursos de interés:

Comentarios

Entradas más populares de este blog

Impensando acerca de las referencias en Java

Fue hace ya algún tiempo que pase un rato discutiendo con algunos compañeros acerca de si existe o no el paso por referencia; el discurso fue mucho hacia que en Java el comportamiento, en el supuestamente pasamos por referencia un objeto y por valor los objetos primitivos creo mucha polémica. Para ubicarnos en contexto veamos el siguiente ejemplo. public static void main(String[] args) { int value = 10; changeValue(value); System.out.println("value = " + value); User user = new User(); Name name = new Name(); user.setName(name); name.setName("jsanca"); name.setLastName("XXX"); user.setPassword("123queso"); System.out.println("user: " + user.getName().getName() + ", " + user.getName().getLastName() + ", " + user.getPassword()); changeValue1(user); System.out.println("user: " + user.getName().getName() + ", " + user.getName().getLastName() + ", " + user.ge...

Wikipedia data base schema

Algo interesante como caso de estudio, especialmente para los que estén cursando bases de datos, el esquema de la Wikipedia esta disponible para hechar un ojo. A simple vista, me gusta mucho la simplicidad y lo bien documentada que se encuentra, vale la pena dedicarle un tiempo. http://www.wikipedia.org/

Analizador de expresiones algebraicas recursivo decendente

Como les mencione en un post previo, estoy leyendo el libro el arte de programar en Java, el primer ejercicio consiste en un analizador de expresiones algebraicas recursivo descendente, el mismo consiste en la posibilidad de tomar una cadena que contenga una expresión matemática, la misma puede contener valores en punto flotante, sumar, restar, dividir, multiplicar, sacar exponente (potencia), uso de paréntesis para priorizar una operación, etc. A continuación clase a clase, con una pequeña explicación Lo primero que definiremos es una suite de excepciones para reportar errores, no tiene mucha ciencia, hay una para la division entre cero, cuando no existe una expresión valida, error de sintaxis o cuando los paréntesis no se encuentran balanceados, veamos package cap2; /** * Exception para reportar que hay al intentar dividir entre cero * * User: jsanca * Date: 4/16/13 * Time: 1:30 AM * @author jsanca */ public class DividedByZeroException extends RuntimeException { ...