Apache 软件基金会于 2006 年 7 月发布了 Apache Geronimo 的 1.1 版。这一版本不仅改进了 Geronimo 的可伸缩性、可移植性及总体机制,还包含了一些新的功能和配置,并改变了日常操作管理任务的执行方式。
Apache Geronimo 1.1 是一个由 Java 2 Platform, Enterprise Edition (J2EE) 1.4 认证的开源应用服务器。与其他 J2EE 应用服务器不同的是,Geronimo 预先集成了外部资源组件,如数据库、消息服务器和目录服务器。Geronimo 建立在一个高度可定制且模块化的架构之上。其运行方式是,作为一个框架支持现有开放源码组件来构成一个由超过 30 个最佳开源项目组成的完整的 J2EE 应用服务器包。Geronimo 建立在 GBeans 架构之上,在该架构中,Geronimo 内核扮演了核心角色,为这些组件提供了共同安全、部署、管理及生命周期服务。所有嵌入该服务器的其他服务都由外部组件提供。开发人员可以定制构建这些 Geronimo 组件或从其他现有开放源码项目中获取。Geronimo 已经在开放源码开发社区中流行起来,大家翘首以盼的最新发行版 —— 1.1 版为这个功能强大的应用服务器带来了几个主要的改进。
最新版本的 Apache Geronimo 可供 Linux®、Mac OS X 和 Microsoft® Windows® 操作系统作为二进制文件和源代码文件下载。最新版的 Apache Geronimo 经过了 J2EE 1.4 认证,包括了大量的 bug 修复、性能提升、新的支持选项以及下列功能:
- 更新的部署方案
- Little-G
- 插件架构
- 新的存储库和模块
- 改进的部署方案
- 增强的 Web 控制台
- 改进的热部署
- 共享库
- 就地部署
Geronimo 1.1 的下列关键技术优势将它同目前存在的其他应用服务器区别了开来:
- 由多样化的 GBean 架构提供的可插入框架及模块化架构
- 遵守自由 Apache 许可(liberal Apache License)的优势
- 预先打包及预先集成的数据库服务器、消息服务器及目录服务器
- 低内存低资源需求
- 由一个活跃的开放源码社区所驱动
- 由 IBM® 提供战略性承诺及选择性支持
跟上一版相比,服务器的组织结构已经改变。现在,所有的模块和应用程序都被存储在一个库中,这导致了该存储库的结构同计划文件中提供的 moduleID 紧密地连接在一起。
另一个值得注意的改进是插件架构的引入。此架构将改变 Geronimo 应用程序发布或分发的方式,在 Geronimo 配置方面,给开发人员提供了一个额外层次的灵活度和简易度。
Apache Geronimo 中的 Web 控制台也进行了几处改进,这将在下面的 Web 控制台 一节中探讨。
之前的 Geronimo 1.0 版可以作为两种不同的 J2EE 集成来下载 —— 一种基于 Jetty Web 容器,另一种基于 Apache Tomcat。开发人员曾经被迫要求下载所有由 J2EE 规范授权的服务。现在用 Geronimo 1.1,可以下载一个分割版的 Geronimo,这会节省大量的时间。
如果您是一个热衷于使用不基于企业 JavaBean(Enterprise JavaBeans,EJB)且只需占用极少量资源和内存的轻量级 Geronimo 版本的开发人员,Little-G 也许会是最佳的解决方案。Little-G 允许您根据需要添加功能和服务。正如其名称所暗示的那样,Little-G 对空间的需求非常小 —— 通常在 20MB 左右。Little-G 并不含有完整 J2EE 栈所必须的全部组件且具有极小的 Tomcat 支持。Geronimo 内核是 Little-G 和完整 J2EE 版的 Geronimo 的基础,所以,针对这两个版本所构建的应用程序都是兼容的,提供的所有依赖项都能得到满足。Little-G 提供了下列基本的组件及服务。(请注意它并不包含 Web 控制台或 EJB、消息服务器或 Web 服务容器。)
- 一个 Web 容器,可以任选为 Jetty 或 Tomcat 框架
- 通过 Java 开放事务管理器(Java Open Transaction Manager,JOTM)和定制 Geronimo 代码提供的一个事务管理器。
- 通过 Log4j 记录日志的能力
- Geronimo 插件系统
- 由来自 TransQL 中的代码提供的 Java 数据库连接(Java Database Connectivity,JDBC)支持
使用包含了插件架构的 Little-G,您可以在尽量不打断核心服务的情况下,选择添加任何本地或远程存储库中的组件和服务。您也可以轻易地升级 Little-G 来满足任何特定的需求,比如支持 JMS 或 J2EE 应用程序(通过使用插件)。(请注意,由于部署工具包含在 Little-G 中而不是 Web 控制台中,因而受限于非 GUI 的部署。)
准备好下载 Geronimo 1.1 后,可以选择下列格式:
- J2EE 1.4 认证的发行版
- Linux、Mac OS X 和 UNIX® 版:
- 含有 Jetty 的 Geronimo 1.1
- 含有 Tomcat 的 Geronimo 1.1
- Windows 版本:
- 含有 Jetty 的 Geronimo 1.1
- 含有 Tomcat 的 Geronimo 1.1
- Linux、Mac OS X 和 UNIX® 版:
- Little-G
- Linux、Mac OS X 和 UNIX 版本:
- 含有 Jetty 的 Little-G 1.1
- 含有 Tomcat 的 Little-G 1.1
- Windows 版本:
- 含有 Jetty 的 Little-G 1.1
- 含有 Tomcat 的 Little-G 1.1
- Linux、Mac OS X 和 UNIX 版本:
- 源代码
Geronimo 插件是针对 Geronimo 模块的一种新的打包机制。这种机制可用于分发 Geronimo 应用程序、服务器功能或集成产品。1.1 版的这种新插件架构提供了一项基础设施,可以将现有的设置以一种可以传输至其他机器上的格式打包。简单来说,插件不过是一个可以作为安装设置输出的现有应用程序或服务,其随后可以从一个远程存储库中安装到您的机器中。
Geronimo 插件存储库是一个为通用或免费下载插件提供了 Maven 类型存储空间的标准的中央场所。可以在 Geronimo Plugins 的站点(参见本文末尾处 参考资料 的链接)上获取这样的一个通用存储库。许多这样的存储库都允许您挑选任意位置作为存储库的目标提供位置,该位置在根目录下有一个 geronimo-plugins.xml 文件,文件中列出了该存储库中可用的插件。
新的 Geronimo 插件架构使插件成为一种有用的机制,在这种机制下,可将模块和应用程序从一处开发或部署环境中分发到另一处中,该架构具有下列特征:
- 任何类型的 Geronimo 模块、应用程序或服务都可以作为 Geronimo 插件分发。
- 安装插件的过程自动下载了一些不一定能从 Geronimo 分发包中获取的依赖项(JAR 或其他插件)。
- 在安装插件前,所有资源方面的先决条件都必须得到满足,不然就会安装失败。
- 由于创建插件需要一个完整的安装包,因而能保证所有的插件都是完整的。
- 插件所需的依赖项可以由插件库或其他任何 Maven 存储库提供。
- 在任何种类的许可下,远程、本地、内部或外部存储库都可以用于共享插件。
Geronimo 1.1 Web 控制台提供了一个用于在运行时安装或创建 Geronimo 插件的 portlet。要选择一个用于插件搜索的存储库,可修改 DownloadedPluginRepos GBean 的属性,如 清单 1 所示。
清单 1. 示例 var\config\config.xml DownloadedPluginRepos GBean 属性
<gbean name="DownloadedPluginRepos">
<attribute name="repositoryList">http://people.apache.org/~ammulder/
plugin-repository-list-1.1.txt
</attribute>
<attribute name="userRepositories">[]
</attribute>
<attribute name="downloadRepositories">[http://www.geronimoplugins.com/
repository/geronimo-1.1/]
</attribute>
</gbean>
|
要从其他机器或存储库中安装一个插件,首先单击 图 1 中所示的链接更新存储库清单。
图 1. 安装和移动插件,然后创建 portlet 视图
有了这个存储库清单,您就可以搜索所寻找的插件并安装它了。同样,使用与 图 1 中相同的 portlet,您可以单击这个 portlet 中的 Export Plugin 按钮,为在 Geronimo 服务器上运行的任何应用程序或模块创建一个插件。这将打开一个页面,在页面中提供了下列有关将要创建的插件的信息:
- 易于阅读的名称
- 惟一的 ID
- 依赖项的按行分隔的存储库清单
- 插件归属的种类
- 简短的描述
- 插件的 URL
- 作者信息
- 许可
- 开放源码选项
- Geronimo 版本
- JVM 版本
- 依赖项
- 先决条件
请先提供上述信息,然后保存该插件。
Geronimo 1.1 对文件的主要方面进行了重构 —— 也就是说,所有的应用程序、服务和通用库现在都被存储并解包到一个存储库中。存储库仅仅是一个 Geronimo 安装下的目录。此存储库具有一个由添加于其中的模块 moduleID 定义的严格的内部结构。Geronimo 1.1 中的 moduleID 由下列项构成:
- Group ID:用于确认一个模块所在组的名称。默认值为 default。
- Artifact ID:组中模块的名称。默认值为 <file name>。
- 版本:模块版本。默认值为 <Numeric timestamp>。
- Type:模块类型,比如系统模块(car)、jar 模块(jar)、web 档案文件(war)、企业档案文件(ear),等等。默认值为 <File extension>。
模块在存储库中以 repository/groupId/artifactId/version/artifactId-version.type 形式存储。这样的存储库结构使得 Geronimo 应用程序的结构更加标准化,更加易于维护。
Geronimo 1.1 和之前版本的另一个主要区别在于引入了部署方案。正如在 存储库 一节中所讨论的那样,引入了一个名为 moduleID 的新元素,并取代了 configID。下列部分中概述了那些在 Geronimo 1.1 部署方案中改变、移除或添加的主要元素。
Geronimo Web 方案(WEB-INF/geronimo-web.xml)
清单 2 中是一些在 1.1 版中从 Geronimo Web 方案中移除的元素。
清单 2. 从 Geronimo Web 方案中移除的元素
<context-priority-classloader> <sys:classloader-infoGroup> <Import: dependencyType> <dependencies: dependencyType> <hidden-classes> <non-overridableclasses> </sys:classloader-infoGroup> <configId> <parentId> |
代替 清单 2 中的元素,现在 1.1 版中包含了一个环境元素,该元素由 清单 3 中所示的子元素组成。
清单 3. 添加到 Geronimo Web 方案中的元素
<environment <moduleId> <dependencies> :: All classloader and dependency information for the module <hidden-classes> :: A list of classes that will never be loaded from parent classloaders of this module <non-overridable-classes> :: A list of classes that will only be loaded from parent classloaders of this module <inverse-classloading> :: If the "inverse-classloading" element is specified, the standard classloading delegation model is to be reversed for this module. <suppress-default-environment> :: If the "suppress-default-environment" element is specified, then any default environment build by a builder when deploying the plan will be suppressed. </environment> |
另一处对 Geronimo Web 方案的增加是使用一个元素对 Web 容器的选择性引用,如 清单 4 所示。
清单 4. 使用一个元素对 Web 容器的选择性引用
<naming:web-container> <pattern> <groupId> <artifactId> <version> <module> <name> </pattern> <gbean-link> </naming:web-container> |
Geronimo 企业应用程序方案(WEB-INF/geronimo-application.xml)
除了要将所有 Geronimo Web 方案中定义的改变都包含到 Geronimo 企业应用程序方案中之外,<inverse-classloading> 元素(在 geronimo-application 1.0 方案存在)被移到了环境元素中。
Geronimo 客户机应用程序方案(WEB-INF/geronimo-application-client.xml)
下列在 1.0 版中包含的 Geronimo 客户机应用程序方案中的元素在 1.1 版中被移除,代之以两个独立的客户机-环境元素和服务器-环境元素,如 清单 5 所示。
清单 5. 客户机-环境元素和服务器-环境元素
<classloader-include-infoGroup> <import> <include> <dependency> <hidden-classes> <non-overridable-classes> </classloader-include-infoGroup> <configId> <parentId> <clientConfigId> <clientParentId> |
清单 6 显示了独立的客户机-环境元素和服务器-环境元素。
清单 6. 独立的客户机-环境元素和服务器-环境元素
<client-environment> <moduleId> <dependencies> <hidden-classes> <non-overridable-classes> <inverse-classloading> <suppress-default-environment> </client-environment> <server-environment> <moduleId> <dependencies> <hidden-classes> <non-overridable-classes> <inverse-classloading> <suppress-default-environment> </server-environment> |
其余的部署方案,如 openejb plan 和 tomcat plan,包含了与列在 Web 应用程序方案中相同的改变。
Apache Geronimo 1.1 包含了对 Web 控制台的主要改进,这在下一节中有所概述。
在服务器内存使用图中,服务器信息组件现在每两秒钟更新一次,如 图 2 所示。
图 2. 内存使用图视图
您可以获取所有定义了的线程池的统计信息,如 Pool Max、Lowest Recorded、Highest Recorded 和 Threads in Use 等,如 图 3 所示。
图 3. 线程池统计视图
远程 HTTPd 配置向导及 mod_jk 配置 portlet
此 portlet 被用于配置 Apache 2 HTTP 服务器(使用 mod_jk Apache 模块)。使用这个控制台模块,您能够分别定义每一个模块的静态内容和动态内容的传输。对于每一个在 Geronimo 中运行的应用程序,您可以指定该 Web 应用程序是否应该通过 Apache 公开,Apache 是否应该服务于该 Web 应用程序的静态内容,且如果 Apache 服务的是静态内容,应该将哪个 URL 路径传递给 Geronimo(参见 图 4)。
图 4. Mod_jk 配置向导
密钥库管理器向导用于创建同 SSL 连接一起使用的密钥。可以使用此向导创建新的密钥库,并查看现有密钥库的状态。图 5 展示了这个密钥库管理器向导。
图 5. 密钥库管理器向导
添加这一针对 Web 控制台的重要改进是为了允许使用 Web 控制台对应用程序进行重新部署。
Geronimo 的热部署器是一项新添加的服务,它允许不使用部署工具来在运行时对应用程序进行部署。使用热部署器服务,您不必停止并重启服务器,就可以对应用程序及其模块进行各种更改。热部署器查找在 Geronimo 安装的部署目录下所做的更改,如果添加了一个新的文件、目录或方案,热部署会选定它并对它进行部署,正如您使用部署工具对其进行手动部署一样。如果目录中的模块已经存在,这些更改会被重新部署,如果文件被移除,热部署器会确保这些模块被解除部署。这项功能在 Geronimo 1.0 中就引入了,但并未得到期望中的效果。下列是 Geronimo 热部署器中改进的功能:
- 目录和已部署模块间的紧密同步;如果目录中的文件被删除,部署模块会被解除部署。同样地,如果模块被解除部署,部署目录中相应的文件也会被删除。
- 如果文件改变了,模块会被重新部署。
- 如果新改变发生在服务器宕机的时候,热部署将会在启动过程中进行。
- 提供了对具有 Geronimo 方案文件的服务模块部署的支持。
注意仍不支持启动过程中的解除部署。
Geronimo 1.1 支持一个名为就地部署 的功能,这意味着,可以不用将档案文件和目录复制到 Geronimo 目录结构中,就可以对其进行部署。您可以使用部署工具的 --inplace 选项来完成这项任务。这样就确保了不向 Geronimo 目录结构中复制任何东西,且文件是从您指定的位置提取的。要使用就地部署功能,需将您的档案文件在您选定的目录下打开,并执行下列命令:
deploy.bat --user system --inPlace deploy myApp.ear
Geronimo 1.1 中添加的另一项部署功能是脱机部署选项,该选项可用于在服务器不运行时部署任何模块。在内部,在调用部署器前,它装载了所需的微小内核和配置模块。这些装载的少量所需配置列出 var/config/offline-deployer-list 中。要使用脱机部署功能,您可以在部署工具中使用 --offline 标记,如下所示:
deploy.bat --user system --offline deploy myApp.ear
Eclipse 插件提供了 Geronimo 和 Eclipse Web 工具项目(WTP)间的集成。您可以使用这个插件来开发、测试及调试 Geronimo 1.1 应用程序,并用 Eclipse 创建一个 Geronimo 测试环境。当在 WTP 中定义一个运行时的时候,通过单击 Don't see your server listed? 链接,您可以将插件直接安装到 WTP, Version 1.5 中。另一种可选方法是,通过创建一个指向 http://geronimo.apache.org/devtools 的新的远程站点,利用更新管理器来安装插件。图 6 展示了用于 Geronimo 1.1 的 Eclipse 部署和测试环境。
图 6. Eclipse 插件和测试环境
除了插件环境之外,Geronimo 1.1 为包含外部应用程序、模块及服务开启了一条路径。高度期待的模块之一是一个门户应用程序。Liferay Portal(可以从 Sourceforge.net 获取)是一个开放源码的 Java 和 J2EE 门户系统,它通过为不同的应用程序提供一个统一的视图,从而帮助组织间更加有效的协作。(参见 参考资料 中关于 Liferay 门户插件的链接。)
Apache Geronimo 应用服务器实实在在是基于社区努力的成果,本文对其最新版本中包含的功能进行了简要的描述。不管是在小企业还是中型企业领域,Geronimo 都快速成为其应用服务器的首选。新添加的插件功能进一步加强了服务器的可扩展性和易用性。具备插件架构的 Little-G 提供了一个灵活的基础设施,它不用向您的环境中添加额外的内存或空间,就能适应您自身的开发需求。Geronimo 开发社区无疑是非常成功的,它不断琢磨和完善这个项目,以使其更好地适用于各种环境和用户。以 Geronimo 1.1 作为序幕,您一定要在 Apache Geronimo 项目站点中贡献您的力量!
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。
- 用 Eclipse plug-in for Geronimo 1.1 提升您的 Java 应用程序开发水平。
- 阅读 developerWorks WebSphere 产品专区 中的文章和教程,了解更多有关 IBM WebSphere® Application Server Community Edition 的知识。
- 了解更多关于 Geronimo 的知识,现在就开始在 developerWorks 的 Apache Geronimo 项目资源专区 中使用它吧!
- 查阅 IBM Support for Apache Geronimo 提供的参考资料,让您能够在世界范围的 IBM 支持下开发 Geronimo 应用程序。
- 浏览 developerWorks Open source 专区中的所有 Apache 文章 和 免费的 Apache 教程。
- 在 Safari 书店 浏览有关此方面及其他技术主题的书籍。
获得产品和技术
- 访问 SourceForge 上的 Liferay Portal project area,获取更多关于这个门户项目的信息。
- 获取 Geronimo 及存储库的扩展。
- 下载 Apache Geronimo 1.1 的免费二进制版本和源代码版本。
- 用 IBM WebSphere Application Server Community Edition 构建您的下一个开发项目,该软件可以直接从 developerWorks 下载。
- 用 IBM 试用软件 改进您下一个开放源码开发项目,这些软件可以通过下载或 DVD 获取。
讨论
- 参与论坛讨论。
- 加入 apache.org 上的 Geronimo 1.1 用户邮件列表、开发人员邮件列表和源码控制邮件列表。
- 参与 Geronimo 1.1 JIRA discussions and threads。
- 随时关注 Apache Geronimo blog,以了解 Geronimo 的最新进展。
- 通过参与 developerWorks blogs 加入 developerWorks 社区。

Rakesh Midha 是 Bangalore 的 IBM 软件实验室的一名软件架构师,目前效力于 IBM 内部的开放源码首创行动。他有 8 年在多平台和各种关系数据库系统(像 IBM DB2® Universal Database™、Oracle、MySQL 和 Microsoft SQLServer)上进行 Java 和 C++ 服务器端编程的技术经验。他参与了多个 J2EE 应用程序、产品架构开发及实现。他是两本与 DB2 相关的 IBM 红皮书的作者,并经常在 IBM developerWorks 发表文章。2006 年 8 月,他参加了在斯里兰卡 Colombo 召开的 ApacheCon Asia 会议,并发表了主题为 “深入 Apache Geronimo 1.1 —— 是什么让它与众不同?” 的演讲。他从印度 Chandigarh 的 Punjab 大学获得了电子工程学学士学位。