Poc以後,我選擇放棄OSGI
TIPS:
如貴司容許重構老系統或者容許使用OSGI的第三方框架改造所帶來的投入成本,而且評估以後ROI樂觀,那麼仍是可使用的。mysql
Runtime Version
如下問題所有基於Equinox框架 & 使用BluePrint 整合Spring框架spring
- OSGI
- org.eclipse.osgi 3.15.0v20190830-1434
- Equinox version
- Spring Framework
- blueprint
- mybatis
- mybatis-spring
- mysql
現狀
如下方案前提條件:不使用第三方框架(Camel/karaf...)。sql
- 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暴露?mybatis
暴露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, 而且對現有項目無侵入或不多侵入?eclipse
基於衆多緣由:學習
- 社區停滯維護,技術較陳舊
- 第三方開源框架能夠實現,問題是對於咱們原有系統改動太過巨大。
- 將來遇到的問題沒法獲得外部解決,只能咱們自身針對性對底層進行擴展。
- 對於初中級朋友來講,學習成本過高(我翻閱了國內外大多數資料)
- 若是不能從新編寫新項目的話,對於原系統的改形成本過高。
- ...
替代方案
我選擇放棄該方案,使用Servlet 3.0提供的熱插拔來實現插件模式,只是須要從新加載應用上下文,所以,建議各位部署多實例節點,在升級服務時,採用灰度發佈來下降影響。ui