Ir al contenido

Crear su propio plugin de Crontab

Puede crear su propio plugin de Crontab.

Condiciones:

  • La nueva clase de plugin de Crontab debe implementar la interfaz “CronAdapter”.
  • La nueva clase de plugin de Crontab debe declararse bajo el paquete “com.openkm.plugin.cron”.
  • La nueva clase de plugin de Crontab debe anotarse con@PluginImplementation”.
  • La nueva clase de plugin de Crontab debe extender “BaseCronPlugin”.

Interfaz CronAdapter:

package com.openkm.plugin.cron;
import net.xeoh.plugins.base.Plugin;
public interface CronAdapter extends Runnable, Plugin {
/**
* The cron name
*/
String getName();
/**
* The default cron expression what will be registered the first time
*/
String getCronExpression();
/**
* Return if task is running or not
*/
boolean isRunning();
/**
* Cron task execution
*/
void execute() throws Throwable;
}

La nueva clase debe cargarse en el paquete com.openkm.plugin.cron porque el sistema de plugins de la aplicación intentará cargarla desde ahí.

Método Tipo Descripción
getName() String Devuelve el nombre del crontab.
getCronExpression String Devuelve la expresión cron.
isRunning Boolean Devuelve true cuando la tarea cron se está ejecutando.
execute Void Ejecuta la tarea cron.

Ejemplo de implementación de un cron de disposición

Sección titulada «Ejemplo de implementación de un cron de disposición»
package com.openkm.plugin.cron;
import com.openkm.api.OKMRepository;
import com.openkm.bean.Folder;
import com.openkm.module.db.stuff.DbSessionManager;
import com.openkm.util.FileLogger;
import net.xeoh.plugins.base.annotations.PluginImplementation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@PluginImplementation
public class TestCron extends BaseCronPlugin implements CronAdapter {
private static Logger log = LoggerFactory.getLogger(TestCron.class);
private static String LOG_NAME = "TestCron";
@Autowired
private OKMRepository okmRepository;
@Override
public String getName() {
return "Cron test";
}
@Override
public String getCronExpression() {
return "0 * * * * *";
}
@Override
public void execute() {
try {
FileLogger.info(LOG_NAME, ">>> Started");
// Use always system token in your cron
String token = DbSessionManager.getInstance().getSystemToken();
Folder rootFolder = okmRepository.getRootFolder(token);
FileLogger.info(LOG_NAME, "Root folder uuid: " + rootFolder.getUuid());
FileLogger.info(LOG_NAME, ">>> Finished");
} catch (Exception e) {
log.error(e.getMessage());
}
}
}

Entender el contexto de ejecución de la tarea crontab

Sección titulada «Entender el contexto de ejecución de la tarea crontab»

Contexto de ejecución:

  • La tarea crontab se ejecuta con el usuario interno llamado “system” ( la tarea no tiene una sesión de usuario válida ).
  • La tarea crontab se ejecuta con el usuario administrador ( la tarea tiene una sesión de usuario válida ).

Es buena práctica usar el token de sistema al llamar a métodos de la API en una tarea crontab:

String systemToken = DbSessionManager.getInstance().getSystemToken();
OKMFolder.getInstance().createSimple(systemToken, "/okm:root/test")