企业应用程序由一个或多个 Web 应用程序模块、EJB 模块和资源适配器构成。其中也可能包括客户端应用程序。企业应用程序是由 application.xml 文件定义的,该文件是企业应用程序的标准 J2EE 部署描述符。如果应用程序包括 WebLogic Server 特定扩展,则该应用程序将由 weblogic-application.xml 文件进一步定义。包括客户端模块的企业应用程序还将具有 client-application.xml 部署描述符和 WebLogic 运行时客户端应用程序部署描述符。
- 对于开发目的,BEA 建议采用 WebLogic 拆分开发目录结构。拆分开发目录具有两个将源文件和输出文件分离开来的并行目录,而不是有一个单一的 EAR 归档文件或展开的 EAR 目录结构。这种目录结构已针对单个 WebLogic Server 实例上的开发进行了优化。
- 对于开发目的,BEA 还建议将独立 Web 应用程序和 Enterprise JavaBean (EJB) 作为企业应用程序的一部分进行打包,以便利用拆分开发目录结构。
- 对于生产目的,BEA 建议采用展开的(未归档的)目录格式。通过这种格式,不必重新部署应用程序就能更新文件。要更新归档文件,必须取消文件的归档,更新文件,然后重新将其归档和部署。
- 可使用 jar 实用工具将应用程序打包为带有
.ear
扩展名的 JAR 归档文件。归档文件易于分发,占用的空间也较小。EAR 文件含有应用程序的全部 JAR、WAR 和 RAR 模块归档文件,以及用于描述捆绑模块的 XML 描述符。
BEA说了,独立 Web 应用程序也要作为企业应用程序的一部分进行打包,以便利用扩分开发目录结构。
- 首先创建一个WEB项目,项目名称testWebApp
- 在META-INF目录下创建企业应用程序的标准 J2EE 部署描述符 application.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd"> <application> <display-name>testWebApp</display-name> <module> <web> <web-uri>testWebApp.war</web-uri> <context-root>/</context-root> </web> </module> </application>
- 创建BEA Weblogic 特有weblogic.xml 部署描述符
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"> <weblogic-web-app> <context-root>/</context-root> </weblogic-web-app>
- 接下来最重要的就是编写ANT脚本。
<?xml version="1.0"?> <project name="testWebApp" default="dist" basedir="."> <!--主要的系统环境属性--> <property environment="env"/> <!--取window,unix...的环境变量--> <property name="java.home" value="${env.JAVA_HOME}"/> <property name="ant.home" value="${env.ANT_HOME}"/> <property name="project.home" value="." /> <property name="project.name" value="${ant.project.name}" /> <property name="src.home" value="${project.home}/src" /> <property name="lib.home" value="${project.home}/WebRoot/WEB-INF/lib" /> <property name="classes.home" value="${project.home}/classes" /> <property name="dist.home" value="${project.home}/dist" /> <property name="web.home" value="${project.home}/WebRoot" /> <property name="build.home" value="${project.home}/build" /> <property name="build.classes" value="${build.home}/WEB-INF/classes" /> <property name="build.lib" value="${build.home}/WEB-INF/lib" /> <path id="compile.classpath"> <fileset dir="${lib.home}"> <include name="*.jar" /> </fileset> <pathelement path="${java.home}/lib/tools.jar"/> </path> <target name="init" description="初始化并创建目录"> <echo>初始化并创建目录</echo> <mkdir dir="${build.home}" /> <mkdir dir="${build.home}/WEB-INF" /> <mkdir dir="${build.home}/WEB-INF/classes" /> <mkdir dir="${build.home}/WEB-INF/lib" /> <mkdir dir="${dist.home}" /> <mkdir dir="${dist.home}/${project.name}/META-INF" /> <mkdir dir="${dist.home}/${project.name}/${project.name}.war" /> </target> <target name="clean" description="删除所有目录与文件"> <echo>清理所有目录与文件</echo> <delete dir="${build.home}" /> <delete dir="${dist.home}" /> </target> <target name="compile" depends="init" description="编译JAVA文件"> <echo>编译JAVA文件</echo> <javac srcdir="${src.home}" destdir="${build.classes}" debug="yes" source="1.5"> <classpath refid="compile.classpath" /> <compilerarg value="-Xlint:unchecked" /> </javac> </target> <target name="dist" depends="compile" description="构建展开目录结构-开发模式"> <copy todir="${dist.home}/${project.name}/META-INF"> <fileset dir="${web.home}/META-INF" /> </copy> <echo>复制JSP,XML等文件</echo> <copy todir="${dist.home}/${project.name}/${project.name}.war"> <fileset dir="${web.home}" /> </copy> <echo>删除META-INF</echo> <delete dir="${dist.home}/${project.name}/${project.name}.war/META-INF" /> </target> <target name="ear" depends="clean,dist" description="构建可发布ear包"> <jar destfile="${dist.home}/${project.name}.war" basedir="${dist.home}/${project.name}/${project.name}.war" /> <ear destfile="${dist.home}/${project.name}.ear" appxml="${dist.home}/${project.name}/META-INF/application.xml"> <fileset dir="${dist.home}"> <include name="${project.name}.war" /> </fileset> </ear> <echo>清理临时产生目录</echo> <delete dir="${dist.home}/${project.name}" /> <echo>删除临时生成的WAR包</echo> <delete file="${dist.home}/${project.name}.war" /> </target> </project>
- 分别打展开目录结构与可发布Ear包部署到weblogic 测试成功