2017-03-22 6 views
1

karaf-maven-pluginを使用してmavenディストリビューションを作成しました。私は、Apacheのサイトからkaraf 4.1.0ディストリビューションをダウンロードするとorg.apache.aries.transaction.blueprint/1.1.1はjavax.transaction.TransactionManagerを取得できません

   <bootFeatures> 
        <feature>standard</feature> 
        <feature>jpa/2.5.0</feature> 
        <feature>transaction-api/1.2.0</feature> 
        <feature>transaction</feature> 
        <feature>eclipselink</feature> 
        <feature>pax-jdbc-config</feature> 
        <feature>pax-jdbc-postgresql</feature> 
       </bootFeatures> 

、および機能を使用して機能をインストールします。私は

mvn archetype:generate -DarchetypeGroupId=org.apache.karaf.archetypes -DarchetypeArtifactId=karaf-assembly-archetype -DarchetypeVersion=4.1.0

を使用してMavenプロジェクトを作成しました

その後、私は、次の機能を追加しました:install、すべて正常に動作しますが、プラグインでビルドされたディストリビューションでエラーが表示されます:

Unable to start blueprint container for bundle org.apache.aries.transaction.blueprint/1.1.1 due to unresolved dependencies [(objectClass=javax.transaction.TransactionManager)] java.util.concurrent.TimeoutException at org.apache.aries.blueprint.container.BlueprintContainerImpl$1.run(BlueprintContainerImpl.java:371) [15:org.apache.aries.blueprint.core:1.7.1] at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48) [15:org.apache.aries.blueprint.core:1.7.1] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:?] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:?] at java.lang.Thread.run(Thread.java:745) [?:?]

2017-03-22T11:03:51,401 | ERROR | Blueprint Extender: 1 | BlueprintContainerImpl | 15 - org.apache.aries.blueprint.core - 1.7.1 | Unable to start blueprint container for bundle org.apache.aries.transaction.blueprint/2.1.0 due to unresolved dependencies [(objectClass=javax.transaction.TransactionManager)] java.util.concurrent.TimeoutException at org.apache.aries.blueprint.container.BlueprintContainerImpl$1.run(BlueprintContainerImpl.java:371) [15:org.apache.aries.blueprint.core:1.7.1] at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48) [15:org.apache.aries.blueprint.core:1.7.1] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:?] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:?] at java.lang.Thread.run(Thread.java:745) [?:?]

は、私は、WebコンソールでのOSGiレジストリ内のサービスを見つけた:

Service 266 - [org.apache.aries.transaction.AriesTransactionManager, javax.transaction.TransactionManager, javax.transaction.TransactionSynchronizationRegistry, javax.transaction.UserTransaction, org.apache.geronimo.transaction.manager.RecoverableTransactionManager] (pid: n/a) 
    from Bundle 143 - Apache Aries Transaction Manager (org.apache.aries.transaction.manager), version 1.3.2 
    service.bundleid: 143 
    service.scope: singleton 

ここで何が悪いのでしょうか? Mavenプラグインが何か間違っているのですか?問題は、そのプラグインが不安定なバージョンの成果物を使用していますか?

答えて

1

あなたのOSGiバンドルの配線を見ないと、確かなことはできませんが、もっともらしい説明は有毒なjavax.transactionパッケージです。 JTAを指定するとき、特定のJTAインタフェースを実装するために必要な「コアJava」の特定の型が存在することが明らかになりました。たとえば、SQL Connectionオブジェクトには関連するXAResourceが必要です。これにより、JTA APIの一部がコアJavaになりましたが、基本的な実行時に完全なAPIを追加するのではなく、いくつかのタイプが追加されました。これにより、Java RuntimeとJTAの間の分割パッケージが発生し、モジュラーシステムで大きな問題が発生します(通常、複数のソースから同じパッケージを同時に表示することはできません)。

この場合、 (基本ランタイムにはTransactionManagerインターフェイスは含まれていません)。一方、消費バンドルはおそらくjavax.transactionをシステムバンドル(つまりJavaランタイム)からインポートしています。これら2つのバンドルはサービスAPIのビューを共有しないため、OSGiサービスを共有することはできません。

JTA APIをJavaクラスパスに配置し、 a次のような起動プロパティを使用する正しいバージョン:

org.osgi.framework.system.packages.extra=javax.transaction;version=1.2 
関連する問題