[插件化開發] Poc以後,我選擇放棄OSGI

Poc以後,我選擇放棄OSGI

TIPS:
如貴司容許重構老系統或者容許使用OSGI的第三方框架改造所帶來的投入成本,而且評估以後ROI樂觀,那麼仍是可使用的。mysql

Runtime Version

如下問題所有基於Equinox框架 & 使用BluePrint 整合Spring框架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...)。sql

  • 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暴露?mybatis

    暴露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, 而且對現有項目無侵入或不多侵入?eclipse

基於衆多緣由:學習

  1. 社區停滯維護,技術較陳舊
  2. 第三方開源框架能夠實現,問題是對於咱們原有系統改動太過巨大。
  3. 將來遇到的問題沒法獲得外部解決,只能咱們自身針對性對底層進行擴展。
  4. 對於初中級朋友來講,學習成本過高(我翻閱了國內外大多數資料)
  5. 若是不能從新編寫新項目的話,對於原系統的改形成本過高。
  6. ...

替代方案

我選擇放棄該方案,使用Servlet 3.0提供的熱插拔來實現插件模式,只是須要從新加載應用上下文,所以,建議各位部署多實例節點,在升級服務時,採用灰度發佈來下降影響。ui

相關文章
相關標籤/搜索