创建拆分开发目录环境

转自:http://edocs.weblogicfans.net/wls/docs92/programming/splitcreate.html#wp1102496

创建拆分开发目录环境

以下部分描述创建 WebLogic Server 拆分开发目录(可用于开发 J2EE 应用程序或模块)的步骤:


拆分 开发目录环境概述

WebLogic 拆分开发目录环境由目录布局和一些关联的 Ant 任务组成,这些任务有助于重复生成、更改和部署 J2EE 应用程序。与其他开发框架相比,WebLogic 拆分开发目录具有以下优点:

  • 快速开发和部署。 通过最 大程度地减少不必要的文件复制工作,拆分开发目录 Ant 任务有助于快速重新编译和重新部署应用程序, 且 这一过程无需首先生成可部署的归档文件或展开的归档目录。
  • 简化的生成脚本。 BEA 提供的 Ant 任务可自动确定要创建的 J2EE 模块和类,并可以按正确的顺序生成组件,以支持常用类路径依赖关系。在很多情况下,项目生成脚本只需识别源目录和生成目录并允许 Ant 任务执行其默认行为即可。
  • 易于与源控制系统集成。 拆 分开发目录可将源文件和生成的文件彻底分开。这有助于仅在源控制系统中维护可编辑的文件。还可以通过删除整个生成目录来清除生成;可以通过重新生成项目来 轻松替换生成文件。

源目录和生成目录

源目录和生成目录构成了拆分开发目录环境的基础。源目录包含项目的所有可编辑文件 - Java 源文件、可编辑描述符文件、JSP 和静态内容等。在创建应用程序的源目录时,请遵从在 拆分开发目录中组织 J2EE 组件 中描述的目录结构准则。

