2015-12-29 35 views
0

我已經創建了3個不同的OSGI插件(作爲Eclipse插件項目開發)在Eclipse Kura內運行在Raspberry PI上。兩個插件表現爲提供分類的庫,共同使用。第三個插件是使用庫拉提供的機制與串行端口通信的服務。後者是按照Kura入門頁面上的描述開發的。這兩個庫插件是基本的插件項目。OSGi插件在重啓後得到刪除

一切都解決了,並開始正確,似乎按預期工作,所以沒有什麼特別的。 PI重新啓動時會出現問題,導致OSGI引擎無法啓動。這兩個庫插件似乎被重新啓動刪除。串行通信服務仍然存在,但由於缺少依賴關係而無法啓動。

我的問題是:什麼原因導致插件在重新啓動時被移除,以及如何防止這種情況發生?感謝您閱讀這篇文章!

+0

你是如何添加捆綁的? –

+0

我在OSGI提示符(安裝文件:// ...中傳遞了JAR文件)而不是Kura控制檯上使用install命令安裝了該軟件包。目前,我通過在激活/停用方法中無用的方式添加一個虛擬類來創建解決方法。該類被引用爲使用組件描述符文件(component.xml)的OSGi服務。這樣可以將軟件包打包爲DP文件並使用Kura控制檯進行部署。現在該軟件包在重啓後仍然保持安裝雖然這有效,但我認爲更好的解決方案也可能存在。 – KDW

回答

1

我建議你將你的bundle導出爲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雲安裝DP。

+0

首先祝您新年快樂,謝謝您的回覆!因此,如果我理解正確,只要它們是部署軟件包,使用Web UI就會自動更新Kura以在啓動時加載OSGi軟件包。因此,我可以創建一個沒有「dummy」組件定義的部署包,我目前正在使用它作爲解決方法。使用CLI部署JAR時,行爲不同。 – KDW

+0

@KDW是的。當您在web ui中上傳DP時,Kura會自動將條目添加到** dpa.properties **文件中。可能包含多個捆綁包的DP將在下次啓動時重新加載。 –

+0

@Neil我將Alessandro提出的解決方案標記爲問題的答案,因爲它具有無需更改Kura中包含的OSGi引擎默認配置的優勢,儘管我也很欣賞您的解決方案。爲了我的名譽不好,我不能答覆答案。感謝這兩個迴應。 – KDW

0

正如您在澄清中所述,install命令用於添加依賴項包。 OSGi通常是持久的,所以如果你以任何方式安裝捆綁包(包括install命令),它們仍然存在,並且在下一次啓動OSGi時處於相同狀態。

爲了這個工作,OSGi有一個「存儲」文件夾。這通過設置org.osgi.framework.storage屬性進行配置,該屬性在Equinox中默認爲./configuration。您的啓動程序可能會清除此目錄,從而導致OSGi失去其持久狀態。

有兩種可能的解決方案:

  1. 不要清除OSGi的存儲文件夾。
  2. 配置您的啓動程序應用程序始終包含所有您想要的軟件包。

我真的會推薦做這兩個。 OSGi是意思是要持久;而且要求用戶輸入install命令才能使應用程序正常工作,並不是真正的用戶友好。

+0

首先也是新年快樂。只要啓動程序不清除存儲文件夾,使用install命令和「普通」(意思是非部署軟件包捆綁軟件包)的方法也可以工作。 – KDW