Планировщик AEM должен автоматически запускаться после развертывания - PullRequest
0 голосов
/ 06 января 2020

Требуется код планировщика AEM в пакете, чтобы выбрать конфигурацию osgi и начать выполнение автоматически, как только пакет будет развернут. В настоящее время после развертывания пакета с кодом планировщика каждый раз нужно сохранять конфигурацию для соответствующего планировщика, чтобы запустить его.

Любые указатели на нем будут очень полезны.

Ответы [ 2 ]

0 голосов
/ 06 января 2020

Проверьте демонстрационный планировщик, предоставленный в проекте, когда создается новый проект с использованием многомодульного архетипа. Ниже приведен фрагмент из того же самого, который определяет планировщик для запуска каждые 30 секунд. Это можно изменить в конфигурации системы.

@Designate(ocd=SimpleScheduledTask.Config.class)
@Component(service=Runnable.class)
public class SimpleScheduledTask implements Runnable {

    @ObjectClassDefinition(name="A scheduled task",
                           description = "Simple demo for cron-job like task with properties")
    public static @interface Config {

        @AttributeDefinition(name = "Cron-job expression")
        String scheduler_expression() default "*/30 * * * * ?";

        @AttributeDefinition(name = "Concurrent task",
                             description = "Whether or not to schedule this task concurrently")
0 голосов
/ 06 января 2020

Задание Sling Scheduler - это просто Runnable как OSGi-сервис. Служба Sling Scheduler найдет их все и сработает в соответствии с их конфигурацией (с использованием стиля cron или periodi c).

https://sling.apache.org/documentation/bundles/scheduler-service-commons-scheduler.html

Если вы хотите использовать Config-Class, пожалуйста, расширьте свой вопрос с помощью своего кода (сокращенного до основных, в вашем случае - конфигурации и задания планировщика.

Вот рабочий пример. Задание запускается каждые 5 секунд, как только пакет активируется. Независимо от того, как пакет остановлен / запущен или AEM выключается и перезапускается.

import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.invoke.MethodHandles;

@Component(service = Runnable.class,
        property = {
                "scheduler.expression=*/5 * * * * ?"
        })
public class SchedulerTest implements Runnable {

    private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

    public void run() {
        LOG.info("run");
    }

    @Activate
    protected void activate() {
        LOG.info("activated");
    }
}
...