[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然後啟動或關閉的,而不是寫入config.ini,不然越寫越臭長,eclipse應該也有這玩意只是我不知道他叫什麼而已。

嗯,總的來說,OSGi真是個好物,雖然它挺占資源(光JVM+Native Class就12MB),但在開發或管理上,比C親切許多 lol

持續關注囉。

Comments

Popular posts from this blog

股票評價(Stock Valuation) - 股利折現模型

openwrt feed的使用

How to convert Markdown into HTML