TABLAS DE RAMAFLEX - CODIGO DE REFERENCIA EN JAVA Especificacion: https://docurm.random.cl/integracion-erp.html#tablas (la regla es ../../pseudocodigo.txt) ARCHIVOS ramaflex/TablasRamaflex.java El nucleo, sin framework HTTP: validacion, SQL por motor, conversion de tipos, transaccion y errores. Una entrada: atender(metodo, tabla, parametros, cuerpo) -> Respuesta(estado, cuerpo JSON) ramaflex/ServidorEjemplo.java Servidor minimo con el HttpServer del JDK. Monta {RUTA_BASE}/{TABLA}. El servidor autentica y llama al nucleo. REEMPLACE la autenticacion de ejemplo (un token fijo en una variable de entorno) por la de su API. No hay archivo de catalogo: el script de las tablas guarda el catalogo en la base (XESQUEMA.CATALOGO) y el nucleo lo lee de ahi, y lo vuelve a leer cada minuto. REQUISITOS Probado con Java 11 (11.0.26) y el servidor del JDK (ServidorEjemplo). Usa Jackson (jackson-databind, que trae jackson-core y jackson-annotations) y el driver JDBC de su motor. Versiones probadas: Jackson (todos): com.fasterxml.jackson.core:jackson-databind:2.17.2 SQL Server: com.microsoft.sqlserver:mssql-jdbc:12.8.1.jre11 (autenticacion integrada de Windows: ademas la DLL com.microsoft.sqlserver:mssql-jdbc_auth:12.8.1.x64, tipo dll, en -Djava.library.path) PostgreSQL: org.postgresql:postgresql:42.7.4 MySQL: com.mysql:mysql-connector-j:8.4.0 Maven: com.fasterxml.jackson.core jackson-databind 2.17.2 com.microsoft.sqlserver mssql-jdbc 12.8.1.jre11 Gradle: implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.2' implementation 'com.microsoft.sqlserver:mssql-jdbc:12.8.1.jre11' // o org.postgresql:postgresql:42.7.4 // o com.mysql:mysql-connector-j:8.4.0 En produccion use un pool de conexiones (HikariCP o el DataSource de su servidor de aplicaciones): new TablasRamaflex("sqlserver", dataSource::getConnection) CONFIGURACION (ServidorEjemplo, variables de entorno) RAMAFLEX_MOTOR sqlserver | postgresql | mysql RAMAFLEX_CONEXION cadena JDBC, por ejemplo: jdbc:sqlserver://servidor;databaseName=ERP;user=...;password=...;encrypt=true jdbc:postgresql://servidor:5432/erp?user=...&password=... jdbc:mysql://servidor:3306/erp?user=...&password=... RAMAFLEX_TOKEN token de servicio esperado en "Authorization: Bearer " (solo el ejemplo) RAMAFLEX_RUTA_BASE por defecto /ramaflex/tablas (nos la informan) RAMAFLEX_PUERTO por defecto 8080 Notas por motor: - Fechas: se guardan en UTC sin zona y el codigo usa LocalDateTime, que no aplica la zona de la JVM. No las cambie por java.sql.Timestamp. - SQL Server: los textos viajan como NVARCHAR (setNString) para guardar la ñ y las tildes. - MySQL: con mysql-connector-j 8.4.0, LocalDateTime viaja sin conversion de zona. Tablas en utf8mb4, como las crea el script. COMPILAR Y CORRER (sin Maven, con los .jar en la carpeta lib/) Windows (en Linux/macOS cambie ";" por ":"): javac -encoding UTF-8 -d clases -cp "lib/*" ramaflex/TablasRamaflex.java ramaflex/ServidorEjemplo.java java -cp "clases;lib/*" ramaflex.ServidorEjemplo PRUEBA DE CONFORMIDAD (probada con Node 16, 18 y 24; contra una base de PRUEBA con el script de las tablas aplicado) node ../../conformidad.js http://localhost:8080/ramaflex/tablas Deben pasar todas las pruebas. Si monta el nucleo en otro servidor, mantenga lo que hace ServidorEjemplo al responder: si la llamada pide "Connection: close", la respuesta tambien lo dice (el HttpServer del JDK, sin eso, corta una de cada dos conexiones; la prueba lo detecta). Corrala con el servidor en la zona horaria de su equipo (no en UTC): asi detecta un corrimiento de zona en las fechas. CON CADA VERSION NUEVA DEL SCRIPT Ejecutar en la base el script nuevo del motor (migraciones/.sql). Nada mas: crea solo lo que falta, guarda el catalogo nuevo en XESQUEMA y el nucleo lo toma solo, en menos de un minuto. No hay que reiniciar ni cambiar el codigo.