1. 程式人生 > >[外掛化開發] Poc之後,我選擇放棄OSGI

[外掛化開發] Poc之後,我選擇放棄OSGI

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)

問題

  1. 如何在不使用第三方框架的情況下提供rest service暴露?

    暴露rest service 利用,osgi自帶的HttpService服務,再通過org.eclipse.equinox.servletbridge.BridgeServlet把服務橋接出去

  2. 關於現有的SpringMVC單體應用,如何將每一個controller中的所有methods封裝為bundle中的bean services 對外統一暴露而不是one by one?
  3. 如何在Bundle使用Spring Annotation/是否可以使用?
  4. 如何將現有SpringMVC 專案直接生成一個full bundle以提供對外暴露services, 並且對現有專案無侵入或很少侵入?

基於眾多原因:

  1. 社群停滯維護,技術較陳舊
  2. 第三方開源框架可以實現,問題是對於我們原有系統改動太過巨大。
  3. 未來遇到的問題無法得到外部解決,只能我們自身針對性對底層進行擴充套件。
  4. 對於初中級朋友來說,學習成本太高(我翻閱了國內外大多數資料)
  5. 如果不能重新編寫新專案的話,對於原系統的改造成本太高。
  6. ...

替代方案

我選擇放棄該方案,使用Servlet 3.0提供的熱插拔來實現外掛模式,只是需要重新載入應用上下文,因此,建議各位部署多例項節點,在升級服務時,採用灰度釋出來降低影響