在IBM Domino应用程序中使用Quartz Scheduler

我是Quartz的新手,但是要了解它,必须知道3件事。 这些是作业,触发器和调度程序。

现在,在我们的Domino应用程序中,我们必须使用它来刷新令牌。

我为此创建了3个基本类。

工作:

public class RefreshEGRZTokenJob implements Job 
{
    public void execute(JobExecutionContext arg0) throws JobExecutionException 
    {
        System.out.println("stub for refreshing a token");  
    }
}

触发器和类似main的东西:

public class RefreshEGRZTokenExecutor
{
    private static String REFRESH_TOKEN_JOB = "refreshTokenJob";

    public static void executeAndScheduleRefreshToken(int timeInSeconds) throws SchedulerException 
    {
        JobDetail job = JobBuilder.newJob(RefreshEGRZTokenJob.class)
        .withIdentity(REFRESH_TOKEN_JOB).build();

        Trigger trigger =  TriggerBuilder
        .newTrigger()
        .withIdentity(REFRESH_TOKEN_JOB)
        .withSchedule(
            SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(timeInSeconds).repeatForever())
        .build();

        QuartzScheduler.getInstance().scheduleJob(job,trigger);
    }

    public static void pauseScheduler() throws SchedulerException 
    {
        QuartzScheduler.getInstance().standby();
    }
}

还有调度程序:

public final class QuartzScheduler 
{
    private static Scheduler quartzSchedulerInstance;

    public static Scheduler getInstance() throws SchedulerException 
    {
        if (quartzSchedulerInstance == null) 
        {
            Scheduler scheduler = new StdSchedulerFactory().getScheduler();
            scheduler.start();
            quartzSchedulerInstance = scheduler;
        }
        return quartzSchedulerInstance;
    }
}

我的呼叫来自一个按钮(在生产中,它将在用户授权后立即执行)

 <xp:eventHandler event="onclick" submit="true"
    refreshMode="complete">
    <xp:this.action><![CDATA[#{javascript:      
    ru.lanit.egrz.scheduler.RefreshEGRZTokenExecutor.executeAndScheduleRefreshToken(30);


    }]]>
    </xp:this.action>

 </xp:eventHandler>

好,石英调度程序已初始化并且已设置作业,但不执行该作业(我知道这一点是因为如果我两次按相同的按钮,则会使我不难发现该作业已存在)。

我想Domino的JVM不会让调度程序无限期地运行。

我不使用标准IBM代理的原因很简单-Code部分中不允许使用Java代码。您必须导入并复制到目前为止的所有内容,或者将其编译为jar并导入。但是,如果您决定更改源代码中的任何内容,则必须重新编译整个jar(使用新的源代码)并重新导入。

有人集成了Domino JVM和Quartz吗?

如果是,请告诉我最佳做法以及如何使其发挥作用。

谢谢。

mayanfei_777 回答:在IBM Domino应用程序中使用Quartz Scheduler

您在这里需要克服一系列障碍:

  1. 您的调度程序需要“永远”运行,因此您需要在不死的地方运行它。那个地方是OSGi插件。计划程序的位置将是激活程序类。遵循这些原则:
import java.util.logging.Logger;

import org.eclipse.core.runtime.Plugin;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator extends Plugin implements BundleActivator {

 @Override
    public void start(final BundleContext context) throws Exception {
       // Here you start your scheduler
    }

}
  1. 您需要从某个地方调用它(而不应该是SSJS)。因此,您将创建一个可以访问插件激活器的托管Bean。将Bean代码放入插件中。定义好之后,您可以在按钮中调用bean方法

  2. 您的调度程序将运行令牌刷新。刷新的令牌应该怎么办?


说了这么多。您可能可以使用更简单的解决方案(除非令牌需要毫秒级的精度):

  • 为会话上下文创建一个managed bean(每个bean分别针对每个用户实例化)。
  • 在Bean中有一个方法,您将在按钮(或其他位置)上调用new thread进行调用。该线程sleeps for a while在再次执行之前。检查是否有被关闭的属性,以便可以正常终止。

希望有帮助

,

我已经创建了一个插件,您可以在这里找到它:https://github.com/hasselbach/domino-quartz

缺少功能项目和updatesite项目。

您必须在服务器和DDE中安装插件,然后在XPages应用程序中将其激活。

本文链接:https://www.f2er.com/2998992.html

大家都在问