近期做了几个使用OSGi开发的应用,发现使用过细粒度的Bundle不会给项目带来任何好处,而很多设计人员实际都会在使用OSGi平台时陷入这个陷阱。
首先我们分析OSGi的特点及可以给我们应用带来的好处
1 良好的动态特性
2 更细粒度的类装载控制,多个版本组件在同一运行环境中共同运行
3 在JVM内部实现SOA(我个人倒是认为OSGi所涉及的仅仅是SOA思想的一小部分)
4 DS提供的IoC支持
请思考你的应用程序真的需要这些吗?
很多设计和开发人员都会在设计和实现时忽略应用的真正需要和OSGi的复杂性,将应用的所有内部细小划分都采用Bundle实现。
而我们除了应该注意采用OSGi开发和调试带来的复杂性;同时也要明白动态特性的支持并不是仅仅采用OSGi平台就可以搞定的,要真正实现动态特性必须注意模块的启动顺序无关性及对其所依赖服务的监听等,这些都会大大增加系统实现和调试的复杂性。
其实我们应该认真分析应用是否需要这些OSGi的特性及这些特性应该在应用的那些部分体现,例如我们可以在扩展方面采用Bundle实现扩展插件,至于其它部分则不必采用过多的Bundles(甚至可以采用一个大的Bundle,而其内部则可以采用如Spring来帮助我们实现模块化)。
同时,不要忘记其他的framework同样提供了很好的组件化的基础架构如Spring,Pico-Container,在OSGi与其它技术混合时SCA同样是很好的选择。
保持应用的简单性,不要针对特定技术进行设计,而要为设计选择适合的技术。
蔡超
Chaocai2001@yahoo.com.cn
JEE咨询顾问
SCEA(1.2&5)
IBM Certified OOA&D Solution Designer vUML2