重新启动后,OSGi插件将被删除

时间:2015-12-29 19:54:19

标签: osgi equinox kura

我在Raspberry PI上创建了3个不同的OSGI插件(开发为Eclipse插件项目),在Eclipse Kura中运行。两个插件表现为提供常用类别的库。第三个插件是使用Kura提供的机制与串行端口通信的服务。后者是按照Kura入门页面所描述的那样开发的。这两个库插件是基本的插件项目。

一切都得到了解决并正确启动,似乎按预期工作,所以没什么特别的。重新启动PI时会出现问题,导致OSGI引擎也会重新启动。这两个库插件似乎被重启删除了。串行通信服务仍然存在,但由于缺少依赖性而无法启动。

我的问题是:是什么原因导致插件在重启时被删除,以及如何防止这种情况发生?感谢您阅读这篇文章!

2 个答案:

答案 0 :(得分:1)

我建议您将捆绑包导出为OSGi部署包 然后在你的Pi中复制DP并告诉Kura在启动时加载它。

我编写了一个sample project,您可以使用它来创建使用Maven的部署包,或者您可以使用bash脚本打包您的包。

打包后,将您的DP复制到 / opt / eclipse / kura / kura / packages / 文件夹中。 然后编辑 /opt/eclipse/kura/kura/dpa.properties 文件并为DP添加一行

yourbundles=file\:/opt/eclipse/kura/kura/packages/your-bundles.dp

This is the official Kura documentation on how to do it

替代方案是使用Kura的Web UI或DEPLOY cloudlet安装DP。

答案 1 :(得分:0)

正如您在澄清中所述,install命令用于添加依赖项包。 OSGi通常是持久的,因此如果以任何方式(包括使用install命令)安装bundle,它们将在您下次启动OSGi时仍然存在且处于相同状态。

为了实现这一点,OSGi有一个"存储"夹。这是通过设置org.osgi.framework.storage属性来配置的,该属性在Equinox中默认为./configuration。您的启动程序可能会清除此目录,从而导致OSGi失去其持久状态。

有两种可能的解决方案:

  1. 不要清除OSGi存储文件夹。
  2. 将启动器应用程序配置为始终包含所需的所有软件包。
  3. 我实际上建议同时做这两件事。 OSGi 意味着是持久的;但是,要求用户键入install命令才能使应用程序正常工作,这对用户不是很友好。