Update README.md

This commit is contained in:
jaguerrau
2025-09-09 09:57:19 -06:00
committed by GitHub
parent b426c06eb2
commit 09d40879ca

133
README.md
View File

@@ -1,20 +1,24 @@
# **Servidor jRDC2-Multi Mod (B4J)**
## **1\. Introducción**
## **1. Introducción**
Este proyecto es una versión modificada del servidor [jRDC2 original](https://www.b4x.com/android/forum/threads/b4x-jrdc2-b4j-implementation-of-rdc-remote-database-connector.61801/#content), diseñada para actuar como un backend robusto y flexible. Su función principal es recibir peticiones HTTP, ejecutar comandos SQL predefinidos contra una base de datos y devolver los resultados en un formato estructurado.
Ha sido adaptado para servir tanto a clientes nativos (`B4A/B4i`) como a clientes web modernos (`JavaScript`, a través de frameworks como `NodeJS, React, Vue, Angular, etc`.).
## **2\. Características Principales**
-----
- **Soporte para Múltiples Bases de Datos**: Puede cargar y gestionar hasta 4 archivos de configuración (`config.properties`) simultáneamente.
- **Comandos SQL Externalizados**: Las sentencias SQL se definen en los archivos de configuración, permitiendo modificarlas sin recompilar el servidor.
- **Doble Handler de Peticiones**: Incluye un handler clásico para clientes B4X y un handler JSON para clientes web.
- **Validaciones de Seguridad**: Verifica la existencia de comandos y la correspondencia en el número de parámetros.
- **Administración Remota**: Permite verificar el estado, recargar la configuración y reiniciar el servidor a través de URLs específicas.
## **2. Características Principales**
## **3\. Configuración**
* **Soporte para Múltiples Bases de Datos**: Puede cargar y gestionar hasta 4 archivos de configuración (`config.properties`) simultáneamente.
* **Comandos SQL Externalizados**: Las sentencias SQL se definen en los archivos de configuración, permitiendo modificarlas sin recompilar el servidor.
* **Doble Handler de Peticiones**: Incluye un handler clásico para clientes B4X y un handler JSON para clientes web.
* **Validaciones de Seguridad**: Verifica la existencia de comandos y la correspondencia en el número de parámetros antes de la ejecución.
* **Administración Remota**: Permite verificar el estado, recargar la configuración y reiniciar el servidor a través de URLs específicas, con un sistema de autenticación.
-----
## **3. Configuración**
### **3.1. Archivos de Configuración**
@@ -22,15 +26,15 @@ El sistema está preparado para manejar hasta **cuatro configuraciones de bases
La nomenclatura de los archivos es fundamental:
- `config.properties` (para `DB1`)
- `config.DB2.properties`
- `config.DB3.properties`
- `config.DB4.properties`
* `config.properties` (para `DB1`)
* `config.DB2.properties`
* `config.DB3.properties`
* `config.DB4.properties`
**Notas importantes:**
- El **puerto** del servidor se toma **únicamente** del archivo principal `config.properties`, sin importar lo que digan los demás.
- Los datos de conexión (`JdbcUrl`, `usuario`, `contraseña`) sí se toman del archivo correspondiente a cada base de datos.
* El **puerto** del servidor se toma **únicamente** del archivo principal `config.properties`, sin importar lo que digan los demás.
* Los datos de conexión (`JdbcUrl`, `usuario`, `contraseña`) sí se toman del archivo correspondiente a cada base de datos.
### **3.2. Añadir Drivers de Bases de Datos Adicionales**
@@ -43,38 +47,52 @@ Si necesitas conectarte a otros tipos de bases de datos (ej. Oracle), debes agre
Al compilar, el driver se incluirá en el `.jar` final del servidor, por lo que no será necesario copiarlo por separado al directorio de producción.
## **4\. Uso del Handler Clásico (Para Clientes B4X)**
-----
## **4. Validaciones de Seguridad**
El servidor realiza dos comprobaciones automáticas **en ambos handlers (B4X y JSON)** antes de ejecutar cualquier consulta:
1. **Verificación de Existencia del Comando**: El servidor comprueba que el nombre del comando SQL solicitado (ej. `"get_user"`) exista como una clave válida en el archivo `.properties` correspondiente. Si no lo encuentra, devolverá un error y no intentará ejecutar nada.
2. **Conteo de Parámetros**: Si el comando SQL en el archivo de configuración espera parámetros (contiene `?`), el servidor cuenta cuántos son y lo compara con el número de parámetros recibidos en la petición. Si las cantidades no coinciden, devolverá un error específico, evitando una ejecución fallida en la base de datos.
Estas validaciones aseguran que el desarrollador reciba feedback inmediato y claro si una petición está mal formada.
-----
## **5. Uso del Handler Clásico (Para Clientes B4X)**
Este handler mantiene la compatibilidad con `DBRequestManager`. La selección de la base de datos se realiza dinámicamente a través de la URL.
- Para `config.properties` \=\> `http://tu-dominio.com:8090`
- Para `config.DB2.properties` \=\> `http://tu-dominio.com:8090/DB2`
- Para `config.DB3.properties` \=\> `http://tu-dominio.com:8090/DB3`
- Para `config.DB4.properties` \=\> `http://tu-dominio.com:8090/DB4`
* Para `config.properties` =\> `http://tu-dominio.com:8090`
* Para `config.DB2.properties` =\> `http://tu-dominio.com:8090/DB2`
* Para `config.DB3.properties` =\> `http://tu-dominio.com:8090/DB3`
* Para `config.DB4.properties` =\> `http://tu-dominio.com:8090/DB4`
## **5\. Uso del DBHandlerJSON (Para Clientes Web)**
-----
## **6. Uso del DBHandlerJSON (Para Clientes Web)**
Este handler está diseñado para clientes que se comunican vía `JSON`, como aplicaciones web JavaScript.
### **5.1. Endpoint y Métodos de Envío**
### **6.1. Endpoint y Métodos de Envío**
Las peticiones van dirigidas al endpoint `/DBJ`. El handler es flexible y acepta datos de dos maneras:
**Método Recomendado: POST con Body JSON**
Esta es la forma más limpia y estándar para las APIs modernas.
- **Método HTTP**: POST
- **URL**: http://tu-dominio.com:8090/DBJ
- **Header Requerido**: Content-Type: application/json
- **Body (Payload)**: El objeto JSON se envía directamente en el cuerpo de la petición.
* **Método HTTP**: POST
* **URL**: `http://tu-dominio.com:8090/DBJ`
* **Header Requerido**: `Content-Type: application/json`
* **Body (Payload)**: El objeto JSON se envía directamente en el cuerpo de la petición.
**Ejemplo de Body:**
```
```json
{
"dbx": "DB2",
"query": "get\_user",
"query": "get_user",
"exec": "executeQuery",
"params": [
"CDAZA"
@@ -84,22 +102,20 @@ Esta es la forma más limpia y estándar para las APIs modernas.
**Método Legacy: GET con Parámetro `j`**
Este método se mantiene por retrocompatibilidad.
* **Método HTTP**: GET
* **URL**: El JSON completo se envía como el valor del parámetro `j` en la URL.
- **Método HTTP**: GET (o POST con Content-Type: application/x-www-form-urlencoded)
- **URL**: El JSON completo se envía como el valor del parámetro `j` en la URL.
**Ejemplo con GET:**
`http://tu-dominio.com:8090/DBJ?j={"dbx":"DB2","query":"get_user","exec":"executeQuery","params":["CDAZA"]}`
Ejemplo con GET:
http://tu-dominio.com:8090/DBJ?j={"dbx":"DB2","query":"get\_user","exec":"executeQuery","params":["CDAZA"]}
### **5.2. Formato del Payload JSON**
### **6.2. Formato del Payload JSON**
La estructura del objeto JSON es la misma para ambos métodos:
```
```json
{
"exec": "executeQuery",
"query": "nombre\_del\_comando\_sql",
"query": "nombre_del_comando_sql",
"dbx": "DB1",
"params": [
"valor1",
@@ -108,23 +124,38 @@ La estructura del objeto JSON es la misma para ambos métodos:
}
```
- `exec`: `"executeQuery"` (para SELECT) o `"executeCommand"` (para INSERT, UPDATE, DELETE).
- `query`: Nombre del comando SQL tal como está definido en el archivo de configuración (ej. `select\_user`).
- `dbx` (opcional): La llave de la base de datos (`DB1`, `DB2`, etc.). Si se omite, se usará **DB1** por defecto.
- `params` (opcional): Un objeto que contiene los parámetros para la consulta SQL.
* `exec`: `"executeQuery"` (para `SELECT`) o `"executeCommand"` (para `INSERT`, `UPDATE`, `DELETE`).
* `query`: Nombre del comando SQL tal como está definido en el archivo de configuración.
* `dbx` (opcional): La llave de la base de datos (`DB1`, `DB2`, etc.). Si se omite, se usará **DB1**.
* `params` (opcional): Un **array** que contiene los parámetros para la consulta SQL, en el orden exacto que se esperan.
### **5.3. Respuestas JSON**
### **6.3. Respuestas JSON**
Las respuestas del servidor siempre son en formato JSON e incluyen un campo booleano `success`.
- **Si success es true**, los datos se encontrarán en la llave `result`.
- **Si success es false**, el mensaje de error se encontrará en la llave `error`.
* **Si `success` es `true`**, los datos se encontrarán en la llave `result`.
* **Si `success` es `false`**, el mensaje de error se encontrará en la llave `error`.
## **6\. Administración del Servidor**
-----
Se pueden ejecutar comandos de gestión directamente desde un navegador o una herramienta como cURL.
## **7. Administración del Servidor**
- **Verificar Estado**: `http://tu-dominio.com:8090/test`
- **Recargar Configuración**: `http://tu-dominio.com:8090/manager?command=reload` (Vuelve a leer todos los archivos `config.\*.properties` sin reiniciar el servidor).
- **Reiniciar Servidor (Estándar)**: `http://tu-dominio.com:8090/manager?command=rsx` (Ejecuta los scripts `start.bat`, `start2.bat` y `stop.bat`).
- **Reiniciar Servidor (con PM2)**: `http://tu-dominio.com:8090/manager?command=rpm2` (Ejecuta `reiniciaProcesoPM2.bat` y asume que el nombre del proceso es "RDC-Multi". Modificar el `.bat` si el nombre es diferente).
Se pueden ejecutar comandos de gestión directamente desde un navegador o una herramienta como `cURL`.
### **7.1. Comandos de Administración**
#### **Comandos Públicos (sin autenticación)**
* **Verificar Conectividad**: `http://tu-dominio.com:8090/ping`
* Responde con un simple `PONG` y la `hora` para confirmar que el servidor está en línea.
* **Verificar Estado Detallado**: `http://tu-dominio.com:8090/test`
* Muestra información sobre las conexiones a la base de datos y el estado general.
#### **Comandos Protegidos (requieren autenticación)**
* **Recargar Configuración**: `http://tu-dominio.com:8090/manager?command=reload`
(Vuelve a leer todos los archivos `config.*.properties` sin reiniciar el servidor).
* **Reiniciar Servidor (Estándar)**: `http://tu-dominio.com:8090/manager?command=rsx`
(Ejecuta los scripts `start.bat`, `start2.bat` y `stop.bat`).
* **Reiniciar Servidor (con PM2)**: `http://tu-dominio.com:8090/manager?command=rpm2`
(Ejecuta `reiniciaProcesoPM2.bat` y asume que el nombre del proceso es "RDC-Multi". Modificar el `.bat` si el nombre es diferente).