Crear su propio plugin de Crontab
Puede crear su propio Antivirus Analyzer.
Condiciones:
- La nueva clase Antivirus Analyzer debe implementar la interfaz “CronAdapter”.
- La nueva clase Antivirus Analyzer debe declararse bajo el paquete “com.openkm.plugin.cron”.
- La nueva clase Antivirus Analyzer debe estar anotada con “@PluginImplementation”.
- La nueva clase Antivirus Analyzer debe extender “BaseCronPlugin”.
Interfaz Antivirus Analyzer:
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();}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í.
Descripción del método
Sección titulada «Descripción del método»| 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 cron
Sección titulada «Ejemplo de implementación de cron»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;
@PluginImplementationpublic 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 una tarea de crontab
Sección titulada «Entender el contexto de ejecución de una tarea de crontab»Contexto de ejecución:
- La tarea de crontab se ejecuta con el usuario interno llamado “system” (la tarea no tiene una sesión de usuario válida).
- La tarea de crontab se ejecuta con el usuario administrador (la tarea tiene una sesión de usuario válida).
Utilizar el token del sistema es una buena práctica al llamar a métodos de la API desde una tarea de crontab:
String systemToken = DbSessionManager.getInstance().getSystemsystemToken();OKMFolder.getInstance().createSimple(systemToken, "/okm:root/test")