有没有办法用Knoplerfish制作捆绑包?

时间:2011-07-12 14:11:05

标签: osgi knopflerfish

如果特定包无法初始化,有没有办法中止Knoplerfish的启动?默认情况下,FrameworkErrorEvent将打印到控制台,框架将继续加载。

init.xargs

-initlevel 80
-istart my-required-bundle.jar

控制台输出

[stdout] Installed and started: file:jars/my-required-bundle.jar (id#34)
[stdout] ## DEBUG: errors - FrameworkErrorEvent bundle #34
[stdout] ## DEBUG: errors - FrameworkErrorEvent throwable:
[stderr] org.osgi.framework.BundleException: BundleActivator start failed

1 个答案:

答案 0 :(得分:0)

没有标准的OSGi方法可以做到这一点,因为没有标准的方法来告诉框架要安装哪些软件包(这取决于启动器)。也没有标准的方式来获得此事件的通知,因此您可以采取行动。如果Knopflerfish没有提供特定的系统属性或类似的东西来处理这个问题,我会看到你可以采取的两条路线。

  • 构建自己的启动器。实例化org.knopflerfish.framework.Main,配置它(在自述文件中有一些信息),并通过从框架中获取BundleContext来安装捆绑包。然后,您可以捕获来自捆绑包的BundleException方法的start(),并在类型为RESOLVE_ERROR时中止启动。
  • 创建一个等待特定时间的捆绑包,然后检查框架以查看是否所有捆绑包都已启动(您可以从BundleContext获取所有当前安装的捆绑包的列表)。如果其中一个未处于状态INSTALLED,则可以通过停止系统包(即捆绑0)来停止框架。