Entradas

Crónica de una migración con instalación complicada III - Error 403 - Unauthorized

Imagen
Continuación de la Primera Parte y Segunda Parte.

Después de la primer instalación fallida, revisamos todas las propiedades de la KB para analizar cuáles eran las que podían estar afectando el comportamiento.



NivelPropiedadValorComentarioVersionWeb User ExperiencePrevious Version CompatibleVersionOn session timeoutIgnoreSe ve influida por la propiedad Javascript debug modeEnvironment /SecurityEncrypt URL ParametersNO(Aunque algunos objetos encriptan sus parámetros)GeneratorJavascript debug modeNOComprime css y js
Además influye en la propiedad On session timeout
Leyendo el wiki y por motivos históricos que no logro comprender totalmente, vemos que la propiedad Javascript debug mode, además de manejar la compresión de css y js y el encriptado de parámetros en las llamadas Ajax (las que hacen los objetos web para los eventos isValid, para las rules, etc) influye también cuando el modelo no es smooth en la propiedad de On session timeout, aunque de una forma que no está bien documentada …

Crónica de una migración con instalación complicada II - Error 440 - Sesion ha caducado.

Imagen
.. Continuación de Crónica de una migración con instalación complicada.

Una vez terminada la conversión de la KB, hicimos un deploy en el ambiente de pruebas y lo probamos durante mas de un mes, y corregimos algunos detalles menores.  Es una instalación bastante compleja, pues necesita instalarse en varios servidores con balanceo de carga, servidores para procesos batch, etc.

Teníamos las version Evolution 3 instalada y una versión GeneXus 16 Upgrade 3 funcionalmente compatible, a menos de algunas dll de UC que tuvimos que actualizar para evitar algunos errores de ejecución.

Este esquema, nos permitió hacer comparaciones de funcionamiento de ambas versiones. Además del testeo manual hicimos test automatizados con GXTest.
Ejecutar los test automáticos de GXTest 3.0 con la KB en GeneXus 16, dio mas trabajo del deseado.  Tuvimos algunas idas y vueltas con la gente de Abstracta, que logró solucionar los inconvenientes técnicos y corrieron todas las pruebas automatizadas sobre la nueva ver…

Crónica de una migración con instalación complicada.

Imagen
Desde hace unos meses, estamos en el proceso de una migración de una KB grande (más de 10.000 objetos y más de 1000 tablas) de GeneXus Evolution 3 a Genexus 16 Upgrade 3.

La migración en sí, salio todo muy bien. Hago un respaso de algunos puntos destacados de la misma.

Conversión de Evo3 a GX16. 
La conversión, generación, compilación de la KB salió todo sin problemas. Aparecieron varios Warnings nuevos por causa de nuevas validaciones que se agregaron en GX16. Pudimos eliminar todos los warnings.
Es la primera vez que pudimos terminar un Build all de esta KB sin Warnings, pues antes siempre habia algunos que no se podian evitar, por no estar codificados.
Algunos warnings que Genexus hace, los ignoramos, pues nos nos interesan y los manejamos de otra forma (por ejemplo, el manejo de indices de las tablas).

Comparación de Navegaciones. 
La comparación de navegaciones que hice con KBDoctor, de la versión vieja y la nueva, no dio diferencias importantes.  Las diferencias eran fundamentalm…

GeneXus Wish List - v2019

Imagen
Voy a escribir una lista explicada de las opciones que me gustaría contar en GeneXus 16.  Hay una versión en el Wiki de la comunidad GeneXus, donde pueden agregar deseos.

