之前51cto曾发出过2010年将是Java模块化的一年的声音,我们也曾独家采访淘宝网平台架构部架构师关于其对Java模块化的理念,目前为Java提供模块化的OSGi,正在受到IBM和Eclipse基金会的大力支持。IBM将在它的应用服务器新版本中采用OSGi,而Eclipse也会在一个新框架中通过OSGi访问其他企业技术。
前不久IBM发布了一个基于OSGi和JPA技术的WAS Beta版本。这个版本暂时使用了一个很笨重的名字:IBM Websphere Application Server V7 Feature Pack for OSGi Applications and Java Persistence API(JPA) 2.0 Open Beta。
按照IBM Websphere Application Server的产品经理Erik Kristiansen所说,“OSGi在WAS内部提供了卓越的模块性和版本功能。OSGi为那些期望把自己的应用建立在WAS之上的企业客户带来了OSGi的模块性和组件化。”
值得注意的是,IBM之前已经发布过alpha形式的OSGi feature pack,但并未声明公开版本发布的具体日期。IBM的feature pack是基于Apache Aries项目,来为企业应用开发者提供OSGi服务。
OSGi致力于提供更加容易的代码库管理的同时,允许创建更多动态的可以在运行时运行插件和扩展的软件。RedMonk的分析师Michale Cote认为,“因为某些原因,Java代码越发往整体复杂的趋势发展,但也一直存在技术和文化上的努力在与巨大的复杂性进行斗争。从设计的角度看,OSGi和Java中的其他组件会是一种比较好的方式,来组织工程中的代码,让开发者的日子更好过。”
在Eclipse方面,新建立的Gemini项目是与Eclipse运行时相关联的孵化项目,它基于OSGi。根据EclipseCon 2010技术大会中有关Gemini话题的网页,以及前Eclipse董事会成员之一Mik Kersten所说的,“Gemini的目标是在一个模块化框架中提供对标准企业技术的访问。Gemini将会采用OSGi,并让企业服务器端模块集成在一起更加简单。Gemini将会为在OSGi中使用企业技术提供“随时可用的实现”。另外一个新项目Eclipse Virgo则提供来一个基于OSGi的应用服务器,Virgo起源于Spring Source dm Server产品。”
OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构。OSGi容器已有多家开源实现,比如Knoflerfish、Equinox和Apache的Felix。您可以通过这些容器,把您的应用程序劈分为多个模块单元,这样,您就可以更容易地管理这些模块单元之间的交叉依赖关系。
OSGi规范和Servlet规范及EJB规范类似,该规范定义了两种对象,一是容器对外提供的服务对象,另一个是容器和您的应用程序之间必须遵守的契约,其中,服务对象是容器要实现的。您如果想要在OSGi平台上进行开发,首先,您必须要使用OSGi API来创建您的应用,然后将之部署到OSGi容器中。
模块化是个一般概念,这一概念也适用于软件开发,可以让软件按模块单独开发,各模块通常都用一个标准化的接口来进行通信。实际上,除了规模大小有区别外,面向对象语言中对象之间的关注点分离与模块化的概念基本一致。通常,把系统划分外多个模块有助于将耦合减至***,让代码维护更加简单。
Java语言并不是按照模块化思想设计的(除了package,按照Java语言规范introduction一 节的介绍,package类似于Modula-3模块),但是在Java社区依然有很多实际存在的模块。任何一个Java类库实际上都是一个模块,无论其 是Log4J、Hibernate还是Tomcat。通常,开源和非开源的应用都会依赖于一个或多个外部类库,而这种依赖关系又有可能传递到其他类库上。
【编辑推荐】