Quartz Scheduler 和对 Karaf 的使用依赖性不启动 OSGi 包
Quartz Scheduler and usage dependencies on Karaf not starting an OSGi bundle
我正在尝试在 Apache Karaf 上使用 Quartz Scheduler :
我在 Apache Karaf Github page 上使用了调度程序示例。
在我的 IDE 上,我执行了一个示例并且它工作正常但我无法在 Karaf 下安装和启动捆绑包。
这是包的 POM 导入和导出:
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Export-Package>
com.schedule*;version=${project.version}
</Export-Package>
<Import-Package>
!com.mchange.*,
!oracle.*,
!org.quartz.management,
!weblogic.*,
!javax.transaction,
*
</Import-Package>
<Private-Package>
org.apache.karaf.scheduler.core,
org.apache.karaf.scheduler.command.*,
org.quartz,
org.quartz.core.*,
org.quartz.listeners.*,
org.quartz.impl.*,
org.quartz.spi.*,
org.quartz.simpl.*,
org.quartz.utils.*,
</Private-Package>
问题是 Karaf 导入包和排除项。
这是 Karaf 日志:
Caused by: java.lang.NoClassDefFoundError: org/quartz/ee/jta/JTAAnnotationAwareJobRunShellFactory
at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1204)
at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1519)
at com.soprahr.hub.bc.schedule.core.SimpleSchedule.init(SimpleSchedule.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:299)
at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:980)
at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:736)
... 38 more
Caused by: java.lang.ClassNotFoundException: org.quartz.ee.jta.JTAAnnotationAwareJobRunShellFactory not found by com.schedule. [311]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1574)
at org.apache.felix.framework.BundleWiringImpl.access0(BundleWiringImpl.java:79)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 48 more
我无法回答您的问题,但如果它不必明确是 Quartz 调度程序,您可以使用 Apache Sling 项目中的调度程序。它在 Karaf 中工作得很好。只需以您想要的任何方式安装捆绑包,您就可以开始了。
可以找到一些 howto here。
实际上 Karaf 确实有一个开箱即用的调度程序。因此,为什么不使用那个。它实际上与 SLING 提供的非常相似。
要使用它,可以使用以下命令:
通过
安装
feature:install scheduler
列出所有计划的作业:
scheduler:list
安排新工作:
scheduler:schedule
有关参数的详细信息,请查看
scheduler:schedule --help
取消工作安排:
scheduler:unschedule <name>
感谢您的帮助,包装Quartz jar可以帮助解决这个问题并将依赖项作为jar使用。这就是为什么我们需要这些依赖项:
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.quartz</artifactId>
<version>2.2.3_1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
要在 Karaf 中安装它,我们可以使用这些带有 wrap 前缀的命令:
bundle:install wrap:mvn:c3p0/c3p0/0.9.1.2
bundle:install mvn:org.quartz-scheduler/quartz/2.2.2
bundle:install wrap:mvn:org.quartz-scheduler/quartz-jobs/2.2.2
我在这个页面上得到了答案:Quartz scheduler and OSGI
我正在尝试在 Apache Karaf 上使用 Quartz Scheduler :
我在 Apache Karaf Github page 上使用了调度程序示例。
在我的 IDE 上,我执行了一个示例并且它工作正常但我无法在 Karaf 下安装和启动捆绑包。
这是包的 POM 导入和导出:
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Export-Package>
com.schedule*;version=${project.version}
</Export-Package>
<Import-Package>
!com.mchange.*,
!oracle.*,
!org.quartz.management,
!weblogic.*,
!javax.transaction,
*
</Import-Package>
<Private-Package>
org.apache.karaf.scheduler.core,
org.apache.karaf.scheduler.command.*,
org.quartz,
org.quartz.core.*,
org.quartz.listeners.*,
org.quartz.impl.*,
org.quartz.spi.*,
org.quartz.simpl.*,
org.quartz.utils.*,
</Private-Package>
问题是 Karaf 导入包和排除项。 这是 Karaf 日志:
Caused by: java.lang.NoClassDefFoundError: org/quartz/ee/jta/JTAAnnotationAwareJobRunShellFactory
at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1204)
at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1519)
at com.soprahr.hub.bc.schedule.core.SimpleSchedule.init(SimpleSchedule.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:299)
at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:980)
at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:736)
... 38 more
Caused by: java.lang.ClassNotFoundException: org.quartz.ee.jta.JTAAnnotationAwareJobRunShellFactory not found by com.schedule. [311]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1574)
at org.apache.felix.framework.BundleWiringImpl.access0(BundleWiringImpl.java:79)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 48 more
我无法回答您的问题,但如果它不必明确是 Quartz 调度程序,您可以使用 Apache Sling 项目中的调度程序。它在 Karaf 中工作得很好。只需以您想要的任何方式安装捆绑包,您就可以开始了。
可以找到一些 howto here。
实际上 Karaf 确实有一个开箱即用的调度程序。因此,为什么不使用那个。它实际上与 SLING 提供的非常相似。 要使用它,可以使用以下命令:
通过
安装feature:install scheduler
列出所有计划的作业:
scheduler:list
安排新工作:
scheduler:schedule
有关参数的详细信息,请查看
scheduler:schedule --help
取消工作安排:
scheduler:unschedule <name>
感谢您的帮助,包装Quartz jar可以帮助解决这个问题并将依赖项作为jar使用。这就是为什么我们需要这些依赖项:
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.quartz</artifactId>
<version>2.2.3_1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
要在 Karaf 中安装它,我们可以使用这些带有 wrap 前缀的命令:
bundle:install wrap:mvn:c3p0/c3p0/0.9.1.2
bundle:install mvn:org.quartz-scheduler/quartz/2.2.2
bundle:install wrap:mvn:org.quartz-scheduler/quartz-jobs/2.2.2
我在这个页面上得到了答案:Quartz scheduler and OSGI