Я пытаюсь получить простой пример планировщика Quartz, работающего в JBoss Seam 2.2.0.GA. Все отлично работает с настройкой RAMJobStore, но меняя магазин с
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
до
org.quartz.jobStore.class org.quartz.impl.jdbcjobstore.JobStoreCMT
org.quartz.jobStore.driverDelegateClass org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.useProperties false
org.quartz.jobStore.dataSource quartzDatasource
## FIXME Should be a different datasource for the non managed connection.
org.quartz.jobStore.nonManagedTXDataSource quartzDatasource
org.quartz.jobStore.tablePrefix qrtz_
org.quartz.dataSource.quartzDatasource.jndiURL java:/quartzDatasource
позволяет планировщику запускаться, но, хотя ранее задание запускалось и выполнялось с правильным интервалом, теперь оно вообще не запускается. В базе данных кварца также ничего не сохранилось.
Мне известно, что nonManagedTXDataSource не должен совпадать с управляемым источником данных, но у меня возникают проблемы с тем, что источник данных не может быть найден Quartz, даже если ранее сообщалось о том, что он успешно связан ( это, вероятно, собирается быть задан в отдельном вопросе). Использование того же источника данных позволяет службе запускаться без ошибок.
В файле Мои компоненты.xml есть следующее:
<event type="org.jboss.seam.postInitialization">
<action execute="#{asyncResultMapper.scheduleTimer}"/>
</event>
<async:quartz-dispatcher/>
и ASyncResultMapper имеет следующее:
@In
ScheduleProcessor processor;
private String text = "ahoy";
private QuartzTriggerHandle quartzTriggerHandle;
public void scheduleTimer() {
String cronString = "* * * * * ?";
quartzTriggerHandle = processor.createQuartzTimer(new Date(), cronString, text);
}
и ScheduleProcessor выглядит следующим образом:
@Name("processor")
@AutoCreate
@Startup
@Scope(ScopeType.APPLICATION)
public class ScheduleProcessor {
@Asynchronous
public QuartzTriggerHandle createQuartzTimer(@Expiration Date when, @IntervalCron String interval, String text) {
process(when, interval, text);
return null;
}
private void process(Date when, String interval, String text) {
System.out.println("when = " + when);
System.out.println("interval = " + interval);
System.out.println("text = " + text);
}
}
Журналы показывают, что служба запускается, но ничего о работе:
INFO [QuartzScheduler] Quartz Scheduler v.1.5.2 created.
INFO [JobStoreCMT] Using db table-based data access locking (synchronization).
INFO [JobStoreCMT] Removed 0 Volatile Trigger(s).
INFO [JobStoreCMT] Removed 0 Volatile Job(s).
INFO [JobStoreCMT] JobStoreCMT initialized.
INFO [JobStoreCMT] Freed 0 triggers from 'acquired' / 'blocked' state.
INFO [JobStoreCMT] Recovering 0 jobs that were in-progress at the time of the last shut-down.
INFO [JobStoreCMT] Recovery complete.
INFO [JobStoreCMT] Removed 0 'complete' triggers.
INFO [JobStoreCMT] Removed 0 stale fired job entries.
INFO [QuartzScheduler] Scheduler FlibScheduler$_NON_CLUSTERED started.
Я уверен, что это, наверное, что-то тривиальное, что я пропустил, но я нигде не могу найти решение на форумах.