转自: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 模块时也是如此。顶级源目录之下的子目录包含:
| 注意: | 拆分开发目录结构不对开发新资源适配器组件提供支持。 |
application.xml 和
weblogic-application.xml )
.jar 文件,包括第三方库)
在针对有效源目录运行 wlcompile Ant 任务时,将自动生成生成目录内容。wlcompile 任务会识别源目录中的 EJB、Web 应用程序、共享库和类目录,然后按照支持常用类路径要求的顺序生成这些组件。其他 Ant 任务可用于生成 Web Service 或从批注的 EJB 代码生成部署描述符文件。
生成目录仅包含在生成过程中生成的文件。源目录和生成目录中的文件组合在一起便形成了可部署的 J2EE 应用程序。
生成目录和源目录内容可根据需要放置在任何目录中。但是,为便于使用,通常将这些目录置于单个项目目录内名为 source 和 build 的目录中(例如 \myproject\build 和 \myproject\source )。
从 拆分开发目录进行部署
所有 WebLogic Server 部署工具(weblogic.Deployer 、wldeploy 和管理控制台)都支持直接从拆分开发目录进行部署。在将应用程序部署到 WebLogic Server 中时,只需指定生成目录即可。
WebLogic Server 会尝试使用 源目录中的所有可用类和资源来部署应用程序。如果源 目录中没有所需的资源,WebLogic Server 将在应用程序的生成目录中查找该资源。例如,如果部署描述符是在生成过程中生成的,而不是作为可编辑文件与源代码存储在一起,则 WebLogic Server 将从生成目录中获取该生成的文件。
WebLogic Server 通过检查驻留在应用程序生成目录的顶级目录中的 .beabuild.txt 文件来发现源目录的位置。如果源目录位置已经过移动或修改,则应编辑 .beabuild.txt 文件以标识新的源目录名。
从 拆分开发目录进行部署和打包 描述可用于自动从拆分开发环境进行部署的 wldeploy Ant 任务。
图 3-2 显示了典型的部署过程。该过程首先使用 WebLogic Server 工具指定生成目录。如图所示,在生成目录中可发现所有已编译的类和已生成的部署描述符,但缺少其他应用程序资源(例如静态文件和可编辑的部署描述符)。 WebLogic Server 使用隐藏的 .beabuild.txt 文件来定位应用程序的源目录,并从中查找所需的资源。
拆分开发目录 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 应用程序。
-
创建项目的主 EAR 源目录。在使用拆分开发目录环境时,即使不打算开发多个 J2EE 模块,也必须将 Web 应用程序和 EJB 作为企业应用程序的一部分进行开发。请参阅在 拆分开发目录中组织 J2EE 组件 。 -
向 EAR 目录添加一个或多个子目录,以存储 Web 应用程序、EJB 组件或共享实用工具类的源文件。请参阅在 拆分开发目录中组织 J2EE 组件 和在 拆分开发目录中组织共享类 。 -
将模块的所有可编辑文件(源代码、静态内容、可编辑部署描述符)存储 在 EAR 目录的子目录中。将源目录中的全部内容添加到源控制系统中(如果适用)。 -
通过执行 WLSEnv.cmd (Windows) 或 setWLSEnv.sh (UNIX) 脚本设置 WebLogic Server 环境。这些脚本位于WL_HOME\server\bin\目录中,其中WL_HOME是安装 WebLogic Server 的顶级目录。 -
使用weblogic.BuildXMLGen实用工具生成项目要使用的默认build.xml文件。根据环境的需要编辑默认属性值。请参阅使 用 weblogic.BuildXMLGen 生成基本 build.xml 文件 。 -
使用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、共享实用工具类和第三方库的企业应用程序的源目录内容。以下部分则更为详细地介绍了企业源目录中各个部分的组织方式。
企业应用程序配置
拆分开发目录项目的顶级源目录表示企业应用程序。下图显示了该目录中至少需要的文件和目录。
企业应用程序目录下还包含一个或多个子目录,用于保存 Web 应用程序、EJB、实用工具类和/或第三方 Jar 文件,如以下部分所述。
Web 应用程序
-
helloWebApp\- Web 应用程序模块的顶级目录可以包含 JSP 文件和静态内容,例如应用程序中使用的 HTML 文件和图形。此外,还可以在 Web 应用程序的任何命名子目录中存储静态文件(例如helloWebApp\graphics或helloWebApp\static)。 -
helloWebApp\WEB-INF\- 在WEB-INF子目录中存储 Web 应用程序的可编辑部署描述符文件(web.xml和weblogic.xml)。 -
helloWebApp\WEB-INF\src- 在WEB-INF\src下的包子目录中存储 Servlet 的 Java 源文件。
在生成 Web 应用程序时,appc Ant 任务和 jspc 编译器会将 JSP 编译到生成目录中 helloWebApp\WEB-INF\classes\jsp_servlet 下的包子目录中。在生成过程中不复制可编辑的部署描述符。
EJ B
-
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 源目录包含的内容应符合以下要求之一:
换句话说,对于同一个 EJB 组件,请勿同时提供已批注的 .ejb 源文件和可编辑的描述符文件。
在拆分开发目录中组织共享类
WebLogic 拆分开发目录还有助于存储企业应用程序模块所需的共享实用工具类和库。以下部分描述共享实用工具类和第三方 JAR 文件的目录布局和类加载行为。
共享实用工具类
企业应用程序经常使用应用程序模块之间共享的 Java 实用工具类。与第三方 JAR 不同的是,Java 实用工具类的源文件是应用程序的一部分,必须进行编译。Java 实用工具类通常是应用程序模块(例如 EJB 或 Web 应用程序)使用的库。
应将 Java 实用工具类的源文件置于顶级企业程序目录的命名子目录中。在该命名子目录之下,应使用标准包子目录约定。
在生成过程中,wlcompile Ant 任务会调用 javac 编译器并将 Java 类编译到生成目录下的 APP-INF/classes/ 目录中。这样可确保已部署应用程序中的其他模块也可以使用这些类。
第三方库
可以将企业应用程序扩展为使用第三方 .jar 文件,方法是将这些文件置于 APP-INF\lib\ 目录中,如下所示:
通常不编译第三方 JAR,但可以使用应用程序代码的源控制系统对它们进行版本控制。例如,XML 解析器、日志记录实现和 Web 应用程序框架 JAR 文件通常用于应用程序中,并与可编辑的源代码一起得到维护。
在生成过程中,第三方 JAR 文件不会复制到生成目录中,而是保留在用于部署的源目录中。
共享类的类加载
APP-INF/classes 和 APP-INF/lib 下存储的类和库可用于企业应用程序中的所有模块。应用程序类加载器始终会先后在 APP-INF/classes 和 APP-INF/lib 中查找,以此来尝试解析类请求。
使用 weblogic.BuildXMLGen 生成基本 build.xml 文件
在设置源目录结构后,应使用 weblogic.BuildXMLGen 实用工具创建基本 build.xml 文件。weblogic.BuildXMLGen 是一个便利的实用工具,它可以为拆分开发目录结构中的企业应用程序生成 Ant build.xml 文件。该实用工具会分析源目录并创建企业应用程序以及各个模块的生成和部署目标。它还会创建目标来清除生成并生成新的部署描述符。
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 文件,以指定开发环境的属性。以下清单显示了需要编辑的属性列表。
<!-- 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 命令。
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 示例应用程序便使用此策略,如下图所示。
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 使用类似于上述任务的多个任务来生成 startupEar 、medrecEar 和 physicianEar 应用程序以及常用的实用工具类和客户端应用程序。
开发 WebLogic Server 应用程序的最佳实践
-
将应用程序打包为企业应用程序的一部分。请参阅使 用 wlpackage 打包应用程序 。 -
使用拆分开发目录结构。请参阅在 拆分开发目录中组织 J2EE 组件 。 -
为了便于分发,使用归档格式进行打包和部署。请参阅使 用 wlpackage 打包应用程序 。 -
在其他大多数情况下,以展开格式部署更为便捷。请参阅归 档文件和展开的归档目录 。 -
切勿在为生成应用程序提供服务的 WebLogic Server 实例上部署未测试的代码。而应改为在进行编辑和编译的同一台计算机上设置开发 WebLogic Server 实例,或在网络的其他位置指定 WebLogic Server 开发位置。 -
即使不在开发计算机上运行开发 WebLogic Server 实例,也必须能够访问 WebLogic Server 分发,以便可以编译程序。要使用 WebLogic 或 J2EE API 编译任何代码,Java 编译器需要访问分发目录中的weblogic.jar文件和其他 JAR 文件。在开发计算机上安装 WebLogic Server 以使 WebLogic 分发文件在本地可用。
218

被折叠的 条评论
为什么被折叠?



