lunes, 23 de enero de 2017

Problemas con Reorganizaciones

¡Hola a todos!

Recientemente he tenido que trabajar con una KB a la que debía adaptar su módulo de facturación para cumplir con los requisitos de factura electrónica (e-factura). Más allá de algunos problemas técnicos que tuvimos para consumir los Web Services Seguros, nos encontramos con que las Reorg no se podían hacer desde Genexus. Estabamos trabajando con Genexus 9 U7, generando Java con U5 (VM Sun 1.6) y con Postgres 9.
A continuación dejo un resumen de los problemas, las distintas alternativas que fueron probadas y la solución alcanzada. Este es uno de los casos en que por distintas razones no fue posible ser exaustivos en las pruebas, pero de todas maneras llegamos a una solución, así que igualmente puede resultar útil la experiencia.

Al ejecutar una reorg que agregaba campos a una tabla ya existente daba el siguiente error… “EXCLUSIVE MODE Text: ERROR: la orden LOCK TABLE sólo puede ser usada en bloques de transacción
A priori, según algunos posts en distintos foros y blogs (sepan disculpar, pero con la vorágine en busca de la solución, en su momento no registré los enlaces de las fuentes), los problemas podían ser:
  1. Idioma en que estaba configurado Postgres: al parecer Genexus solamente interactúa en idioma Inglés con Postgres
  2. Versión de Postgres
  3. Versión del driver de Postgres
  4. Versión de GX
Analizando las distintas alternativas:
  1. Idioma en Postgres... Estabamos utilizando idioma Español en Postgres, por lo tanto hicimos la prueba y cambiamos a Inglés, sin embargo seguimos teniendo el mismo problema/error (build all incluido).
  2. Versión de Postgres... Estabamos utilizando Postgres 9. Por razones de tiempo y de viabilidad de cambio de versión en Producción, no hicimos prubas con otras versiones. Asi que este es un punto que quedó pendiente.
  3. Versión del Driver de Postgres... Estabamos utilizando el driver jdbc “postgresql-8.3-604.jdbc4.jar”, decidimos probar con dos versiones "conocidas", en el sentido de que han sido utilizadas sin problemas en otras instalaciones con GX9. Probamos con versiones “postgresql-8.4-703.jdbc4.jar” y “postgresql-9.3-1102.jdbc4.jar” pero seguimos teniendo el mismo problema/error.
  4. Versión de Genexus... Como tenemos el mismo producto (incluso es la misma KB) en varios Clientes decidimos no hacer pruebas con upgrades superiores de GX, pues implicaría una etapa de Pruebas (testing) en cada uno de ellos, lo cual en ese momento no era viable. Por lo tanto, para atacar este punto resolvimos utilizar una KB de “puente” en Genexus Evolution 3 con el driver
    postgresql-9.1-902.jdbc3.jar, yendo contra la misma BD Postgres y ahí tiramos la reorg… y funcionó!!
Nota: respecto al punto 3, la documentación de Postgres 8.3 dice que es recomendable que el LOCK TABLE de modo exclusivo esté dentro de un BEGIN-COMMIT y la documentación de la 8.4 dice que es obligatorio. Es por esto que probamos con un driver de la 8.4, esperando que GX combinado con ese driver pusiera el BEGIN-COMMIT… pero no!
Entonces... la solución fue el punto 4!!

Para terminar, algunos comentarios al respecto:
- claramente no es la mejor solución, pues implica tener duplicada la KB en otra versión de Genexus solamente para poder realizar las reorganizaciones
- de todas maneras, casi paralelamente a este problema tuvimos que consumir unos servicios web con ciertas características que tampoco era posible implementarlo en esa versión de Genexus, por lo que esta nueva KB en Evolution 3 terminó siendo un "puente" para solucionar varios problemas técnicos (quizás en otra Entrada comente algo al respecto, que también puede resultar útil)

¡Hasta la próxima! 

No hay comentarios:

Publicar un comentario