Special Build Los objetos hoy tienen muchas opciones relacionadas con el build. Para no sobrecargar el menú básico, sería mejor tener  una opción  Special Build con un submenú  con las siguientes opciones (agrupa las opciones relacionadas con el build, no usadas muy frecuentemente)  Rebuild (como la opción Rebuild de hoy) Build this & Compile Mains (solo los que incluye a este objeto) Hoy pasa muy a menudo que se hace un build with this only, y "no me compila el objeto".  El problema es que al hacer el build de dicho objeto, se genera el archivo fuente, y luego se compila el startup object, y si no contiene al archivo no se toma en cuenta dicho objeto. 
Seria bueno tener una opción que fuera "Regenerate this objects and Compile all main that contains this object" (tal vez es un poco largo para…

Metodo MIKADO - aplicación práctica para simplificar una KB.

Imagen
Hace unas semanas hablé del metodo MIKADO, que me resulta util para diversos proyectos.

La semana pasada, tenía que hacer una simplificación en un sistema que conozco bastante, que tenia varias tablas en el modelo de datos, que habian sido utiles en el pasado, pero ahora ya no se utilizaban mas.

Es en este tipo de limpiezas, donde es común empezar a borrar algo y que salte que se necesita corregir otra cosa. Al corregir la segunda, vemos que hay una tercera cosa a arreglar y se pueden disparar cambios en cascada.

El problema de los cambios en cascada es que muchas veces termina siendo tan grande y difícil de controlar, que muchas veces el riesgo del cambio es muy grande y no se hace nada, o se acaba el tiempo para hacerlo y todo queda como esta.

El problema era asi:

En unas 6 horas debía simplificar una tabla llamada Proyectos que hacía referencia a varias tablas que ya no se quieren usar mas.
Al final de esas 6 horas, debía quedar todo operativo y funcionando con los cambios en prod…

JDBC Datasource en Tomcat

Necesite configurar JDBC Datasource en Tomcat 8.5, con el driver jtds, para una KB GeneXus 16 U3 y el generador Java, con SQLServer.

Siguiendo las instrucciones para configurar el JDBC Datasource para Tomcat 6,  me daba el error:

javax.servlet.ServletException: java.lang.AbstractMethodError: net.sourceforge.jtds.jdbc.ConnectionJDBC3.isValid(I)Z at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:874) at org.apache.tomcat.dbcp.dbcp2.PoolableConnection.validate(PoolableConnection.java:270) at org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:389) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2398) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2381) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2110) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getC…

Desarrollador GeneXus con experiencia en Java.

Imagen
Si te gustan los proyectos desafiantes y te gusta programar en GeneXus y Java, podes postularte en este llamado de BuscoJobs 


The Mikado Method - Mejoras a código que no conozco demasiado.

Imagen
Leí el libro Mikado Method hace un tiempo y es sobre metodología para poder hacer cambios a sistemas de los cuales no se conoce demasiado o son entreverados (casi todos los sistemas grandes que conozco).





El nombre viene del juego Mikado, en el que hay que sacar los palitos, sin mover ninguno de los que quedan en el juego.  Con este método, consiste en encontrar el cambio que puedo hacer, que me ayude a conseguir una meta preestablecida, sin afectar nada del resto del sistema.

Lo que plantea es algo bastante sencillo (y hasta intuitivo) para cambiar sistemas que están funcionando. Para que el método funcione, hay que tener una forma de volver a un estado conocido y bueno del sistema, donde todo compile y no tengamos errores.
El método.  Lo primero que plantea es definir lo que se quiere cambiar, como una meta a alcanzar.

Luego, plantea hacer una solucion "naive" a para lograr dicha meta e intentar compilar (y ejecutar si todo sale bien) la aplicación.

Una vez que aparecen er…

PiensoPienso: Diseño de grillas con Descripción.

Imagen
Tengo las tablas

Table Movimientos (100.000 registros)
Table Structure
NameDescriptionTypeFormula*ClaveAutonumber Clave AutonumberNumeric (8)Fecha  FechaDateTimeReferencia ReferenciaNumeric (4)ClaveDescripcion Clave DescripciónVarChar Table Referencia (10.000 registros)
Table Structure
NameDescriptionTypeFormula*ReferenciaReferenciaNumeric (4)
ReferenciaDescripcion  Referencia DescripciónVarChar
Tengo 2 Webpanels que muestran una grilla que tiene 20 renglones y deben mostrarse registros de la tabla de Movimientos. y se deben mostrar las mismas col

Cuantos commits a GeneXus Server va a tener este objeto?

Imagen
Decidimos hacer un primer experimento de algoritmos de inteligencia artificial para predecir la cantidad de commits que va a tener un objeto, teniendo algunas características del mismo. 
Hicimos un programa para leer una KB y sacar para los objetos ejecutables: 

//Información del objeto"Object",  "Description",  "Type",  "Module", //Información sobre los parámetros "#ParmIN", Cantidad de Parámetros IN "#ParamOUT",  Cantidad de Parámetros OUT "#ParamINOUT", Cantidad de Parámetros INOUT "#Parameters",  Cantidad total de parámetros. (suma de los anteriores) //Información sobre código "#Comments", Cantidad de lineas de código "#Lines",  Cantidad de lineas del codigo "Max Nest", Cantidad de anidaciones que tiene el código "Longest Code Block",   Bloque de código mas grande "Cyclomatic Complexity",  Complejidad ciclomática del código "#Rules", Cantidad de lineas en la…