如果特定包无法初始化,有没有办法中止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
答案 0 :(得分:0)
没有标准的OSGi方法可以做到这一点,因为没有标准的方法来告诉框架要安装哪些软件包(这取决于启动器)。也没有标准的方式来获得此事件的通知,因此您可以采取行动。如果Knopflerfish没有提供特定的系统属性或类似的东西来处理这个问题,我会看到你可以采取的两条路线。
org.knopflerfish.framework.Main
,配置它(在自述文件中有一些信息),并通过从框架中获取BundleContext
来安装捆绑包。然后,您可以捕获来自捆绑包的BundleException
方法的start()
,并在类型为RESOLVE_ERROR
时中止启动。BundleContext
获取所有当前安装的捆绑包的列表)。如果其中一个未处于状态INSTALLED
,则可以通过停止系统包(即捆绑0)来停止框架。