quartz作业调度程序不能用作OSGI包

时间:2014-03-14 08:52:01

标签: java maven quartz-scheduler osgi-bundle karaf

我的代码包含石英计划的基本例子。在正常的Java应用程序中它运行但是当我将它作为一个包转换并在karaf中部署它时它不起作用。

    @Component
    @Service
    public class testImpl implements testI {
    @Override
    public void test() {
    System.out.println("testImpl started");
    try {

        JobDetail job = JobBuilder.newJob(TestJob.class)
            .withIdentity("testJob")
            .build();
        System.out.println("job \n");

        Trigger trigger = TriggerBuilder.newTrigger()
              .withSchedule(  
                    SimpleScheduleBuilder.simpleSchedule()
                    .withIntervalInSeconds(5)
                    .repeatForever())  
                         .build();  

        System.out.println("trigger \n ");

    //THIS PARTICULAR LINE ONWARDS THE CODE IS NOT EXCUTING IM NOT GETTING SYSOUT AFTER THIS LINE.  
    SchedulerFactory schFactory = new StdSchedulerFactory();
    System.out.println("scheduler \n");
        Scheduler sch = schFactory.getScheduler();


        sch.start();            
        sch.scheduleJob(job, trigger);      

    } catch (Exception e) {
        e.printStackTrace();
    }
}

计划正在抛出像

这样的例外
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.quartz.impl.StdSchedulerFactory.<init>(StdSchedulerFactory.java:298)
at com.ericsson.testImpl.testImpl.test(testImpl.java:77)
at com.ericsson.testConsumer.testConsumer.bindTestI(testConsumer.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

但据我所知,Karaf对slf4j有内置支持。无需显式添加slf4j bundle。

2 个答案:

答案 0 :(得分:1)

我找到了错误的根本原因。在Quartz jar pom.xml中,slf4j依赖版本为1.6.1,而我的Karaf-2.3.3内置slf4j依赖版本为1.6.6。使用正确的依赖版本更改石英pom有助于。

答案 1 :(得分:0)

我很确定,您错过了Manifest.MF文件中的导入。

打开捆绑包的清单,在&#34; Import-Package&#34;部分应该是org.slf4j。您似乎缺少导入包。

 Import-Package: .....,org.slfj,....

如果您使用maven-bundle-plugin,请扩展您的配置:

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Import-Package>org.slf4j</Import-Package>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
  </build>

如果这个答案没有帮助,请将完整的堆栈跟踪和mvn dependency:tree的输出添加到您的问题中。