在讨论 Little-G 和 Geronimo 时,必须解释底层的体系结构。Geronimo 平台具有一种模块化的体系结构。核心平台是一个用于单元服务组件 GBean 的运行时容器。相关的 GBean 被分组为可部署的单元,这样的单元称为配置(configuration)。Little-G 服务器使用 Geronimo 平台的模块化体系结构构建一个轻量级服务器。图 1 给出了 Little-G 的内部结构。
图 1. Geronimo 平台体系结构
可以通过在 Geronimo 平台上部署配置来添加新的服务和功能。Geronimo 内核和基本 Geronimo 系统配置构成了所有 Geronimo 服务器的核心平台。Little-G 是在这个核心之上构建的,添加了一个 Remote Method Invocation(RMI)命名配置,它提供命名服务功能。另外,RMI 命名配置提供一个线程池和插件安装程序。Java EE 服务器和 Java EE 安全配置以 RMI 命名配置作为它们的父配置。Java EE 服务器配置实现 Java EE 管理对象,比如服务器域和服务器对象。Java EE 安全配置实现基于 Java Authentication and Authorization Service(JAAS)的安全服务和 JAAS 登录模块,并创建一个基于配置文件的安全域,可以从用户应用程序访问这个安全域。在 Java EE 服务器上构建了事务配置,它提供事务处理功能。最后,Apache Tomcat 配置在 Geronimo 中添加了 Tomcat Web 容器。
除了 图 1 所示的配置之外,Little-G 还包含以下部署器和配置:
- geronimo/geronimo-gbean-deployer/1.1.1/car 配置 —— 处理 Little-G 模块的部署
- geronimo/j2ee-deployer/1.1.1/car 配置 —— 处理 Web 应用程序的 Java EE 部署
- geronimo/tomcat-deployer/1.1.1/car 配置 —— 将 Web 应用程序部署到 Tomcat Web 容器
- 三个配置:
- geronimo/unavailable-ejb-deployer/1.1.1/car —— 处理 Enterprise JavaBeans(EJB)不可用的问题
- geronimo/unavailable-webservices-deployer/1.1.1/car —— 处理 Web 服务不可用的问题
- geronimo/unavailable-client-deployer/1.1.1/car —— 处理客户机应用程序部署器不可用的问题
Little-G 提供以下服务和特性:
- 一个基于 Tomcat 或 Jetty 的 Web 容器
- 一个 Java EE 基本服务器
- 一个基于 JAAS 的安全实现
- 一个基于 RMI 的命名服务
- 一个可以部署 GBean 配置的部署器
- 一个可以部署 Web 应用程序的部署器
- 通过 TranQL 代码实现的 JDBC 连通性,TranQL 是一种用于创建持久化引擎的开放源码实现
- 用来创建和部署 Geronimo 插件的设施
注意:Geronimo 插件与 Eclipse 插件相似,它们都包含打包的应用程序或额外的功能。Geronimo 插件封装了所有部署信息;因此,可以轻松地安装它们,而不需要关心环境特有的设置。
可以以两种方式之一设置 Little-G:
- 下载并安装服务器归档文件。
- 通过源代码构建服务器。
如果希望通过源代码构建服务器,那么必须下载源代码文件并运行特定的 Maven 目标来构建和创建服务器。但就本文而言,您将安装归档文件,为此,需要使用 Subversion 来下载 Geronimo 源代码。
首先 下载 Geronimo。在这里可以找到 Geronimo 服务器和 Little-G 的 UNIX® 和 Microsoft® Windows® 文件。下载 Little-G Apache Tomcat 压缩文件,并将它解压到 GERONIMO_HOME 文件夹中,如图 2 所示。
图 2. Little-G 目录
可以看到 Little-G 安装的目录结构与 Geronimo 安装很相似。它毕竟只是一种 Geronimo 安装。
Little-G 没有附带控制台应用程序,所以不能通过在浏览器中访问控制台应用程序(http://localhost:8080/console)来测试安装。对于 Little-G,必须使用 Command-Line Interface(CLI)与服务器进行交互。从 GERONIMO_HOME/bin 目录发出以下命令之一来启动服务器:
GERONIMO_HOME\bin> java –jar server.jar
或:
GERONIMO_HOME\bin> startup
服务器启动并在命令窗口中显示启动信息,如图 3 所示。
图 3. Little-G 启动消息
如果看到这些消息,就说明 Little-G 的安装工作正常。
Little-G 启动以下监听器:
- 监听端口 1099 的命名服务
- 监听端口 4242 的远程登录监听器
- 用于 Apache Web 服务器集成的 Tomcat Accelerated Graphics Port(AGP)连接器
- HTTP 和 HTTP over Secure Sockets Layer(HTTPS)监听器,分别监听端口 8080 和 8443
- Java Management Extension(JMX)连接器,部署工具使用它来部署应用程序
您现在知道如何启动 服务器了。要想平稳地关闭它,应该从命令窗口发出以下命令:
GERONIMO_HOME/bin> shutdown –user system –password manager
可以使用 Little-G 轻松地修改大多数系统设置(比如日志级别和 Web 监听器端口)。GERONIMO_HOME/var/config/config.xml 文件包含持久性的设置信息。例如,如果需要修改 Tomcat HTTP 监听端口,就修改 TomcatWebConnector GBean 的 port 属性的值,如清单 1 所示。
清单 1. Config.xml
<module name="geronimo/tomcat/1.1.1/car">
<gbean name="TomcatResources"/>
<gbean name="TomcatWebConnector">
<attribute name="host">0.0.0.0</attribute>
<attribute name="port">8080</attribute>
<attribute name="redirectPort">8443</attribute>
</gbean>
<gbean name="TomcatAJPConnector">
<attribute name="host">0.0.0.0</attribute>
<attribute name="port">8009</attribute>
<attribute name="redirectPort">8443</attribute>
</gbean>
<gbean name="TomcatWebSSLConnector">
<attribute name="host">0.0.0.0</attribute>
<attribute name="port">8443</attribute>
</gbean>
<gbean name="geronimo/tomcat/1.1.1/car?ServiceModule=geronimo/tomcat/1.1.1/car,
j2eeType=GBean,name=TomcatWebContainer">
<attribute name="catalinaHome">var/catalina</attribute>
</gbean>
</module>
|
同样,可以通过修改 TomcatWebSSLConnector GBean 中 port 元素的值来修改 HTTPS 监听器端口。每当启动服务器时都会读取 config.xml 文件,这些属性值会应用于对应的 GBean。当部署新应用程序或者取消部署时,服务器也会更新这个文件来反映变化。在一般情况下,可以通过在这个文件中指定相应的条目,为模块中的任何 GBean 提供新值或者修改现有值。但是,如果需要修改日志设置,操作就不一样了。必须在 GERONIMO_HOME/var/log/server-log4j.properties 文件中进行修改。
因为 Little-G 没有附带示例应用程序,所以必须单独下载并部署它们。为此,需要学习如何在 Little-G 中部署和运行 Web 应用程序。
单击 Geronimo Documentation 页面 上的 Sample applications 链接,就会显示示例应用程序的列表。单击 Web application security sample 链接,并下载这个示例应用程序。(还可以从 下载 一节下载这个示例应用程序,timereport.zip)。在这个示例应用程序中,雇员可以输入他们的时间卡信息,经理可以输入时间卡信息并添加新雇员。这个应用程序使用基于数据库的安全域实现 Web 应用程序安全性。
注意:我使用了一个 postgreSQL V8.0 数据库(参见 参考资料 一节)。您可以使用任何其他数据库,但是我的示例清单使用的是适合 postgreSQL 的设置。
在建立可运行的数据库之后,运行 SQL 脚本(config/TimeReportDB.sql,可以在 下载 一节提供的 timereport.zip 中找到)。这个脚本创建用户和组表,您将使用这些表设置基于数据库的安全域。
您已经看到了 Little-G 的目录结构:GERONIMO_HOME/repository 目录包含所有外部库。在这个目录中安装数据库驱动程序 .jar 文件。repository 目录结构在子目录中包含外部库,这些子目录名称符合 Maven 命名约定,见图 4。
图 4. Little-G 存储库
在 commons-digester/commons-digester/1.6 目录中可以看到 commons-digester-1.6.jar 文件。这意味着,如果有一个条目的 groupID 为 cglib,artifactID 为 cglib-nodep,版本为 2.1_3,类型为 jar,那么 Little-G 会在 GERONIMO_HOME/repository/cglib/cglin-nodep/2.1_3 文件夹中寻找文件 cglib-nodep-2.1_3.jar。为了安装 postgresql-8.0.jar 文件,将它放在 repository 文件夹的 postgresql/postgresql/8.0 子目录中。
这个示例应用程序使用一个基于数据库的安全域,在安装 Web 应用程序之前必须安装这个域。编辑安全域部署计划 —— config/TimeReportRealm.xml —— 指定依赖项为 postgreSQL 数据库驱动程序 .jar 文件、JDBC 驱动程序类和登录模块配置的 JDBC 连接 URL,如清单 2 所示。
清单 2. 安全域配置部署计划
<module xmlns="http://geronimo.apache.org/xml/ns/deployment-1.1">
<environment>
<moduleId>
<groupId>console</groupId>
<artifactId>TimeReportRealm</artifactId>
<version>1.0</version>
<type>car</type>
</moduleId>
<dependencies>
<dependency>
<groupId>geronimo</groupId>
<artifactId>j2ee-security</artifactId>
<type>car</type>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>8.0</version>
<type>jar</type>
</dependency>
</dependencies>
</environment>
<gbean name="TimeReportRealm"
class="org.apache.geronimo.security.realm.GenericSecurityRealm">
<attribute name="realmName">TimeReportRealm</attribute>
<reference name="ServerInfo">
<name>ServerInfo</name>
</reference>
<reference name="LoginService">
<name>JaasLoginService</name>
</reference>
<xml-reference name="LoginModuleConfiguration">
<log:login-config
xmlns:log="http://geronimo.apache.org/xml/ns/loginconfig-1.1">
<log:login-module control-flag="REQUIRED"
server-side="true" wrap-principals="false">
<log:login-domain-name>TimeReportRealm</log:login-domain-name>
<log:login-module-class>
org.apache.geronimo.security.realm.providers.SQLLoginModule<
/log:login-module-class>
<log:option name="jdbcDriver">org.postgresql.Driver</log:option>
<log:option name="jdbcUser">postgres</log:option>
<log:option name="userSelect">
select userid, password from users where userid=?
</log:option>
<log:option name="groupSelect">
select userid, groupname from usergroups where userid=?
</log:option>
<log:option name="jdbcURL">
jdbc:postgresql://localhost:5432/TimeReportDB
</log:option>
</log:login-module>
</log:login-config>
</xml-reference>
</gbean>
</module>
|
moduleId 元素为这个部署单元(也称为配置)指定一个 Maven 风格的名称。这意味着,可以用统一资源标识符(URI)common/TimeReportRealm/1.0/car 从其他配置引用这个配置。还要注意,我在存储库中为 postgreSQL .jar 文件指定了一个 Maven 风格的依赖项定义。还指定了 JDBC 驱动程序类、数据库用户名和连接数据库(在这个数据库中已经创建了 users 和 usergroup 表)所用的 JDBC URL。
在修改部署计划之后,使用以下命令对配置进行部署:
deploy –user system –password manager deploy TimeReportRealm.xml
这个命令将安全域部署为配置 console/TimeReportRealm/1.0/car。如果需要取消这个安全域的部署,就使用以下命令:
deploy –user system –password manager undeploy console/TimeReportRealm/1.0/car
可以从 release 目录或者本文的 下载 一节获得 Web 应用程序 .war 文件。为部署 .war 文件,执行以下命令:
deploy –user system –password manager deploy TimeReport.war
该命令将部署 Web 应用程序,可以在浏览器中访问 http://localhost:8080/timereport 来调用这个程序。可以输入 emp1 作为用户名,pass1 作为密码,从而作为雇员登录。要作为经理登录,可以输入 mgm1 作为用户名,pass3 作为密码。还可以打开 web.xml 和 geronimo-web.xml 部署描述符,从而进一步了解身份验证是如何定义的以及如何映射到安全域。
如果 Web 应用程序只需要事务处理设施和数据库连通性,那么就可以使用 Little-G。从这方面来说,Little-G 提供了一个完整的 Web 容器,具备所有相关且必要的 Java EE 特性。您已经看到一个简单的 Web 应用程序如何利用 Little-G 内置的 Web 安全特性。对于简单的小型 Web 应用程序来说,Little-G 是非常合适的。
本文介绍了 Little-G 以及它为 Java EE 应用程序提供的服务,并解释了 Apache Geronimo 平台的模块化性质如何支持创建 Geronimo 的小型、轻量级版本。我们还在 Little-G 中配置、部署和运行了一个示例 Web 应用程序。Little-G 提供了 Geronimo 的一个简化版本,可以利用 Geronimo 的模块化性质在 Little-G 上开始构建应用程序。
练习:添加新的配置,提供您希望支持的服务。这正是 Geronimo 的强大之处!
| 描述 | 名字 | 大小 | 下载方法 |
|---|---|---|---|
| 本文所用的时间报告示例应用程序 | timereport.zip | 95KB | HTTP |
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。
-
访问 apache.org 上的 Geronimo 主页。
-
访问 Little-G wiki,了解关于这种服务器的更多信息,这里还有 Geronimo 示例应用程序 和 Web 应用程序安全示例应用程序 的链接。
-
访问 Codehaus 主页,了解关于开放源码持久化框架 TranQL 的更多信息。
- 查阅 developerWorks Apache Geronimo 项目资源中心 获得文章、教程和其他参考资料,帮助您立即开始使用 Geronimo 进行开发。
- 在 developerWorks 的 开始学习 Apache Geronimo 部分,查找面向初学者和有经验用户的有用参考资料。
- 查阅 IBM® Support for Apache Geronimo 提供的内容,从而在 IBM 的世界级支持下开发 Geronimo 应用程序。
- 访问 developerWorks 开源软件技术专区,这里有丰富的 how-to 信息、工具和项目更新,可以帮助您利用开放源码技术进行开发并将其用于 IBM 产品。
- 随时关注 developerWorks 技术事件和网络广播。
- 浏览 developerWorks 开放源码专区提供的所有 Apache 文章 和 免费 Apache 教程。
- 在 Safari 书店 浏览关于这些主题和其他技术主题的图书。
获得产品和技术
-
下载 Apache Maven。
-
下载 Subversion。
-
我在本文中使用了 postgreSQL。
-
Geronimo 下载页面
提供了本文讨论的技术和示例的链接。
- 下载 Apache Geronimo 的最新版本。
- 下载 IBM WebSphere® Application Server Community Edition 的免费副本,这是一个在 Apache Geronimo 开放源码技术上构建的轻量级 J2EE 应用服务器,用来帮助加速开发和部署工作。
- 使用 IBM 试用软件 改进您的下一个开放源码开发项目,这些软件可以下载或者通过 DVD 获得。
讨论
- 参与论坛讨论。
- 密切关注 Apache Geronimo blog 上有关 Geronimo 开发的最新信息。
- 通过参与 developerWorks blog 加入 developerWorks 社区。

Kishore Kumar 是 US Technology 的 Java Center of Excellence 主管,他热爱开放源码系统、板球和古典音乐。他曾经是软件工程师和 J2EE 架构师,还是许多图书和文章的作者,包括 Pro Apache Geronimo 。