源目录的顶级目录始终表示企业应用程序(.ear 文件),即使只开发单个 J2EE 模块时也是如此。顶级源目录之下的子目录包含:

  • 企业应用程序模块(EJB 和 Web 应用程序)
  • 注意: 拆分开发目录结构不对开发新资源适配器组件提供支持。
  • 企业应用程序描述符文件(application.xmlweblogic-application.xml
  • 由应用程序模块共享的实用工具类(例如,异常、常量)
  • 由应用程序模块使用的库(编译后的 .jar 文件,包括第三方库)

在针对有效源目录运行 wlcompile Ant 任务时,将自动生成生成目录内容。wlcompile 任务会识别源目录中的 EJB、Web 应用程序、共享库和类目录,然后按照支持常用类路径要求的顺序生成这些组件。其他 Ant 任务可用于生成 Web Service 或从批注的 EJB 代码生成部署描述符文件。

图 3-1 源目录和生成目录

源目录和生成目录

 

生成目录仅包含在生成过程中生成的文件。源目录和生成目录中的文件组合在一起便形成了可部署的 J2EE 应用程序。

生成目录和源目录内容可根据需要放置在任何目录中。但是,为便于使用,通常将这些目录置于单个项目目录内名为 sourcebuild 的目录中(例如 \myproject\build\myproject\source )。

拆分开发目录进行部署

所有 WebLogic Server 部署工具(weblogic.Deployerwldeploy 和管理控制台)都支持直接从拆分开发目录进行部署。在将应用程序部署到 WebLogic Server 中时,只需指定生成目录即可。

WebLogic Server 会尝试使用 源目录中的所有可用类和资源来部署应用程序。如果源 目录中没有所需的资源,WebLogic Server 将在应用程序的生成目录中查找该资源。例如,如果部署描述符是在生成过程中生成的,而不是作为可编辑文件与源代码存储在一起,则 WebLogic Server 将从生成目录中获取该生成的文件。

WebLogic Server 通过检查驻留在应用程序生成目录的顶级目录中的 .beabuild.txt 文件来发现源目录的位置。如果源目录位置已经过移动或修改,则应编辑 .beabuild.txt 文件以标识新的源目录名。

从 拆分开发目录进行部署和打包 描述可用于自动从拆分开发环境进行部署的 wldeploy Ant 任务。

图 3-2 显示了典型的部署过程。该过程首先使用 WebLogic Server 工具指定生成目录。如图所示,在生成目录中可发现所有已编译的类和已生成的部署描述符,但缺少其他应用程序资源(例如静态文件和可编辑的部署描述符)。 WebLogic Server 使用隐藏的 .beabuild.txt 文件来定位应用程序的源目录,并从中查找所需的资源。

图 3-2 拆分目录部署

拆分目录部署

 

拆分开发目录 Ant 任务

BEA 提供了一个由 Ant 任务构成的集合,设计这些任务是为了帮助用户使用拆分开发目录环境开发应用程序。每个 Ant 任务都使用源目录和/或生成目录来执行常用的开发任务:

  • wlcompile - 此 Ant 任务将源目录的内容编译到生成目录的子目录中。wlcompile 编译 Java 类,此外,它还将批注的 .ejb 文件处理成部署描述符,如使 用 wlcompile 编译应用程序 中所述。
  • wlappc - 此 Ant 任务调用 appc 编译器,以生成部署所需的 JSP 和容器特定的 EJB 类。请参阅使 用 wlappc 生成模块和应用程序
  • wldeploy - 此 Ant 任务将任意格式的 J2EE 应用程序(展开或归档)部署到 WebLogic Server。要直接从拆分开发目录环境进行部署,应指定应用程序的生成目录。请参阅 wldeploy Ant 任务参考
  • wlpackage - 此 Ant 任务使用源目录和生成目录中的内容生成 EAR 文件或展开的 EAR 目录,这些文件或目录可提供给他人进行部署。

使用拆分开发目录结构:主要步骤

以下步骤说明如何使用拆分开发目录结构来生成和部署 WebLogic Server 应用程序。

  1. 创建项目的主 EAR 源目录。在使用拆分开发目录环境时,即使不打算开发多个 J2EE 模块,也必须将 Web 应用程序和 EJB 作为企业应用程序的一部分进行开发。请参阅在 拆分开发目录中组织 J2EE 组件
  2. 向 EAR 目录添加一个或多个子目录,以存储 Web 应用程序、EJB 组件或共享实用工具类的源文件。请参阅在 拆分开发目录中组织 J2EE 组件在 拆分开发目录中组织共享类
  3. 将模块的所有可编辑文件(源代码、静态内容、可编辑部署描述符)存储 在 EAR 目录的子目录中。将源目录中的全部内容添加到源控制系统中(如果适用)。
  4. 通过执行 WLSEnv.cmd (Windows) 或 setWLSEnv.sh (UNIX) 脚本设置 WebLogic Server 环境。这些脚本位于 WL_HOME \server\bin\ 目录中,其中 WL_HOME 是安装 WebLogic Server 的顶级目录。
  5. 使用 weblogic.BuildXMLGen 实用工具生成项目要使用的默认 build.xml 文件。根据环境的需要编辑默认属性值。请参阅使 用 weblogic.BuildXMLGen 生成基本 build.xml 文件
  6. 使用 build.xml 文件中的默认目标生成、部署和打包应用程序。有关默认目标的列表,请参阅使 用 weblogic.BuildXMLGen 生成基本 build.xml 文件

在拆分开发目录中组织 J2EE 组件

拆分开发目录结构要求将每个项目都暂存为 J2EE 企业应用程序。因此,BEA 建议将独立 Web 应用程序和 EJB 也暂存为企业应用程序的模块,以便利用拆分目录 Ant 任务所提供的便利。通过此实践,还可以在日后方便地添加或删除模块,因为已将应用程序组织为 EAR。

注意: 如果项目需要多个 EAR,则另请参阅使 用拆分开发目录开发多 EAR 项目

以下部分描述在拆分开发目录结构中暂存下列模块类型时使用的基本约定:

目录示例选自 splitdir 示例应用程序,该程序安装在 WL_HOME \samples\server\examples\src\examples\splitdir 中,其中 WL_HOME 是 WebLogic Server 安装目录。

源目录概述

下图概括了包含 Web 应用程序、EJB、共享实用工具类和第三方库的企业应用程序的源目录内容。以下部分则更为详细地介绍了企业源目录中各个部分的组织方式。

图 3-3 企业应用程序源目录概述

企业应用程序源目录概述

 

企业应用程序配置

拆分开发目录项目的顶级源目录表示企业应用程序。下图显示了该目录中至少需要的文件和目录。

图 3-4 企业应用程序源目录

企业应用程序源目录

 

企业应用程序目录下还包含一个或多个子目录,用于保存 Web 应用程序、EJB、实用工具类和/或第三方 Jar 文件,如以下部分所述。

Web 应用程序

Web 应用程序使用基本源目录布局,如下图所示。

图 3-5 Web 应用程序源目录和生成目录

Web 应用程序源目录和生成目录

 

Web 应用程序的关键目录和文件包括:

  • helloWebApp\ - Web 应用程序模块的顶级目录可以包含 JSP 文件和静态内容,例如应用程序中使用的 HTML 文件和图形。此外,还可以在 Web 应用程序的任何命名子目录中存储静态文件(例如 helloWebApp\graphicshelloWebApp\static )。
  • helloWebApp\WEB-INF\ - 在 WEB-INF 子目录中存储 Web 应用程序的可编辑部署描述符文件(web.xmlweblogic.xml )。
  • helloWebApp\WEB-INF\src - 在 WEB-INF\src 下的包子目录中存储 Servlet 的 Java 源文件。

在生成 Web 应用程序时,appc Ant 任务和 jspc 编译器会将 JSP 编译到生成目录中 helloWebApp\WEB-INF\classes\jsp_servlet 下的包子目录中。在生成过程中不复制可编辑的部署描述符。

EJ B

EJB 使用下图所示的源目录布局。

图 3-6 EJB 源目录和生成目录

EJB 源目录和生成目录

 

EJB 的关键目录和文件包括:

  • helloEJB\ - 在EJB 模块目录的包目录下存储所有 EJB 源文件。源文件可以是 .java 源文件,也可以是批注的 .ejb 文件。
  • helloEJB\META-INF\ - 在 EJB 模块目录的 META-INF 子目录中存储可编辑的 EJB 部署描述符(ejb-jar.xml 和 weblogic-ejb-jar.xml)。helloWorldEar 示例不包含 helloEJB\META-INF 子目录,因为它的部署描述符文件是从 .ejb 源文件中的批注生成的。请参阅关 于 EJB 描述符的重要说明

在生成过程中,EJB 类将编译到生成目录中 helloEJB 模块的包子目录中。如果使用了已批注的 .ejb 源文件,则生成过程还会生成 EJB 部署描述符并将它们存储在生成目录的 helloEJB\META-INF 子目录中。

关于 EJB 描述符的重要说明

仅当 EJB 部署描述符是从头创建或手工编辑时,才应将这些描述符文件包含在源 META-INF 目录中并将其视为源代码。而从已批注的 .ejb 文件生成的描述符文件只能出现在生成目录中,用户可以删除它们,并可通过生成应用程序来重新生成它们。

对于给定的 EJB 组件,EJB 源目录包含的内容应符合以下要求之一:

  • .java 源文件中包含 EJB 源代码,META-INF 中包含可编辑的部署描述符

或:

  • .ejb 源文件中包含带描述符批注的 EJB 源代码,META-INF 不包含可编辑的描述符。

换句话说,对于同一个 EJB 组件,请勿同时提供已批注的 .ejb 源文件和可编辑的描述符文件。


在拆分开发目录中组织共享类

WebLogic 拆分开发目录还有助于存储企业应用程序模块所需的共享实用工具类和库。以下部分描述共享实用工具类和第三方 JAR 文件的目录布局和类加载行为。

共享实用工具类

企业应用程序经常使用应用程序模块之间共享的 Java 实用工具类。与第三方 JAR 不同的是,Java 实用工具类的源文件是应用程序的一部分,必须进行编译。Java 实用工具类通常是应用程序模块(例如 EJB 或 Web 应用程序)使用的库。

图 3-7 Java 实用工具类目录

Java 实用工具类目录

 

应将 Java 实用工具类的源文件置于顶级企业程序目录的命名子目录中。在该命名子目录之下,应使用标准包子目录约定。

在生成过程中,wlcompile Ant 任务会调用 javac 编译器并将 Java 类编译到生成目录下的 APP-INF/classes/ 目录中。这样可确保已部署应用程序中的其他模块也可以使用这些类。

第三方库

可以将企业应用程序扩展为使用第三方 .jar 文件,方法是将这些文件置于 APP-INF\lib\ 目录中,如下所示:

图 3-8 第三方库目录

第三方库目录

 

通常不编译第三方 JAR,但可以使用应用程序代码的源控制系统对它们进行版本控制。例如,XML 解析器、日志记录实现和 Web 应用程序框架 JAR 文件通常用于应用程序中,并与可编辑的源代码一起得到维护。

在生成过程中,第三方 JAR 文件不会复制到生成目录中,而是保留在用于部署的源目录中。

共享类的类加载

APP-INF/classesAPP-INF/lib 下存储的类和库可用于企业应用程序中的所有模块。应用程序类加载器始终会先后在 APP-INF/classesAPP-INF/lib 中查找,以此来尝试解析类请求。


使用 weblogic.BuildXMLGen 生成基本 build.xml 文件

在设置源目录结构后,应使用 weblogic.BuildXMLGen 实用工具创建基本 build.xml 文件。weblogic.BuildXMLGen 是一个便利的实用工具,它可以为拆分开发目录结构中的企业应用程序生成 Ant build.xml 文件。该实用工具会分析源目录并创建企业应用程序以及各个模块的生成和部署目标。它还会创建目标来清除生成并生成新的部署描述符。

weblogic.BuildXMLGen 的语法如下:

java weblogic.BuildXMLGen [options] <source directory>

其中选项包括:

  • -help - 打印标准用法消息
  • -version - 打印版本信息
  • -projectName <项目名> - Ant 项目的名称
  • -d <目录> - build.xml 的创建目录。默认值为当前目录。
  • -file <build.xml> - 已生成的生成文件名
  • -librarydir <directories> - 在逗号分隔的目录列表中创建共享 J2EE 库的生成目标。请参阅创 建共享 J2EE 库和可选包
  • -username <用户名> - 部署命令的用户名
  • -password <密码> - 用户密码

在运行 weblogic.BuildXMLGen 后,应编辑生成的 build.xml 文件,以指定开发环境的属性。以下清单显示了需要编辑的属性列表。

清单 3-1 build.xml 可编辑属性

<!-- BUILD PROPERTIES ADJUST THESE FOR YOUR ENVIRONMENT -->
  <property name="tmp.dir" value="/tmp" />
  <property name="dist.dir" value="${tmp.dir}/dist"/>
  <property name="app.name" value="helloWorldEar" />
  <property name="ear" value="${dist.dir}/${app.name}.ear"/>
  <property name="ear.exploded" value="${dist.dir}/${app.name}_exploded"/>
  <property name="verbose" value="true" />
  <property name="user" value="USERNAME" />
  <property name="password" value="PASSWORD" />
  <property name="servername" value="myserver" />
  <property name="adminurl" value="iiop://localhost:7001" />

需特别指出,应确保编辑 tmp.dir 属性以使其指向要使用的生成目录。默认情况下,build.xml 文件会将项目生成到在应用程序之后命名的子目录 tmp.dir 中(以上清单中为 /tmp/helloWorldEar )。

以下清单显示在 build.xml 文件中创建的默认主目标。可以在命令提示符处查看这些目标,方法是在 EAR 源目录中输入 ant -projecthelp 命令。

清单 3-2 默认 build.xml 目标

appc                 Runs weblogic.appc on your application
build                Compiles helloWorldEar application and runs appc
clean                Deletes the build and distribution directories
compile              Only compiles helloWorldEar application, no appc
compile.appStartup   Compiles just the appStartup module of the application
compile.appUtils     Compiles just the appUtils module of the application
compile.build.orig   Compiles just the build.orig module of the application
compile.helloEJB     Compiles just the helloEJB module of the application
compile.helloWebApp  Compiles just the helloWebApp module of the application
compile.javadoc      Compiles just the javadoc module of the application
deploy                 Deploys (and redeploys) the entire helloWorldEar application
descriptors          Generates application and module descriptors
ear                  Package a standard J2EE EAR for distribution
ear.exploded         Package a standard exploded J2EE EAR
redeploy.appStartup  Redeploys just the appStartup module of the application
redeploy.appUtils    Redeploys just the appUtils module of the application
redeploy.build.orig  Redeploys just the build.orig module of the application
redeploy.helloEJB    Redeploys just the helloEJB module of the application
redeploy.helloWebApp Redeploys just the helloWebApp module of application
redeploy.javadoc     Redeploys just the javadoc module of the application
undeploy               Undeploys the entire helloWorldEar application

使用拆分开发目录开发多 EAR 项目

前面描述的拆分开发目录示例和过程涉及的是包含单个企业应用程序的项目。对于需要同时生成多个企业应用程序的项目,所需的约定和过程略有不同,如以下部分 所述。

注意: 以下部分引用 MedRec 示例应用程序,它包含三个单独的企业应用程序以及共享实用工具类、第三方 JAR 文件和专用客户端应用程序。MedRec 源目录和生成目录安装在 WL_HOME /samples/server/medrec 下,其中 WL_HOME 是 WebLogic Server 安装目录。

组织由多个 EAR 共享的库和类

对于单个 EAR 项目,拆分开发目录约定建议将第三方 JAR 文件保留在 EAR 源目录的 APP-INF/lib 目录中。但是,多 EAR 项目需要在 每个 EAR 源目录的 APP-INF/lib 目录中都维护同一第三方 JAR 文件的副本。这样便引入了源 JAR 文件的多个副本,从而增加了部分 JAR 文件使用不同版本的可能性,同时也需要在源控制系统中提供额外的空间。

要解决这些问题,请考虑编辑生成脚本,以便为需要库的每个 EAR 都将第三方 JAR 文件复制到其 生 成目录的 APP-INF/lib 目录中。这样只用在源控制系统中维护 JAR 文件的单个副本和版本,但可以让项目中的每个 EAR 都能使用该 JAR 文件。

随 WebLogic Server 安装的 MedRec 示例应用程序便使用此策略,如下图所示。

图 3-9 MedRec 中的共享 JAR 文件

MedRec 中的共享 JAR 文件

 

MedRec 对项目中由多个 EAR 所共享的实用工具类采用了类似的方式。MedRec 不是将实用工具类的源文件包含在需要它们的每个 EAR 的作用域内,而是使实用工具类源文件独立于所有 EAR。在编译实用工具类后,生成脚本会将它们归档并将 JAR 复制到使用这些类的每个 EAR 的 APP-INF/LIB 子目录(位于生成目录下)中,如图 3-9 所示。

链接多个 build.xml 文件

在使用拆分开发目录开发多个 EAR 时,每个 EAR 项目通常都使用其自己的 build.xml 文件(可能由多次运行 weblogic.BuildXMLGen 生成)。类似 MedRec 的应用程序还使用主 build.xml 文件来调用应用程序套件中每个 EAR 的从属 build.xml 文件。

Ant 提供的核心任务(名为 ant )允许执行主 build.xml 文件中的其他项目生成文件。下行内容摘自 MedRec 主生成文件,它显示了该任务的用法:

<ant inheritAll="false" dir="${root}/startupEar" antfile="build.xml"/>

以上任务指示 Ant 执行 /startupEar 子目录中名为 build.xml 的文件。inheritAll 参数指示 Ant 仅将主生成文件中的用户属性传递到 /startupEar 中的 build.xml 文件。

MedRec 使用类似于上述任务的多个任务来生成 startupEarmedrecEarphysicianEar 应用程序以及常用的实用工具类和客户端应用程序。


开发 WebLogic Server 应用程序的最佳实践

BEA 建议在应用程序开发过程中遵循以下“最佳实践”。

  • 将应用程序打包为企业应用程序的一部分。请参阅使 用 wlpackage 打包应用程序
  • 使用拆分开发目录结构。请参阅在 拆分开发目录中组织 J2EE 组件
  • 为了便于分发,使用归档格式进行打包和部署。请参阅使 用 wlpackage 打包应用程序
  • 在其他大多数情况下,以展开格式部署更为便捷。请参阅归 档文件和展开的归档目录
  • 切勿在为生成应用程序提供服务的 WebLogic Server 实例上部署未测试的代码。而应改为在进行编辑和编译的同一台计算机上设置开发 WebLogic Server 实例,或在网络的其他位置指定 WebLogic Server 开发位置。
  • 即使不在开发计算机上运行开发 WebLogic Server 实例,也必须能够访问 WebLogic Server 分发,以便可以编译程序。要使用 WebLogic 或 J2EE API 编译任何代码,Java 编译器需要访问分发目录中的 weblogic.jar 文件和其他 JAR 文件。在开发计算机上安装 WebLogic Server 以使 WebLogic 分发文件在本地可用。

猜你喜欢

转载自jaychang.iteye.com/blog/804502
今日推荐