我是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吗?
如果是,请告诉我最佳做法以及如何使其发挥作用。
谢谢。