0

我正在开发一个基于 OSGI 的应用程序,它部署到 Karaf 容器。Karaf 有一个自动部署功能,将一个包复制到它的 karaf/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

我怀疑您的捆绑包没有正确停止。这可能是 karaf 认为它仍然存在的原因。您的激活器中是否有一些在停止时执行的代码?也许你也在运行一些线程。您应该确保您的激活器的 stop 方法有效并干净地关闭所有资源并停止您的包的所有线程。

于 2013-05-16T14:58:25.223 回答