0

Karaf コンテナーにデプロイする OSGI ベースのアプリケーションを開発しています。Karaf には自動デプロイ機能があり、バンドルを karaf/deploy ディレクトリにコピーすると、そのバンドルがコンテナーに自動的にデプロイされます。ただし、多くの場合、バンドルを deploy ディレクトリにコピーすると、以下のようなエラーが発生します。

org.osgi.framework.BundleException: Bundle symbolic name and version are not unique: legacy-services-impl:8.0.0.ALPHA-SPRINT9-SNAPSHOT
    at org.apache.felix.framework.BundleImpl.createRevision(BundleImpl.java:1225)
    at org.apache.felix.framework.BundleImpl.<init>(BundleImpl.java:95)
    at org.apache.felix.framework.Felix.installBundle(Felix.java:2979)
    at org.apache.felix.framework.BundleContextImpl.installBundle(BundleContextImpl.java:165)
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.installOrUpdateBundle(DirectoryWatcher.java:1030)[6:org.apache.felix.fileinstall:3.3.11.fuse-71-047]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.install(DirectoryWatcher.java:944)[6:org.apache.felix.fileinstall:3.3.11.fuse-71-047]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.install(DirectoryWatcher.java:857)[6:org.apache.felix.fileinstall:3.3.11.fuse-71-047]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:483)[6:org.apache.felix.fileinstall:3.3.11.fuse-71-047]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:291)[6:org.apache.felix.fileinstall:3.3.11.fuse-71-047]

すでにデプロイされているバンドルを再デプロイする代わりに、コンテナーは重複したバンドルをデプロイしようとしていると通知します。

Karaf は確かにそのバンドルを展開していますが、バンドルを再展開しないのはなぜですか? この動作の原因は何ですか? 自動展開でこのようなエラーを回避するにはどうすればよいですか?

ありがとうございました、

マイケル

4

1 に答える 1

0

バンドルが正しく停止していないと思われます。それがカラフがまだそこにあると考える理由かもしれません. 停止時に実行されるコードがアクティベーターに含まれていますか? おそらく、いくつかのスレッドも実行しています。アクティベーターの stop メソッドが機能し、すべてのリソースをきれいに閉じて、バンドルのすべてのスレッドを停止することを確認する必要があります。

于 2013-05-16T14:58:25.223 に答える