jueves, 17 de enero de 2008

Hablemos nuevamente de cosas tecnicas

Hoy hablaremos nuevamente de cosas técnicas, y siguiendo con el post anterior esto es también un rant.

En este caso me voy a quejar de los problemas que le genera a la comunidad de programadores Java el hecho de que haya muchas versiones de los servidores J2EE. Osea, esta muy bueno la variedad y la idea del "Code once, deploy everywere" pero genera que cada vez que hacemos código tengamos que tratar de trabajar siempre con el ambiente lo mas parecido al que supuestamente va a ser el de producción (con todos los problemas de licencia que ese genera[coughtWebSpherecought]) y ademas cuando al servidor objetivo de nuestro programa cambia, también debe de cambiar nuestro programa, por ejemplo, tenemos que dejar de incluir ciertas librerías e incluir otras que cambiaron entre los servidores (ese va a ser otro post, un rant sobre la inclusión de librerías cuando usamos muchas librerias)

Bueno, estos problemas no son tan complejos como otros que se generan, uno que sufrí hace poco fue pasando de Sun App Server 9.1 a JBoss 4.0.4. En JBoss había hecho una forma de pasar parámetros desde un Backing Bean que usaba en unas llamadas JSF a un código JavaScript usando JSTL. El asunto es que en JBoss el Backing Bean se ejecutaba antes de que se ejecutara la sentencia que traía la pagina donde estaba el JavaScript. Esto lograba que yo pudiera tener acceso a variables seteadas en la session. De esta forma yo tenia los valores en mi código JavaScript. Al pasar a Sun App Server se empezó a ejecutar primero el código JSTL de la pagina y luego el código JSF. Esto genera que no tenga cargada las variables y generaba errores en mi codigo JavaScript.

Yo realizaba esto en dos diferentes secciones de mi código, en una podía setear las variables antes de mandar cargar la pagina, por lo que el problema se soluciono fácilmente, en la otra parte la solución fue agregar al código una sentencia que provocaba que si al cargar la pagina no estaban seteadas las variables en session se volviera a pedir que se cargara la pagina, al ejecutarse este código JavaScript, el código JSF ya se había ejecutado, por lo que en la segunda cargada de la pagina ya estaban seteadas las variables por lo que la pagina cargaba sin problemas y ejecutaba como yo quería. Bueno, esto es todo por hoy, mas adelante voy a quejarme de mas cosas :D

Por ultimo los dejo con unas preguntas. Alguien sabe si hay alguna JSR que defina como debe de ser el comportamiento que describí para saber cual de los servidores es el que esta en falta? Y la otra es alguien sabe de alguna otra forma de implementar lo que estaba queriendo realizar?

-- PD -- a la persona que entro buscando www.zune.com, le comento que la dirección es en realidad www.zune.net