转自:http://edocs.weblogicfans.net/wls/docs92/programming/splitcreate.html#wp1102496
创建拆分开发目录环境
以下部分描述创建 WebLogic Server 拆分开发目录(可用于开发 J2EE 应用程序或模块)的步骤:
拆分 开发目录环境概述
WebLogic 拆分开发目录环境由目录布局和一些关联的 Ant 任务组成,这些任务有助于重复生成、更改和部署 J2EE 应用程序。与其他开发框架相比,WebLogic 拆分开发目录具有以下优点:
源目录和生成目录
源目录和生成目录构成了拆分开发目录环境的基础。源目录包含项目的所有可编辑文件 - Java 源文件、可编辑描述符文件、JSP 和静态内容等。在创建应用程序的源目录时,请遵从在 拆分开发目录中组织 J2EE 组件 中描述的目录结构准则。
源目录的顶级目录始终表示企业应用程序(.ear
文件),即使只开发单个 J2EE 模块时也是如此。顶级源目录之下的子目录包含:
在针对有效源目录运行 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
编译 Java 类,此外,它还将批注的.ejb
文件处理成部署描述符,如使 用 wlcompile 编译应用程序 中所述。 -
-
-
使用拆分开发目录结构:主要步骤
以下步骤说明如何使用拆分开发目录结构来生成和部署 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>
-
-
-
-
-
-
-librarydir <directories>
- 在逗号分隔的目录列表中创建共享 J2EE 库的生成目标。请参阅创 建共享 J2EE 库和可选包 。 -
-
在运行 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 应用程序的最佳实践
-
-
-
-
-
-
weblogic.jar
文件和其他 JAR 文件。在开发计算机上安装 WebLogic Server 以使 WebLogic 分发文件在本地可用。