java - quartz如何启动EJB无状态组件?

标签 java jboss quartz-scheduler jboss5.x

我使用的是Jboss5.1.x,EJB3.0

我已经研究这个主题好几天了。听说很简单,但好像要么是缺少文件,要么是我很难得到一些东西。

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

我终于成功地将quartz mbean添加到jboss-service.xml

但是:

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

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

我希望场景是这样的:

(应用程序部署 -> Quartz -> EJB bean -> ..)代替(应用程序部署 -> 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 切换到其他东西。

谢谢, 射线。

最佳答案

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

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

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

关于java - quartz如何启动EJB无状态组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4875260/

相关文章:

java - Xamarin:在 Visual Studio 2013 中更改 JDK 位置

java - 如何将消息备份从一台 HornetQ 服务器复制到另一台服务器?

java - 为什么 quartz 不重新启 Action 业?

java - 如何在Quartz调度器中实现排队?

java - 如何在Struts中使用servlet在JSP中动态检索SQL记录

java - 我的 Controller 在运行时工作,但 mockkmvc 测试失败,因为依赖项甚至不在类中

java - EJB + JBoss7 Porj 原型(prototype)

java - 由于两个服务器实例,同一个 quartz 作业运行两次

java - Google App Engine - 需要在本地主机上使用 SSL 来开发 Canvas 应用程序

mysql - Jboss Messaging (jbm_tx) 表不断增长