规范的模块化开发是需要OSGi的重要理由之一,模块化的开发方式一直就是现在的主流开发方式,但业界却一直缺乏这样的标准,当然,如果java本身具备这样的标准自然就更好了,那么大家就会很自然的以同样的方式去设计、开发和部署模块,但目前java暂时还没有这样的标准,虽然之前的JSR 277(Java Module System)的目标是制定这样的标准,但由于该标准制定完后并没有得到业界和各大厂商的认可,所以基本上没起到什么作用,而现在JSR 291的认可则更是触动了它,目前的情况看下去,OSGi成为下一个版本的Java Module System JSR只是时间的问题而已,整个业界能够采取统一的方式进行模块的设计、开发是非常重要和有意义的事,这也是OSGi得到IBM等大公司支持的重要原因之一,说了这么多背景性质的话后开始来看看OSGi是如何规范化模块的开发的:
1、模块的定义
在OSGi中模块以Bundle的形式进行定义,而对于模块中的重要概念如模块的依赖、模块的版本、模块对外提供的功能等都通过规范的Bundle的元数据信息来表达,这就使得模块的定义得以规范。
而同样的OSGi对于模块的规范化的定义也是平时我们在进行模块化的定义时值得参考的。
2、模块的设计
在模块的设计上首先遵循OSGi Bundle的方式无疑为我们的模块设计提供了类似Best Practice的指导,这个对于构建整个系统而言具备非常强的指导意义,我们知道在进行业务架构设计时最重要的就是模块的划分和依赖的设计,而这从OSGi上都给予了非常好的指导。
而对于模块本身的实现方面的设计而言,OSGi更是提供了Service-Oriented Component Model做为设计的指引和参考,这从本身上来讲已经提升了目前的很多的模块的设计方法。
可见,从设计这个层面上来说,OSGi不仅提供了规范化的方法,一定程度上来说更是提供了模块化设计的Best Practice。
3、模块的部署
在OSGi中模块统一以Bundle的方式部署到系统中。
在以前的很多的插件式的系统中也能找到上面三个部分的影子,但最关键的是那些都不足以形成业界统一的规范,规范性才是模块化中最为重要的一点,当然,OSGi在动态性方面的优势使得它在这一领域占据了优势,也使得OSGi在模块的管理上具备很强的优势,象模块的生命周期的动态管理、模块的版本化管理以及模块行为的动态改变等。