Ir al contenido

Configurar la replicación de contenido entre dos instancias de OpenKM

El sistema sigue un modelo origen → destino: una instancia de OpenKM actúa como origen (monitoriza una carpeta y registra los cambios), mientras que otra actúa como destino (se conecta al origen, descarga los eventos y aplica los cambios localmente).

En el servidor de origen:

En el servidor de destino, deberá seguir estos pasos:

  • Iniciar Tomcat
  • Iniciar sesión en OpenKM
  • Ir a Administration > Utilities > Database query y ejecutar estas sentencias SQL para crear las propiedades de configuración necesarias:
insert into OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) values ('content.replication.monitored.folder', 'string', '');
  • content.replication.monitored.folder: UUID de la carpeta a monitorizar.

En el servidor de destino, deberá seguir estos pasos:

  • Iniciar Tomcat
  • Iniciar sesión en OpenKM
  • Ir a Administration > Utilities > Database query y ejecutar estas sentencias SQL para crear las propiedades de configuración necesarias:
insert into OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) values ('content.replication.target.folder', 'string', '');
insert into OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) values ('content.replication.source.url', 'string', '');
insert into OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) values ('content.replication.source.username', 'string', '');
insert into OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) values ('content.replication.source.password', 'string', '');

Establezca las propiedades de configuración según su uso:

  • content.replication.target.folder: UUID de la carpeta de destino local.
  • content.replication.source.url: URL base de la instancia de origen (por ejemplo, http://source-server:8080/openkm/).
  • content.replication.source.username: Nombre de usuario usado para autenticarse contra el origen.
  • content.replication.source.password: Contraseña del origen.

En la instancia ORIGEN (ContentReplicationManager)

Sección titulada «En la instancia ORIGEN (ContentReplicationManager)»

Cada vez que se realiza cualquier operación sobre contenido dentro de la carpeta monitorizada, se registra un evento en la tabla OKM_CONTENT_REPLICATION_EVENT. Los tipos de evento admitidos son:

  • Documentos: crear, actualizar, eliminar, purgar, renombrar, mover
  • Carpetas: crear, eliminar, purgar, renombrar, mover
  • Registros: crear, eliminar, purgar, renombrar, mover
  • Correos: crear, eliminar, purgar, mover
  • Grupos de propiedades: añadir, establecer, eliminar

La carpeta monitorizada se identifica por UUID (en caché en memoria tras la primera búsqueda).

En la instancia DESTINO (ContentReplicationScheduler)

Sección titulada «En la instancia DESTINO (ContentReplicationScheduler)»

El planificador se ejecuta cada 5 minutos (0 */5 * * * *) y realiza dos fases:

  1. Comprueba la tabla de estado local para determinar la marca de tiempo del último evento procesado.
  2. Llama al endpoint REST del origen: GET /rest/content-replication/events/since/{timestamp}
  3. Almacena los nuevos eventos como PENDING en OKM_CONTENT_REPLICATION_STATE
  1. Marca todos los eventos que están actualmente en estado ERROR como PENDING (reintento automático).
  2. Procesa cada evento pendiente invocando al gestor correspondiente (DocumentReplicationHandler, FolderReplicationHandler, etc.).
  3. Cada gestor descarga el contenido real desde el origen vía REST (GET /rest/documents/{uuid}/content, etc.) y lo aplica localmente.
  4. El evento se marca como DONE si tiene éxito, o como ERROR (con un mensaje) si falla.

El mecanismo de replicación se apoya en las siguientes tablas de base de datos:

Tabla Servidor Descripción
OKM_CONTENT_REPLICATION_EVENT Origen Almacena todos los eventos de replicación generados cuando se crea, modifica o elimina contenido dentro de la carpeta monitorizada.
OKM_CONTENT_REPLICATION_STATE Destino Realiza un seguimiento del estado de procesamiento de los eventos de replicación (PENDING, DONE, ERROR).

Estados de evento (tabla OKM_CONTENT_REPLICATION_STATE)

Sección titulada «Estados de evento (tabla OKM_CONTENT_REPLICATION_STATE)»
Nombre Evento
PENDING Esperando a ser procesado
DONE Procesado correctamente
ERROR Falló; se reintentará en la siguiente ejecución del planificador