2017-03-26 8 views
2

を開始していない:クォーツスケジューラおよび使用方法の依存関係私は、Apache Karafにクォーツスケジューラを使用しようとしていますOSGiバンドル

私はApache Karaf Github pageにスケジューラの例を使用していました。

私のIDEで、私は例を実行し、それはうまく動作しますが、私はKarafにバンドルをインストールして起動することはできません。

Anが、ここでのパッケージの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.access$400(BundleWiringImpl.java:79) 
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 48 more 

答えて

2

はクォーツジャーをラッピングすると、この問題を解決し、瓶などの依存関係を使用することができ、あなたの助けをいただき、ありがとうございます。

<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にそれをインストールするために、我々はラッププレフィックスでこれらのコマンドを使用することができます:それは私たちはこれらの依存関係を必要とする理由だ

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

1

私はあなたの質問に答えることはできませんが、それが明示的にクォーツスケジューラである必要はありません場合は、Apacheのスリングプロジェクトからスケジューラを使用することができます。それはKarafでうまく動作します。あなたが望む方法でバンドルをインストールするだけで、あなたは準備が整いました。

少しハウツが見つかりますhereです。

1

実際には、Karafはスケジューラをすぐに使用できます。したがって、なぜそれを使用しないでください。実際にはSLINGによって提供されるものと非常に似ています。それを次のコマンドを使用するに が用意されています

feature:install scheduler 

リストを経由して、すべてのスケジュールされたジョブインストール:

scheduler:list 

を新しいジョブをスケジュール:詳細については

scheduler:schedule 

パラメータは

ですジョブのスケジュール解除用
scheduler:schedule --help 

scheduler:unschedule <name> 
関連する問題