martes, noviembre 11, 2008

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:

No hay comentarios.: