如何在Jboss AS 7.0中启用Quartz调度?

时间:2011-07-19 00:10:08

标签: jboss jboss7.x quartz-scheduler

Quartz似乎没有包含在Jboss AS 7.0 Final(完整版)的默认安装中。尝试加载消息驱动Bean(MDB)“FareMonitorBean”时,我的EAR部署似乎失败。该MDB是石英计划执行的。

错误讯息:

10:00:34,034 WARN  [org.jboss.modules] (MSC service thread 1-7) Failed to define class com.myproject.beans.FareMonitorBean in Module "deployment.myprojectEAP.ear.myprojectEJB.jar:main" from Service Module Loader: java.lang.LinkageError: Failed to link com/myproject/beans/FareMonitorBean (Module "deployment.myprojectEAP.ear.myprojectEJB.jar:main" from Service Module Loader)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:401)
.....
Caused by: java.lang.NoClassDefFoundError: org/quartz/Job
at java.lang.ClassLoader.defineClass1(Native Method) [:1.6.0_26]
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) [:1.6.0_26]
at java.lang.ClassLoader.defineClass(ClassLoader.java:615) [:1.6.0_26]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) [:1.6.0_26]
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:397)
... 18 more

MDB“FareMonitorBean”类文件摘要:

@MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "cronTrigger", propertyValue = EJBConstants.FARE_MONITOR_QUARTZ_SCHEDULE_STRING) })
@ResourceAdapter("quartz-jboss-2.0.2.jar")
public class FareMonitorBean implements Job {

    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        ....
    }
}

基于JBoss documentation,我的猜测是需要在独立/配置/ standalone.xml中为Quartz配置“扩展”和“子系统”,但是我不知道如何做到这一点。我搜索了谷歌,jboss论坛,石英支持doco,找不到任何东西。我认为Quartz不能与Jboss的“最终”版本一起使用似乎有点差,因为调度程序肯定是完全成熟的应用程序服务器的常见和必需功能?!

我可以遵循的任何建议或例子让它发挥作用吗?


2011年8月28日更新:

有人可以帮我解决这个问题吗?我有JBoss 6.0的稳定性问题和许多错误,并考虑转换到GlassFish 3.1,如果Jboss仍然是一个具有挑战性的事业。只是我还是Jboss充满了错误和问题?!

1 个答案:

答案 0 :(得分:4)

NoClassDefFoundError可能与缺少的依赖关系有关。 你的jboss中有石英jar文件吗?也许这个文档有帮助: https://docs.jboss.org/author/display/AS7/How+do+I+migrate+my+application+from+AS5+or+AS6+to+AS7#HowdoImigratemyapplicationfromAS5orAS6toAS7-HowtoResolveClassNotFoundExceptionsandNoCLassDefFoundErrors

这是我在JBoss 7中使用quartz的解决方法:

不幸的是,AS7 Final不支持@Schedule注释(参见JBoss问题AS7-1158)

所以我通过maven依赖项将石英jar打包到我的EAR文件中。

然后我使用这个启动bean来添加作业并启动调度程序,如石英示例中所述: http://quartz-scheduler.org/docs/examples/index.html

@Singleton
@Startup
public class StartupBean
{

    @PostConstruct
    private void scheduleJobs()
    {
         // Exception Handling omitted
         final Scheduler sched = new StdSchedulerFactory().getScheduler();
         sched.scheduleJob( createJob(), createTrigger());
         sched.start();
    }

}