график кварцевых заданий не работает как пакет OSGI

1

Мой код содержит основной пример кварцевого расписания. В обычном Java-приложении его работает, но когда Im конвертирует его в виде пакета и развертывает его в 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.

Теги:
maven
quartz-scheduler
karaf
osgi-bundle

2 ответа

1
Лучший ответ

Я обнаружил причину ошибки. В Quartz jar pom.xml версия зависимости slf4j была 1.6.1, а моя зависимая от Karaf-2.3.3 встроенная slf4j - 1.6.6. Смена кварцевой помпы с правильной версией для зависимостей помогает.

0

Я уверен, вы пропустите импорт в вашем файле Manifest.MF.

Откройте манифест вашего пакета, в разделе "Импорт-Пакет" должен быть org.slf4j. Кажется, вам не хватает импорта пакета.

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

Если вы используете плагин maven-bundle, расширьте свою конфигурацию:

<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: tree к вашему вопросу.

  • 0
    Я пытался это не помогло.
  • 0
    Хорошо, копия зависимости mvn: tree + Manifest поможет в следующий раз :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню