我有一个在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包,以及是否允许这样做。
答案 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应用程序中一样存在问题。