无法自动部署捆绑到Karaf

时间:2013-05-15 13:32:43

标签: osgi apache-karaf osgi-bundle autodeploy

我正在开发一个基于OSGI的应用程序,它部署到Karaf容器。 Karaf具有自动部署功能,将捆绑包复制到其karaf / deploy目录应自动将该捆绑包部署到容器中。但是,当我将bundle复制到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确实已经部署了该捆绑包,但为什么不重新部署该捆绑包?是什么导致了这种行为?如何在自动部署时避免此类错误?

谢谢,

迈克尔

1 个答案:

答案 0 :(得分:0)

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