【问题标题】:How quartz would start EJB stateless component?石英如何启动 EJB 无状态组件?
【发布时间】:2011-02-02 13:56:30
【问题描述】:

我正在使用 Jboss5.1.x、EJB3.0

我这几天一直在研究这个主题。听说应该很容易,但好像是因为文件太少或者有些东西我很难弄到。

我的场景是有一个计划任务,当我第一次将我的应用程序服务器项目部署到 jboss 时会触发该任务,然后我希望我的进程每 X 次重新执行一次。

我终于设法将石英 mbean 添加到 jboss-service.xml

但是:

  1. 服务器部署后如何自动触发?我看到我必须通过 servlet 来做?那么我将如何在项目部署中触发 servlet?我不能在没有 servlet 的情况下触发它并直接在 EJB bean 上执行它吗?

  2. 触发后,我想从触发方法调用一个EJB无状态bean。

我希望场景是这样的:

(应用部署 -> Quartz -> EJB bean -> ..) insteadof (应用部署 -> Quartz -> servlet -> EJB bean)

我该怎么做?这是我找到的代码:

        InitialContext ctx = new InitialContext();
        StdScheduler scheduler = (StdScheduler) ctx.lookup("Quartz");

        JobDetail jd = new JobDetail("myjob", scheduler.DEFAULT_GROUP, NewJob.class);
        CronTrigger ct = new CronTrigger("cronTrigger", "group2", "0 0/5 * * * ?");
        scheduler.scheduleJob(jd, ct);

似乎这段代码只触发了 POJO(“NewJob.class”)。我想触发 EJB 无状态 bean。

有人有答案吗?请.. 最坏的情况我会从 Quartz 切换到别的东西。

谢谢, 射线。

【问题讨论】:

    标签: java jboss quartz-scheduler jboss5.x


    【解决方案1】:

    我不完全理解你的问题——或者更确切地说,我猜这里有不止一个问题,但我不太理解它的语言,因为你似乎使用了“触发器”这个词(一个石英术语)不止一种方式。

    无论如何,我可以清楚地理解和回答您的一个问题,那就是如何让石英在您的 EJB 上调用方法。只需编写一个 Job 类,该类在其 execute() 方法中包含知道如何查找和调用该 EJB 的代码。然后是该作业的调度程序和实例,每当它触发时,它都会调用 EJB。 Quartz 实际上附带了一个 EJBInvokerJob 可以做到这一点,因此您可能无需修改即可使用它,或者可能希望使用它的源代码作为您的起点。 (请注意,Job quartz 附带调用 EJB v.2 bean。但是,有一个类可用于调用 EJB3 bean,您可以在此处下载:http://jira.opensymphony.com/browse/QUARTZ-732

    您需要重申的关于 mbean 和 servlet 的其他问题,因为它让我感到困惑,为什么您会同时使用这两种机制。

    【讨论】:

    • 您好,感谢您的回复,我检查了您的链接,但没有提及您如何设置工作时间?您在哪里设置 crontab 或设置触发时间所需的任何内容?
    • 请查看石英随附的示例和/或石英网站上的教程。真的不难。 quartz-scheduler.org/docs
    • 还写了如何安排工作。那不是问题所在。 mybe prob 是在应用程序部署时触发该工作。我找不到任何相关文件。
    猜你喜欢
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多