[外掛化開發] Poc之後,我選擇放棄OSGI
阿新 • • 發佈:2019-10-23
Poc之後,我選擇放棄OSGI
TIPS:
如貴司允許重構老系統或者允許使用OSGI的第三方框架改造所帶來的投入成本,並且評估之後ROI樂觀,那麼還是可以使用的。
Runtime Version
以下問題全部基於Equinox框架 & 使用BluePrint 整合Spring框架
- OSGI
- org.eclipse.osgi 3.15.0v20190830-1434
- Equinox version
- Equinox 4.13
- Spring Framework
- 5.0.4P
- 3.0.0
- blueprint
- 3.0.0.M1
- mybatis
- 3.5.3
- mybatis-spring
- 1.3.2
- mysql
- 5+/8+
現狀
以下方案前提條件:不使用第三方框架(Camel/karaf...)。
- Spring 3 整合
使用Spring3 實現了SpringMvc的整合,但是無法支援Restful支援。
spring3以後,好像就沒有人維護osgi的版jar包了,想要使用更高版本,只能自己生成bundle. - Spring5 整合
基礎Spring Bean注入通過xml方式已經成功,但是目前的bundle缺失較多,最重要的為jdbc & transaction,spring 在3.2之後升級為spring-tx,而且不提供osgi版本,造成我們現有專案大部分業務需要重構,工作量巨大(等同於重寫service)
問題
如何在不使用第三方框架的情況下提供rest service暴露?
暴露rest service 利用,osgi自帶的HttpService服務,再通過org.eclipse.equinox.servletbridge.BridgeServlet把服務橋接出去
- 關於現有的SpringMVC單體應用,如何將每一個controller中的所有methods封裝為bundle中的bean services 對外統一暴露而不是one by one?
- 如何在Bundle使用Spring Annotation/是否可以使用?
如何將現有SpringMVC 專案直接生成一個full bundle以提供對外暴露services, 並且對現有專案無侵入或很少侵入?
基於眾多原因:
- 社群停滯維護,技術較陳舊
- 第三方開源框架可以實現,問題是對於我們原有系統改動太過巨大。
- 未來遇到的問題無法得到外部解決,只能我們自身針對性對底層進行擴充套件。
- 對於初中級朋友來說,學習成本太高(我翻閱了國內外大多數資料)
- 如果不能重新編寫新專案的話,對於原系統的改造成本太高。
- ...
替代方案
我選擇放棄該方案,使用Servlet 3.0提供的熱插拔來實現外掛模式,只是需要重新載入應用上下文,因此,建議各位部署多例項節點,在升級服務時,採用灰度釋出來降低影響