关闭OSGi容器(特别是equinox)的最佳方法

Jam*_*arr 19 osgi shutdown equinox

我正在寻找关闭OSGi容器的最佳实践.

目前我们正在使用一个小型启动器应用程序,它调用EclipseStarter.startup()并安装一些核心软件包.之后发射器终止.

当测试GUI(作为一个捆绑包运行)关闭时,它调用System.exit(0)来关闭容器,但必须有一个比这更优雅的解决方案.

谢谢

And*_*aft 22

请不要使用System.exit(0)来关闭OSGi框架.您应该通过使用ID 0(系统捆绑包)停止捆绑包来实现此目的.这样,您可以为所有捆绑包提供以有序方式关闭的机会(例如,释放资源等).

OSGi规范定义了以下内容(核心规范,R4.x,4.2.6停止框架).

可以通过停止系统包,[...]或在框架对象上调用stop方法来启动关闭.

在该章中,给出了关闭框架时会发生什么的详细描述.

系统捆绑包.框架对象也被定义(第4.6章系统包):

启动框架时,系统包类似于框架对象,但实现不需要为框架对象和系统包使用相同的对象.但是,两个对象必须具有包ID 0,相同位置和包符号名称.

OSGi规范可在OSGi Alliance的网站(http://www.osgi.org/Specifications/HomePage)免费获取.


小智 8

我通常会像这样终止框架:

bundlecontext.getBundle(0).stop();

id = 0的bundle是系统包