Poc以后,我选择放弃OSGI
TIPS:java
如贵司容许重构老系统或者容许使用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暴露?
暴露rest service 利用,osgi自带的HttpService服务,再经过org.eclipse.equinox.servletbridge.BridgeServlet把服务桥接出去segmentfault
- 关于现有的SpringMVC单体应用,如何将每个controller中的全部methods封装为bundle中的bean services 对外统一暴露而不是one by one?
- 如何在Bundle使用Spring Annotation/是否可使用?
- 如何将现有SpringMVC 项目直接生成一个full bundle以提供对外暴露services, 而且对现有项目无侵入或不多侵入?
基于众多缘由:mybatis
- 社区停滞维护,技术较陈旧
- 第三方开源框架能够实现,问题是对于咱们原有系统改动太过巨大。
- 将来遇到的问题没法获得外部解决,只能咱们自身针对性对底层进行扩展。
- 对于初中级朋友来讲,学习成本过高(我翻阅了国内外大多数资料)
- 若是不能从新编写新项目的话,对于原系统的改形成本过高。
- ...
替代方案
我选择放弃该方案,使用Servlet 3.0提供的热插拔来实现插件模式,只是须要从新加载应用上下文,所以,建议各位部署多实例节点,在升级服务时,采用灰度发布来下降影响。框架
奔跑的人生 | 博客园 | segmentfault | spring4all | csdn | 掘金 | OSChina | 简书 | 头条 | 知乎 | 51CTOeclipse