mirror of
https://github.com/KeymonSoft/jRDC-Multi.git
synced 2026-04-18 05:09:32 +00:00
``` feat: Implement hot-swap for DB config reload and JSON POST support **Cambios Principales:** 1. **Hot-Swap para recarga de configuraciones de DB sin reiniciar servidor** 2. **Migración a ReentrantLock para sincronización por incompatibilidad con Sync** 3. **Soporte para peticiones POST con Content-Type: application/json** 4. **Mejoras en inicialización del pool de conexiones y soporte multi-DB** **Problemas Resueltos:** - Falta de "Hot-Swap" en `reload`: El comando no permitía recarga dinámica de configuraciones sin reinicio - Ausencia de mecanismo de cierre de pools en RDCConnector para liberación ordenada de conexiones - Incompatibilidad con `Sync` en entorno B4X - Procesamiento incorrecto de peticiones POST con Content-Type: application/json - Inicialización incorrecta de pools C3P0 con TotalConnections: 0 - Configuración inconsistente de parámetros críticos de C3P0 - jdbcUrl truncada/vacía en logs por shadowing de variables **Cambios Implementados:** **Manager.bas:** - Reemplazo completo de lógica para comando "reload" - Creación de nuevos conectores antes de reemplazar los antiguos - Sincronización con ReentrantLock para acceso thread-safe - Patrón seguro de bloqueo sin `Finally` usando bandera booleana - Cierre explícito de oldConnectors después del reemplazo - Validación de inicialización y control de errores robusto - Registro detallado en log HTML del proceso **RDCConnector.bas:** - Implementación de método `Public Sub Close()` para liberar pools C3P0 - Corrección de shadowing de variable `config` en LoadConfigMap - Reordenamiento de Initialize - Configuración completa de C3P0 antes de adquirir conexiones - Forzar reportes de errores con acquireRetryAttempts y breakAfterAcquireFailure - Activación forzada del pool con conexión temporal **Main.bas:** - Declaración de `MainConnectorsLock As JavaObject` (ReentrantLock) - Inicialización del lock en AppStart - Declaración separada de conectores (con1, con2, con3, con4) **DBHandlerJSON.bas:** - Detección de peticiones POST con Content-Type: application/json - Lectura de JSON desde InputStream en lugar de parámetro URL - Cierre explícito del InputStream para liberación de recursos - Corrección de nombres de variables para evitar conflictos - Mensajes de error mejorados para ambos métodos (legacy y nuevo) **Beneficios:** - Recarga en caliente de configuraciones DB sin interrupción de servicio - Mayor disponibilidad y mantenibilidad del servidor - Prevención de fugas de recursos con cierre ordenado de pools - Compatibilidad con estándares APIs web (POST application/json) - Inicialización robusta y confiable de pools de conexiones - Mejor reporting de errores y diagnóstico de problemas - Soporte multi-DB más estable y confiable ```
65 lines
2.4 KiB
Properties
65 lines
2.4 KiB
Properties
#Lines starting with '#' are comments.
|
|
#Backslash character at the end of line means that the command continues in the next line.
|
|
|
|
DriverClass=oracle.jdbc.driver.OracleDriver
|
|
#JdbcUrl=jdbc:mysql://localhost/test?characterEncoding=utf8
|
|
|
|
#SQL Server
|
|
#DriverClass=net.sourceforge.jtds.jdbc.Driver
|
|
|
|
# este para produccion GHAN JdbcUrl=jdbc:oracle:thin:@//192.168.15.53:1521/DBKMT
|
|
#GOHAN ---> server
|
|
#JdbcUrl=jdbc:oracle:thin:@//10.0.0.205:1521/DBKMT
|
|
#JdbcUrl=jdbc:oracle:thin:@//10.0.0.236:1521/DBKMT
|
|
JdbcUrl=jdbc:oracle:thin:@//192.168.101.10:1521/DBKMT?v$session.program=jRDC_Multi
|
|
|
|
# Configuración del pool de conexiones para DB1
|
|
InitialPoolSize=3
|
|
MinPoolSize=2
|
|
MaxPoolSize=10
|
|
AcquireIncrement=5
|
|
|
|
# SVR-KEYMON-PRODUCCION--> Usuario
|
|
User=GUNA
|
|
Password=GUNAD2015M
|
|
|
|
#User=TORRADOCONAUTO
|
|
#Password=TORRADOCONAUTOD2016M
|
|
|
|
|
|
#--> Puertos
|
|
#SAC - DFR - MDA / GOHAN -->COBRANZA
|
|
#ServerPort=1783
|
|
#GUNA - SALMA - DURAKELO - DBC / SVR-KEYMON-PRODUCCION --> DISTRIBUIDORAS
|
|
ServerPort=9010
|
|
#CMG - TORRADO / TRUNKS -->COBRANZA/ GM
|
|
#ServerPort=1781
|
|
|
|
#If Debug is true then this file will be reloaded on every query.
|
|
#This is useful if you need to modify the queries.
|
|
Debug=true
|
|
|
|
#SQL COMMANDS
|
|
|
|
##################
|
|
#################
|
|
################ S O P O R T E
|
|
#################
|
|
##################
|
|
|
|
sql.select_revisaClienteCredito_GUNA2=select (select count(CAT_CL_CODIGO) from GUNA.CAT_CLIENTES where CAT_CL_CODIGO = ? and CAT_CL_IDALMACEN <> '100') as cuantos, (select count(ID_CLIENTE) from GUNA.CAT_CLIENTES_CREDITO where ID_CLIENTE = ?) as cuantosCredito from DUAL
|
|
|
|
sql.traeConexion=select 'DB1' as conexion from dual
|
|
sql.traeConexion2=select 'DB1' as conexion from dual
|
|
sql.traeConexion3=select '1' as par1, 2 as par2 from dual
|
|
sql.traeConexion4=SELECT (?) AS p1, (?) AS p2, (?) AS p3 FROM DUAL
|
|
sql.select_soporte=select * from GUNA.soporte
|
|
sql.select_conexion=SELECT 'OK' AS VALOR FROM DUAL
|
|
sql.selectAlmacen=select cat_al_id, cat_al_desc, cat_al_archftp from cat_almacen where cat_al_id = ?
|
|
sql.select_version=select cat_ve_version from cat_version
|
|
sql.select_version_GV2=select cat_ve_version from GUNA.cat_version
|
|
|
|
sql.update_usuario_guna_nobajas=UPDATE GUNA.CAT_LOGINS SET CAT_LO_ESTATUS = 'Activo',CAT_LO_CONECTADO ='0' WHERE CAT_LO_ESTATUS != 'Baja' and CAT_LO_USUARIO = (?)
|
|
|
|
sql.proc_usuario=BEGIN EXECUTE IMMEDIATE ('DECLARE Cursor_SYS Sys_Refcursor; BEGIN SP_ACTIVAR_USUARIO( '''||(?)||''',Cursor_SYS); end;'); END;
|