[插件化开发] 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)
问题
- 如何在不使用第三方框架的情况下提供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提供的热插拔来实现插件模式,只是需要重新加载应用上下文,因此,建议各位部署多实例节点,在升级服务时,采用灰度发布来降低影响。
在编程的道路上,一往无前,埋头狂奔。
[奔跑的人生] | [segmentfault] | [spring4all] | [csdn] | [掘金] | [OSChina] | [简书] | [知乎] | [51CTO]
[奔跑的人生] | [segmentfault] | [spring4all] | [csdn] | [掘金] | [OSChina] | [简书] | [知乎] | [51CTO]
分类:
Java
, [插件化开发] - OSGI
标签:
OSGI
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2012-10-23 常用正则整理 C#