sábado, 22 de junio de 2013

Buscar un Componente JSF por su ID Relativo del Lado del Servidor

Esta semana he sufrido un déjà vu. Necesitábamos obtener un UIComponent desde un ManagedBean en una aplicación JSF y no contábamos con la ruta absoluta que pedía la API que estábamos usando. Recordé entonces que esto con Seam 2 era trivial, pero como no estábamos usando Seam, necesitábamos una manera de encontrar el componente en el árbol de componentes del lado del servidor por su ID relativo.

Entonces recordé que yo ya había hecho esto en una vieja aplicación JSF.

JSFComponentFinder

Googleando un buen rato y con una idea fija en la cabeza, todo se encuentra. En este post está la solución: How to Find an UIComponent in ViewRoot.

Así que, tomé el código fuente y creé mi propia clase JSFComponentFinder.

Aplicación JSF de Prueba

Para probar el JSFComponentFinder armé una aplicación JSF Java EE 6. Para esto, partí del arquetipo para Maven de JBoss: jboss-javaee6-webapp-archetype. Luego, edité el index.xhtml para que tuviera unos pocos inputText y outputLabel vacíos con el único fin de poder buscarlos del lado del servidor. Debajo de estos tres inputs, puse otro inputText en el cual uno puede escribir el ID relativo del componente que se desea buscar. Al pulsar el botón Find, debajo aparecerá el ID absoluto, la ruta completa, del componente, que en el ejemplo de los inputs simplemente es el nombre del formulario, seguido por el separador de dos puntos, seguido por el ID relativo; en este caso es simple.

http://jsfcomponentfinder-elfrasco.rhcloud.com/index.jsf
El código fuente de la aplicación de prueba la subí a GitHub para el que desee consultarlo:
https://github.com/elfrasco/jsf-component-finder

El arquetipo de JBoss está muy bueno, pero es demasiado específico para JBoss AS para mi gusto. Así que modifiqué el pom.xml para que fuera más genérico, tomando únicamente la dependencia de la especificación de Java EE y sacando las librerías de hibernate y arquillian que para este ejemplo tan pequeño no hacían falta.
<dependency>
    <groupid>javax</groupid>
    <artifactid>javaee-api</artifactid>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>
Así, minimalizando y estandarizando el proyecto, al ejecutar:
mvn clean install
Obtendremos un WAR que podremos desplegar en cualquier servidor de aplicaciones Java EE 6.

JSFComponentFinder en OpenShift

Para seguir jugando un poco más, decidí probar mi humilde aplicación de ejemplo en OpenShift y, una vez agregándole el perfil OpenShift y el directorio deployments requeridos por el cartridge de AS 7, funcionó perfecto.

Aquí lo pueden ver funcionando:

martes, 4 de junio de 2013

Java EE 7, REST, DevOps y Expresiones Regulares

¡Hola a todos! En el post de noticias de hoy traigo una mezcla de artículos muy interesantes.

Java EE 7


Java EE 7 ya está entre nosotros: Empezamos con un post de Markus Eisele con algunas reflexiones interesantes sobre el nuevo Java EE 7; en el medio hay un poco de historia e ideas para un futuro roadmap para la plataforma:
(4 de Junio)

Historia de Versiones de Java EE

¿Qué hay de Nuevo en JMS 2.0?: Para seguir empapándonos de Java EE 7, se publicó este completo artículo sobre JMS 2.0, uno de los grandes avances que provee la nueva plataforma:
(Mayo)

Overview de especificaciones de Java EE 7

Como podemos ver en el link anterior, la API de JMS se ha simplificado bastante si la comparamos con las verbosas versiones anteriores.

WildFly 8.0.0.Alpha1: Sobre este tema quisiera agregar también que ya está disponible para la descarga la primera versión (Alpha1) del nuevo servidor de aplicaciones WildFly (antes JBoss AS). WildFly se está desarrollando con la idea de que sea Java EE 7 complaints (recordemos que JBoss AS 7 era Java EE 6 complaints):
http://www.wildfly.org/
http://www.wildfly.org/download/

Ya salió WilFly 8.0.0.Alpha1, el Java EE 7 AS de JBoss Community

REST


Inconvenientes de Usar REST: Seguimos con dos artículos bastante interesantes sobre el protocolo HTTP y REST; ¿cuáles son las contras de los servicios REST? en InfoQ:
(26 de Mayo)

HTTP Idempotente: Y mucho más interesante es el post de Patrick Gombert, de 8th Light, en donde podemos seguir el hilo del artículo anterior y debatir cuándo un servicio REST debería ser idempotente y cuándo no:
(2 de Junio)

En este último se menciona una convención que me parece bastante interesante:
  • Usar las operaciones GET, HEAD, DELETE y PUT para implementar servicios idempotentes (recordemos que un UPDATE o un DELETE también podemos considerarlos idempotentes; en el artículo se pone como ejemplo un UPDATE de SQL)
  • Usar la operación POST para servicios en los que no se pueda asegurar la idempotencia.

DevOps


La Paradoja DevOps: El tema de DevOps me llama poderosamente la atención, ya que opino que un DevOp es un perfil muy necesario en un equipo de desarrollo, a pesar de que todavía no es muy comprendido ni es fácil de cubrir. El autor de este post hace una simple y breve reflexión sobre lo que Ben Kepes ha llamado "La Paradoja DevOps": La primera regla de DevOps es no implementar un equipo de DevOps; los DevOps deben poder tener injerencia cross a las áreas funcionales, en lugar de conformar un área funcional propia dentro de la empresa. Interesante, ¿no? Visto desde varios puntos de vista, el rol de DevOp tiene muchas semejanzas con el rol del Arquitecto de Software.

Aquí el link:
(18 de Mayo)

Expresiones Regulares

Los siguientes links no son precisamente noticias, ni siquiera referencian a artículos nuevos; sin embargo quiero compartirlos porque realmente no tienen desperdicio.

Guía de Expresiones Regulares en Java: Estos dos links conforman un tutorial muy completo para escribir expresiones regulares en Java:
(22 de Febrero 2012)
(23 de Febrero 2012)

Tester de Expresiones Regulares Online: Y el tercer link es una pequeña aplicación web en la podemos probar nuestras expresiones regulares hasta encontrar el resultado deseado (ideal para poner a prueba lo aprendido en el tutorial anterior):
http://ocpsoft.org/tutorials/regular-expressions/java-visual-regex-tester/

Los tres links pertenecen al proyecto Ocpsoft, que provee un conjunto de librerías para facilitar el desarrollo de aplicaciones web.