欢迎进入GlassFish OSGi-JavaEE专题!自从GlassFish v3开始,一个新的特性被加入到GlassFish中,那 就是GlassFish OSGi-JavaEE。本专题将分为九个部分向大家介绍GlassFish OSGi-Java EE相关的知识:
Part1:对GlassFish OSGi-JavaEE做简单的介绍并简要叙述企业级的OSGi开发的现状。
Part2: 理解GlassFish OSGi/WEB容器并开发和部署一个WEB 应用程序Bundle到GlassFish中。
Part3:理解 GlassFish OSGi/EJB容器并开发和部署一个EJB 应用程序Bundle到GlassFish中。
Part4:理解 GlassFish OSGi/CDI(上下文依赖注入)规范以及GlassFish OSGi/CDI的实现,同时,展示如何使用GlassFish OSGi/CDI来简化企业级OSGi的开发。
Part5,Part6:集成EAR和OSGi,其中,Part5会通过集成Apache Aries Application特性来拥抱EAR和OSGi;Part6会通过一个真实的案例来展示如何使用EJB Bundle来桥接EAR 和OSGi以达到相同的目的。
Part7:深入解读GlassFish、HK2和OSGi三者的关系, 同时,对于社区经常 提到的问题阐述一个自己的观点。(“HK2在未来将会Dead吗?”)
Part8:深入理解GlassFish内核(模块 的配置、加载以及启动),同时,以一个案例展示如何扩展GlassFish来加入更多自定义模块。
Part9: 贡献GlassFish OSGi以及OSGi-JavaEE的流程。
本专题将假定读者拥有GlassFish和OSGi的基本知识, 限于篇幅原因,我将不会专门介绍GlassFish和OSGi的基本知识。如果读者刚刚接触GlassFish,建议大家参考 以下链接:
如果读者并不了解OSGi,推荐大家阅读以下的书籍:
Neil Bartlett’s “OSGi in Practice”
Richard S. Hall等 “OSGi In Action”
如果用一句话来定义”什么是 GlassFish OSGi-JavaEE”的话,那么我们可以这样说:
GlassFish OSGi-JavaEE就是企业级OSGi的GlassFish实现。
从2005年GlassFish 1.0到现在4.0的发布,GlassFish已经走过了9个年头,在这9年中,GlassFish经历了 JavaEE5到JavaEE7的进化,经历了Sun被Oracle的收购,经历了架构上的重大变更……在我看来,最为重要的 改变是GlassFish 3.0的内核和设计理念的重大变更,甚至说是一次革命! 3.0之前,GlassFish是一个不可分 割或者说是一个整体化(monolithic)的庞然大物,内核与组件以及各个组件之间紧耦合,缺乏足够灵活的扩展 性,启动性能不高。3.0时代,情况发生了根本性的转变,内核依托HK2和OSGi,各个模块完全采用OSGi设计理 念,GlassFish变得更加轻量级和模块化,内核与组件以及各个组件之间实现了松耦合,有着更加良好的可扩 展性,启动性能有了质的提高,更为重要的是大大提高了可维护性。同时,更多有特点的模块出现了, GlassFish OSGi-JavaEE就是其中之一。而这一切都要归功于OSGi!
另一方面, 放眼当前世界上其他主 流的开源JavaEE应用服务器,如JBOSS 7(现在已经更名为Wildfly), Apache Geronimo 3等均采用模块化的设 计理念(尽管JBOSS 7没有直接采用OSGi作为内核),力图使应用服务器瘦身,更加具有可维护性和可扩展性 。
我们已经看到模块化的设计理念在JavaEE应用服务器领域大获成功,OSGi作为模块化设计理念中最 具代表性的产物,功不可没!
本专题并不专门讲述OSGi的基本知识以及如何采用OSGi来设计JavaEE应 用服务器,相反,我们探讨如何使用OSGi来开发企业级Java应用。但是,当提到OSGi与企业级Java时,我们势 必将会抛出一个问题:为什么企业级Java需要使用OSGi?
为了回答这个问题,我们需要进一步解答以下 的两个重要的问题:
企业级Java开发有哪些不足?
借助OSGi能够解决这些不足吗?
企业级Java开发有哪些不足
企业级Java是由构建在核心Java上的一系列库、API以及框架松散构成 的,并且这些库、API以及框架为开发人员提供了一系列的企业服务,例如,分布式组件开发、事务、持久化 访问数据库等。企业级Java已经取得了巨大的成功(无论是 JavaEE 本身还是 Spring 框架),但是,随着企 业级Java应用程序的规模和复杂度的不断增加,这些应用程序已经开始变得更加得笨重和庞大,标准Java的一 些固有的问题也越发变得严重,有时甚至是致命的。
classpath地狱
众所周之,标准Java的 classpath是扁平(flat)的结构,也就是说,是以线性顺序在指定的classpath中搜索类。例如,图1中,
图1: 标准Java中扁平(flat)的classpath结构