Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
如何在部署到JBoss的JAR文件中设置Quartz调度程序?_Jar_Jboss_Quartz Scheduler - Fatal编程技术网

如何在部署到JBoss的JAR文件中设置Quartz调度程序?

如何在部署到JBoss的JAR文件中设置Quartz调度程序?,jar,jboss,quartz-scheduler,Jar,Jboss,Quartz Scheduler,我使用的是Quartz 2.1.1,有一个JAR应用程序(注意,不是web,所以我没有Spring)。我正在JBoss4.2.2上运行我的应用程序(无法更改)。我希望将作业计划为每5分钟运行一次,但不希望通过静态块创建计划程序。它似乎无论如何都不起作用。在我的职业课上,我有 static { LOG.info("Started static process orders job at " + (new java.util.Date()).toString()); final J

我使用的是Quartz 2.1.1,有一个JAR应用程序(注意,不是web,所以我没有Spring)。我正在JBoss4.2.2上运行我的应用程序(无法更改)。我希望将作业计划为每5分钟运行一次,但不希望通过静态块创建计划程序。它似乎无论如何都不起作用。在我的职业课上,我有

static {
    LOG.info("Started static process orders job at " + (new java.util.Date()).toString());

    final JobDetail job = JobBuilder.newJob(ProcessOrdersJob.class).withIdentity("processOrdersJob", "group1").build();

    final Trigger trigger = TriggerBuilder
            .newTrigger()
            .withIdentity("processOrdesrTrigger", "group1")
            .withSchedule(
                    CronScheduleBuilder
                            .cronSchedule("0 5,10,15,20,25,30,35,40,45,50,55 * * * ?"))
            .build();

    Scheduler scheduler;
    try {
        scheduler = new StdSchedulerFactory().getScheduler();
        scheduler.start();
        scheduler.scheduleJob(job, trigger);
    } catch (SchedulerException e) {
        LOG.error(e.getMessage(), e);
        e.printStackTrace(System.err);
    }
} // static
但它似乎没有运行(日志中从未包含信息消息)。有人知道在JAR中配置Quartz作业以部署到JBoss的更灵活的方法吗

谢谢

编辑:我尝试了Rosdi的建议,将Maven build使用的Quartz恢复到1.5.2(与JBoss安装的版本相同),但遗憾的是,出现了例外

javax.ejb.EJBTransactionRolledbackException: java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
    at org.jboss.ejb3.tx.Ejb3TxPolicy.handleInCallerTx(Ejb3TxPolicy.java:87)
    at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:130)
    at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:249)
    at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:268)
    at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:138)
    at $Proxy113.execute(Unknown Source)
    at org.jboss.resource.adapter.quartz.inflow.QuartzJob.execute(QuartzJob.java:57)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
    at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:174)
    at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
    ... 11 more
Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
    at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.<clinit>(BeanValidationIntegrator.java:53)
    at org.hibernate.integrator.internal.IntegratorServiceImpl.<init>(IntegratorServiceImpl.java:46)
    at org.hibernate.service.internal.BootstrapServiceRegistryImpl.<init>(BootstrapServiceRegistryImpl.java:80)
    at org.hibernate.service.internal.BootstrapServiceRegistryImpl.<init>(BootstrapServiceRegistryImpl.java:57)
    at org.hibernate.service.ServiceRegistryBuilder.<init>(ServiceRegistryBuilder.java:76)
    at org.mainco.subco.dido.service.AbstractServiceProvider.getSessionFactory(AbstractServiceProvider.java:67)
    at org.mainco.subco.dido.service.AbstractServiceProvider.initServices(AbstractServiceProvider.java:118)
    at org.mainco.subco.dido.quartz.ProcessOrdersJob.execute(ProcessOrdersJob.java:92)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
javax.ejb.EJBTransactionRolledbackException:java.lang.NoSuchMethodError:org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
位于org.jboss.ejb3.tx.Ejb3TxPolicy.handleInCallerTx(Ejb3TxPolicy.java:87)
在org.jboss.aspects.tx.TxPolicy.invokeincalertx(TxPolicy.java:130)上
位于org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
位于org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
位于org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:249)
位于org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:268)
位于org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:138)
在$Proxy113.execute处执行(未知源)
位于org.jboss.resource.adapter.quartz.inflow.QuartzJob.execute(QuartzJob.java:57)
位于org.quartz.core.JobRunShell.run(JobRunShell.java:203)
位于org.quartz.siml.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
原因:java.lang.RuntimeException:java.lang.NoSuchMethodError:org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
位于org.jboss.ejb3.interceptor.InvocationContextImpl.procedure(InvocationContextImpl.java:174)
位于org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
位于org.jboss.ejb3.entity.TransactionScopeDentityManagerAcceptor.invoke(TransactionScopeDentityManagerAcceptor.java:54)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
位于org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
在org.jboss.aspects.tx.TxPolicy.invokeincalertx(TxPolicy.java:126)上
... 还有11个
原因:java.lang.NoSuchMethodError:org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
位于org.hibernate.cfg.beanvalidation.BeanValidationIntegrator。(BeanValidationIntegrator.java:53)
位于org.hibernate.integrator.internal.IntegratorServiceImpl.(IntegratorServiceImpl.java:46)
位于org.hibernate.service.internal.BootstrapServiceRegistryImpl.(BootstrapServiceRegistryImpl.java:80)
位于org.hibernate.service.internal.bootstrapserviceregistrympl.(bootstrapserviceregistrympl.java:57)
位于org.hibernate.service.ServiceRegistryBuilder。(ServiceRegistryBuilder.java:76)
位于org.mainco.subco.dido.service.AbstractServiceProvider.getSessionFactory(AbstractServiceProvider.java:67)
位于org.mainco.subco.dido.service.AbstractServiceProvider.initServices(AbstractServiceProvider.java:118)
位于org.mainco.subco.dido.quartz.ProcessOrdersJob.execute(ProcessOrdersJob.java:92)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)

这是我在JBoss 5中使用的,我不知道它是否能在JBoss 4下工作

package whatever;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;

import org.jboss.ejb3.annotation.Depends;
import org.jboss.ejb3.annotation.ResourceAdapter;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.StatefulJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


@MessageDriven(activationConfig = {@ActivationConfigProperty(propertyName = "cronTrigger", propertyValue = "0/30 * * * * ?")})
@ResourceAdapter("quartz-ra.rar")
@Depends({
"jboss.ejb:service=EJBTimerService""})
public class MyClass implements StatefulJob {

private static final Logger log = LoggerFactory.getLogger(MyClass.class);

public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
    log.debug("Job started at: " + new Date());
    this.process();
    log.debug("Job completed at: " + new Date());
}

private void process() {
    //do whatever you want to do
}

}

谢谢你的建议,但当我尝试时,我得到了上面提到的奇怪的错误。不确定它在哪里崩溃。@Dave,尝试移除日志(
org.slf4j.Logger
org.slf4j.LoggerFactory
),看看它是否能工作。我已经更进一步了。这个错误是由JBoss的hibernate库在我的JAR文件打包的库上使用引起的。有没有一种方法可以让JBoss接受我的Hibernate库而不是它自己的——在JAR的结构中?@Dave我很肯定你可以,你可以在
META-INF/JBoss classload.xml
中设置它。参考这里,这家伙比我解释得更好:@Dave我忘了你正在使用JBoss4,如果上面的链接没有帮助,请尝试这里,对不起,我从来没有在JBoss4上工作过,所以帮不了什么忙。