扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在学习示例应用程序之前,首先要详细了解一下将用于创建和部署该应用程序的三种技术。
Maven 是用于构建 Java 应用程序的应用程序,它从源代码一直构建到打包至 Web 站点。Geronimo 应用服务器是使用 Maven 应用程序的构建系统构建的。在它的核心内,Maven 的可扩展框架允许创建模块以执行构建软件组件时需要的一些动作。谈到 Apache Ant(Java 构建工具),Maven 的动作已经与使用 UNIX 命令 make 生成的结果进行了比较。Maven 脚本还允许将应用程序自动部署到正在运行的 Geronimo 服务器中。本文展示了如何使用 Maven 来将源代码打包到完整的 Java 2 Platform, Enterprise Edition (J2EE) 企业应用程序中。
Struts 是基于 Model 2 架构的 Web 应用程序框架。该混合架构最大程度地将业务逻辑和显示逻辑隔离。Struts 通过将业务逻辑隔离到纯 Java 类中来实现这一目标,纯 Java 类操作数据,并提供了丰富的标记库,该库可用于在编写 JavaServer Pages (JSP) 时显示数据。(在无数可用的 Web 开发框架中,许多框架都有很高的人气,比如 Tapestry 和 JavaServer Faces,而 Struts 一直是我偏爱的一个。)
XDoclet 起源于存在已久的 Java 文档工具 Javadoc。XDoclet 开发人员最初以一种新颖的方法使用 Javadoc,即使用专门的注释来生成可以被编译成源代码的模型。他们从 Javadoc 的实际使用抽身而出,生产出他们自己的变种,叫做 Xjavadoc。但是在 XDoclet 早期,仍然需要在源代码的 Javadoc 注释中使用标记来自动生产自动生成的代码。编写 J2EE 应用程序中的源代码和部署描述符文件可能十分冗长乏味。对于每一百行左右的 Java 代码,预计可以生成至少三倍多的支持 J2EE 描述符代码来完成工作。为了大大减少开发多层企业应用程序的痛苦,XDoclet 伸出援手,提供了代码标记和代码生成以使大部分部署描述符自动生成。这样就隐藏了 J2EE 的大量复杂性,但您要清楚代码生成器在构建什么,因为当事情没有如期进行时,您必须检查它。
部署计划
正如在简介中提到的,Maven 被 Geronimo 团队用来构建整个应用服务器。您可以利用 Maven 构建工具的强大功能来编译应用程序源代码,执行代码生成(需要 XDoclet 的帮助),绑定企业应用程序模块,并最终将其部署到正在运行的 Geronimo 服务器中。
该过程以三个文件开始。第一个文件 project.xml 定义什么是所谓的项目对象模型(Project Object Model,POM)。它列出应用程序的相关信息,包括应用程序名称、编写者、版本号、对构建应用程序非常重要的依赖关系,以及对如何构建应用程序的概述。出于本文目的,我们将主要研究 POM 的依赖关系部分。
上的指定资源库中下载构建应用程序所需的工件。iBiblio就是这样一个资源库,它包含数百个开放源代码 Java 库和支持文件,以及这些库的 POM 信息。它收集了大量信息,目的只有一个,即简化应用程序构建过程中 Java 开发人员的生活。电话簿应用程序 project.xml 文件的依赖关系部分由 23 个依赖关系组成,其中一半是 .jar 文件,用于支持 Struts 和 DisplayTag 标记库。其余的依赖关系主要是 XDoclet 要求。不使用 Maven,每个依赖关系都需要与示例应用程序绑定在一起。
Maven 只在第一次编译应用程序时下载所有依赖的工件。以后的编译运行利用 Maven 的本地资源库(已下载工件的本地高速缓存,通常位于 $HOME 目录的 .maven 目录下)来获得工件。
安装 Maven 1.0.2
我们的示例应用程序需要对 Maven 进行一些初始设置以使一切正确工作。首先,需要安装 Maven 1.0.2(参阅 参考资料 中的 Maven Web 站点链接)。安装完成后,在命令行输入 maven,将看到类似如下的信息:
E:\Documents and Settings\Neal\My Documents\eclipse\workspace\Phonebook> maven
__ __
| \/ |__ _Apache__ ___
| |\/| / _` \ V / -_) ' \ ~ intelligent projects ~
|_| |_\__,_|\_/\___|_||_| v. 1.0.2
然后,按照 Wiki上的指令从源代码编译 Geronimo。成功构建之后,Geronimo 工件将位于本地资源库。它们是构建示例应用程序所必需的。编译完 Geronimo 之后,查找 geronimo-deployment-plugin-1.0-SNAPSHOT.jar 文件,并将其安装到 $MAVEN_HOME/plugins 目录中,否则可能会看到如下消息:
Tag library requested that is not present: 'geronimo:deploy' in plugin: 'null'
安装 XDoclet 1.2.3
最后,需要将 XDoclet 1.2.3 安装到 Maven 资源库中。如果试图构建示例应用程序,会显示一条 Maven 消息,指明它无法找到一些其他的 XDoclet 1.2.3 工件,这时您可能需要下载 XDoclet 1.2.3(lib 包),并将 .jar 文件解压到位于 .maven/repository/xdoclet/jars 的本地 Maven 资源库中。如果您是 Windows 用户,应该在 C:\Documents and Settings\username 目录下查找该 Maven 目录。如果您是 UNIX 用户,应该在主目录下查找该目录。还应该通过将 maven-xdoclet-plugin-1.2.3.jar 添加到 $MAVEN_HOME/plugins 目录来安装 XDoclet Maven 插件。
成功构建
具备这些先决条件之后,构建过程应该能够顺利进行。当然,可以在进行上述工作之前尝试构建,查看 Maven 找不到哪些文件,然后只安装这些文件。可以尝试在示例应用程序的顶层目录中运行 Maven。首先,许多工件将被下载,最后,您将看到 BUILD SUCCESSFUL 消息。
要更多了解 Maven 做什么,研究一下 maven.xml 和 project.properties 文件。Maven 是面向目标的。它读取 maven.xml 并尝试满足顶层项目元素的默认属性中指定的所有目标。在本例中,它尝试满足部署目标指明为先决条件的所有事项;也就是说,它将尝试构建 .ear 文件,然后尝试停止和启动应用程序。应用程序的部署是通过上述的 Geronimo Deployment Maven 插件执行的。当然,Geronimo 服务器应该运行 —— 否则构建将失败,并显示如下消息:
Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException
[Root exception is java.rmi.ConnectException: Connection refused to
host: 10.0.0.7; nested exception is:
java.net.ConnectException: Connection refused: connect]
如果收到该消息,使用如下命令启动 Geronimo 服务器:
E:\geronimo-snapshot>java -jar bin\server.jar org/apache/geronimo/
DebugConsole org/apache/geronimo/RuntimeDeployer
该命令告诉 Geronimo 启动其服务器、DebugConsole 应用程序配置和 RuntimeDeployer 配置。
调试控制台
DebugConsole(参见 图 1)是可选组件,允许通过一个小 Web 应用程序(参阅 http://localhost:8080/debug-tool)查看 Geronimo 服务器中在运行什么。
图 1. Geronimo DebugConsole
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者