与Equinox OSGI框架上的无限循环捆绑

时间:2013-07-23 19:19:48

标签: osgi equinox osgi-bundle

我有一个在Equinox OSGI Framework上运行无限循环的软件包。由于这个包,我再次运行框架时无法启动新的包。在这种情况下如何阻止此捆绑?

这是我键入的用于启动框架的命令:

java -jar org.eclipse.osgi_3.9.0.v20130529-1710.jar -console

无限地显示此消息:

Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
...........

回答这个问题也有助于回答如何在执行方法时停止OSGI包,以及是否允许这样做。

1 个答案:

答案 0 :(得分:2)

我假设你的bundle在其BundleActivator.start方法中进入了一个无限循环,因此捆绑了OSGi回调。显然这不是你应该做的事情!你别无选择,只能强行关闭JVM。

现在问题是在下次启动OSGi时停止自动再次启动软件包。确保这一点的最简单方法是删除“存储”目录,其中OSGi记住上次运行时启动的包列表。遗憾的是,存储目录位置受配置属性的限制,您尚未指定如何配置OSGi。 Equinox的默认值为configuration/org.eclipse.osgi,因此请尝试删除它。您也可以尝试使用-clean运行。

关于如何在执行方法时停止OSGi包:您当然可以停止,这将导致其stop方法执行。你可以用这种方法做任何你喜欢的事情:一般来说,你应该瞄准清理你在start方法中创建的任何东西。但是,如果你有一个失控的线程,那么你基本上什么也做不了,因为Java没有办法杀死一个线程,它只提供一个合作的interrupt方法。

OSGi无法改变Java的基本规则,因此失控线程在OSGi中与在任何其他Java应用程序中一样存在问题。