[OSGi] 關於OSGi的啟動方式
最近在研究OSGi這個框架,遇到一個疑問:OSGi在啟動服務的方式有哪些? 查了網路資料後,約可以分為三類: 1. 在啟動OSGi後,在console自行下install, start, stop bundles的指令. ex. osgi > install gg.sample osgi > start gg.sample 2. 在config.ini上,加上每個要安裝的bundles跟決定它們的狀態. 等OSGi重新啟動後,便會加入該bundles. ex. osgi.bundle= ..., gg.sample@start 但上述兩者皆無法達到自動化的效果,加上當bundles要加很多的時後,這兩個方法就顯的很笨拙。 3. 另外加入一個bundle,繼承bundleActivator,然後統一控管bundle的啟動與否。 出處 不過一般我們對services的default status就是start,這方法似乎有些多餘。而且當第三方要加入新的bundles時, 就必須修改這個bundle,這還是不妥。 但若進一步想問: a. 當我兩個devices相遇時,Device A需要針對Device B的某個bundle進行更新時, b. 當客戶透過Web介面,將某個bundle傳到該device要求更新時, 又該如何呢? 網路上仍找不到相關解答,應該是keyword下的不好... 目前想到可能的做法是: 1. 每個Device安裝一個Service,負責接收/傳送bundle 2. 每個Device安裝一個Update Tracker,根據所接收的bundle,檢查他的bundle名稱+版號看是否存在: 若表示Actived/Resolved -> 表示要求更新 -> 停止舊的bundle -> 啟動新的bundle*. 若沒找到 -> 加入config.ini的osgi.bundle中 -> 啟動該bundle. 移除亦然. 3. 若是b的情況,可以偷吃步 => 重新啟動OSGi. XD *其實這點又多兩個疑惑: a. 啟動的時後,怎麼判定啟動的是哪個版本的bundles? (這似乎又可以用上述的3.來解決!!!) b. 我想應該存在一個bundle,是可以自行檢查某folder下的bundles然後啟動或關閉的,而...