Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为Seam中的持久化Quartz作业从RAMJobStore迁移到JobStoreCMT_Java_Seam_Quartz Scheduler_Scheduler - Fatal编程技术网

Java 如何为Seam中的持久化Quartz作业从RAMJobStore迁移到JobStoreCMT

Java 如何为Seam中的持久化Quartz作业从RAMJobStore迁移到JobStoreCMT,java,seam,quartz-scheduler,scheduler,Java,Seam,Quartz Scheduler,Scheduler,我试图得到一个石英调度器在JBossSeam2.2.0.GA中工作的简单示例。使用RAMJobStore设置,一切都可以正常工作,但是将存储从 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 到 允许计划程序启动,但作业以前被触发并以正确的时间间隔运行,但现在根本不运行。石英数据库中也没有任何持久性内容 我知道非ManagedTxDataSource不应与托管数据源相同,但我发现Quartz无法找到该数据源,尽管前面有一条消息报

我试图得到一个石英调度器在JBossSeam2.2.0.GA中工作的简单示例。使用RAMJobStore设置,一切都可以正常工作,但是将存储从

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

允许计划程序启动,但作业以前被触发并以正确的时间间隔运行,但现在根本不运行。石英数据库中也没有任何持久性内容

我知道非ManagedTxDataSource不应与托管数据源相同,但我发现Quartz无法找到该数据源,尽管前面有一条消息报告它已成功绑定(这可能将在单独的问题中提出)。使用相同的数据源允许服务无错误地启动

My components.xml文件包含以下内容:

<event type="org.jboss.seam.postInitialization"> 
   <action execute="#{asyncResultMapper.scheduleTimer}"/> 
</event>
<async:quartz-dispatcher/>
@In
ScheduleProcessor processor;
private String text = "ahoy";
private QuartzTriggerHandle quartzTriggerHandle;

public void scheduleTimer() {
    String cronString = "* * * * * ?";
    quartzTriggerHandle = processor.createQuartzTimer(new Date(), cronString, text);
}
调度处理器如下所示:

@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.

我肯定这可能是我错过的一些琐碎的事情,但我在任何地方的论坛上都找不到解决方案。

最终为自己解决了这个问题。JobStoreCMT版本无法启动和触发作业的问题是由缺少@Transactional(感谢tair)和更重要的是需要升级Quartz的混合因素造成的。一旦Quartz升级到1.8.5,错误消息就变得非常有用。

当使用CMT Quartz无法处理事务时,Seam负责处理。因此,您的createQuartzTimer应该在TX内运行。AFAIK在初始化后还没有运行TX。您是否尝试将@Transactional放在createQuartzTimer上?添加@Transactional没有启动作业。无论使用哪种注释,都会调用该方法(使用简单的日志语句进行检查)。我已经测试了这个设置:JBoss EAP 5.1.1+Seam 2.2.2+quartz 1.6.5+Postgresql 9.1(我们在项目中使用它),它工作得很好。您的日志显示您使用的是与JBoss AS捆绑在一起的较旧的quartz 1.5.2版本,但是Seam是根据1.6 api进行测试的。我认为您实际上指的是@Transactional
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.