1

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

这是我输入的启动框架的命令:

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

它无限显示此消息:

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

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

4

1 回答 1

2

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

现在的问题是在下次启动 OSGi 时阻止捆绑包再次自动启动。确保这一点的最简单方法是删除 OSGi 记住上次运行时启动的包列表的“存储”目录。不幸的是,存储目录位置受配置属性的影响,您没有指定如何配置 OSGi。Equinox 的默认值为configuration/org.eclipse.osgi,因此请尝试将其删除。您也可以尝试使用-clean.

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

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

于 2013-07-23T20:09:47.560 回答