您的位置:寻梦网首页编程乐园Java天地小龙亭之JSP实践之旅

    WebLogic Application打包和部署完全攻略篇

     

    /* 

     blueski 编译
     2000-05-20

    */

     

     

    以下部分将描述如何打包和部署WebLogic Server applications:


    打包概览


    打包Web Application


    打包Enterprise JavaBean


    打包Enterprise Application


    在组件之间分解(Resolving) Class References

    打包概览

    WebLogic Server application以一种以J2EE规范所定义的标准的方式进行打包。 J2EE为组件行为定义了一种通用的便携的方式,run-time的配置可以被推迟,直到组件component确实已经在application server上部署完成为止。

    J2EE包含了实施规范,并可用于Web application、EJB模块、Enterprise application和Client application。J2EE只定义了标准组件或application的打包方式,而不涉及一个application在特定服务器上是如何被配置的。

    对每一个组件类型,规范都定义了所需要的文件和它们在目录结构中的位置。 组件和application可以包含那些被用于EJB和servlets的Java类、Web页面和支持文件、XML格式的deployment descriptor和包含其它组件的JAR文件。

    对于准备在WebLogic Server上部署的Application来说,要包含附加的 WebLogic-specific deployment descriptor,可能的话,还有那些和WebLogic EJB, RMI,或JSP编译器一起生成的container 类。

    JAR文件

    可以将某个目录中的文件利用JAR工具打包成为一个单独的Java ARchive (JAR)文件。Java的classloader能够在处于系统classpath中的JAR文件中找到Java类。在WebLogic Server上,你既可以在一个打开的目录中,也可以在JAR文件中部署J2EE组件。

    JAR文件对组件和application打包和发布来说是很合适的选择。它们很容易复制,同整个目录文件相比,使用了较少的文件句柄,通过压缩,它们更节省磁盘空间。 如果你的Administration服务器的一个域中包含多个 WebLogic Server,那么你只需对JAR文件进行配置即可,因为Administration Console并不复制扩展路径来对各服务器进行管理。

    jar工具在JDK的bin目录下。如果你已经把javac放在可用路径下,那么你也可以直接使用jarjar 命令的语法和UNIX的tar命令很相似。

    jar最常用的语法如下:


    jar cf jar-file files ...
    创建一个JAR文件,名为jar-file ,包含了列出的文件files。如果你在文件列表中包含进了目录,那么该目录下的所有文件和子目录也将被加入到JAR文件中。

     


    jar xf jar-file

    在当前路径下释放JAR文件。

     


    jar tf jar-file

    列出(tell)JAR文件的内容。

    第一个标记定义的是操作:create, extract或list(tell)。“f”标志后面必须跟上JAR文件名。如果没有 f 标志,jar将在(标准设备)stdin stdout 上读或写JAR文件内容,这往往并不是你所希望的操作。更多信息可参考JDK工具中的文档。

    XML配置描述器

    组件和application具有deployment descriptors-XML文档,它们描述了目录或JAR文件的内容。 Deployment descriptor是具有XML标记格式的文本。J2EE规范为J2EE组件和application定义了标准的便携的deployment descriptor。BEA定义了附加的WebLogic-specific deployment descriptor,它们被用于在WebLogic Server环境中部署组件或application。

    Table 3-1 列出了组件和application的类型,以及它们的 J2EE-standard 和 WebLogic-specific deployment descriptors.

     

    表3-1 J2EE和WebLogic Deployment Descriptors

    Component或Application 范围 配置描述器
    Web Application J2EE WEB-INF/web.xml
      WebLogic WEB-INF/weblogic.xml
    Enterprise Bean J2EE META-INF/ejb-jar.xml
      WebLogic META-INF/weblogic-ejb-jar.xml
    META-INF/weblogic-cmp-rdbms-jar.xml
    Enterprise Application J2EE META-INF/application.xml
    Client Application J2EE META-INF/application.xml
    client-application-runtime.xml

     

    当你打包一个组件或application的时候,你要创建一个目录来放deployment descriptors-WEB-INF 或者 META-INF-并且,然后还要在该目录下创建所要求的XML deployment descriptor文件。

    如果你从某个开发者那里收到一个适用于J2EE的JAR文件,那么该文件已经包含了J2EE-defined deployment descriptor。要在WebLogic Server中部署JAR文件,你必须解开JAR文件,并把各文件放到一个目录下,增加所要求的WebLogic-specific deployment descriptor文件和任何产生的container类,然后 再创建一个新的JAR文件,让它包含原来的文件和新增加的文件。

     

    打包Web Application

    阶段性地(stage)打包一个Web application:



      创建一个阶段性的(staging)目录。

      将你的Web有关的所有的HTML、JSP、image等文件复制到该目录,保证此目录结构可用于相对文件的路径。例如,如果一个HTML文件有一个标记 <img src="images/pic.gif">, 那么pic.gif 文件必须放在该HTML文件所在目录下面的images目录中。

      在该目录下创建META-INFWEB-INF/classes子目录,用来存放deployment descriptor文件和编译后的Java类。

      将各servlet类和帮助类复制或编译到WEB-INF/classes子目录。

      将servlets所用到的EJB的 home 和remote interface 类复制到WEB-INF/classes下的子目录中。

      Note: 参见 Classloader概览 以了解WebLogic Server class-loading机制。

      复制JSP tag lib到WEB-INF子目录中。 (Tag lib可能安装在WEB-INF下面的某个子目录中;指向.tld 文件的路径是在.jsp文件代码中写入的。)

    在WEB-INF子目录中创建web.xml和weblogic.xml这2个deployment descriptor文件。

    Note: 参见 Writing Web Application Deployment Descriptors 可以得到创建deployment descriptor的帮助。

    将该目录通过执行jar命令捆绑到一个 .war文件中。例如:

    jar cvf myapp.war -C staging-dir .

     

    结果得到的 .war文件可以加入到一个Enterprise application (.ear文件)中,或者独立使用Administration Console,或者在weblogic.deploy命令行工具中使用。

打包Enterprise JavaBeans

 

你可以阶段性地把一个或多个enterprise bean放在一个目录中并且将它们打包到一个EJB JAR文件中。

阶段性地打包一个enterprise bean:



    创建一个临时的阶段性的目录。

    编译或复制bean的Java类到该阶段性目录中。

    在该目录中创建一个META-INF子目录。

    在META-INF子目录中创建一个ejb-jar.xml deployment descriptor 并且为bean增加实体entity。

    在META-INF子目录中创建一个weblogic-ejb-jar.xml deployment descriptor并且为bean增加实体entity。

    如果 bean是一个entity bean,带有container-managed persistence, 可在带有bean的整体的META-INF目录中创建一个weblogic-rdbms-cmp-jar-bean_name.xml deployment descriptor。在 weblogic-ejb-jar.xml中通过<type-storage>属性将bean映射到该CMP deployment descriptor 。

    Note: 参见 "Programming WebLogic EJB" 可以得到编译enterprise beans和创建EJB deployment descriptor的更多帮助。

    当所有的enterprise bean类和deployment descriptor都已经在阶段性目录中设好,你可以用jar命令创建 EJB JAR文件,例如:

    jar cvf jar-file.jar -C staging-dir .

    此命令创建了一个jar文件,你可以将它部署在WebLogic Server上,或者打包到application JAR 文件中去。

    -C staging-dir 选项指示了要切换到staging-dir目录,因此 JAR文件中记录的路径将是相对与你阶段性放置enterprise bean的路径。

Enterprise bean要求 WebLogic EJB编译器生成的container类和其它类,从而使得bean得以在WebLogic Server上得到部署。WebLogic EJB编译器读取EJB JAR中的deployment descriptor,然后确定如何生成类。你可以在部署Bean之前对JAR文件运行WebLogic EJB编译器,或者你也可以让WebLogic Server在部署的时候为你运行编译器。可参见Programming WebLogic EJB文档来得到有关于WebLogic EJB编译器的更多帮助。

打包Enterprise Application

Enterprise archive包含了EJB和Web module,它们是相关的application的一个部分。EJB和Web module在另一个JAR文件中和一个 .ear文件捆绑在一起。

.ear文件中的META-INF子目录包含了一个application.xml deployment descriptor, 它指明了打包在.ear文件中的modules。你可以在http://java.sun.com/j2ee/dtds/application_1_2.dtd发现用于application.xml文件的 .DTD。对enterprise archive来说不需要任何WebLogic-specific deployment descriptor。

以下是Pet Store实例中的application.xml文件:

<?xml version="1.0"  encoding="UTF-8"?>

<!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD
J2EE Application 1.2//EN'
'http://java.sun.com/j2ee/dtds/application_1_2.dtd'>

<application>
  <display-name>estore</display-name>
  <description>Application description</description>
  <module>
    <web>
      <web-uri>petStore.war</web-uri>
      <context-root>estore</context-root>
    </web>
  </module>
  <module>
    <ejb>petStore_EJB.jar</ejb>
  </module>
  <security-role>
    <description>the gold customer role</description>
    <role-name>gold_customer</role-name>
  </security-role>
  <security-role>
    <description>the customer role</description>
    <role-name>customer</role-name>
  </security-role>
</application>

 

要阶段性地打包一个Enterprise application:



    创建一个阶段性的目录。

    将Web archives (.war文件)和EJB archives (.jar文件)复制到该目录。

    在该目录下创建一个 META-INF 子目录。

    在META-INF子目录中创建application.xml deployment descriptor。

    使用jar命令为application创建Enterprise Archive (.ear文件),例如:

    jar cvf application.ear -C staging-dir .

结果生成的.ear文件可以使用Administration Console或weblogic.deploy命令行功能进行部署。

 

分解Resolving组件之间的类参考(Class References)

也许你的application使用了许多不同的Java类,包括enterprise bean, servlets和JavaServer Pages, startup类, utility类和第三方包。WebLogic Server是在分离的classloader对application进行部署,这是为了维持其独立性并且有利于动态的重新部署或取消部署。 由于这样的原因,你需要用这样的方式对你的application类进行打包:每一个组件都具有它所依赖的各种类的存取途径。在某些情况下,你可能把一整套类包含到不止一个application或组件中去。下面这一段将描述WebLogic Server是如何使用多classloader从而你可以成功地准备(stage)你的application。 

 

 

/*

blueski注:

我花费了周六整整一天来翻译这篇似乎有些冗余的文章,总觉得有些得不偿失,但愿还有一点价值。面对剩下的大量Weblogic文档,也不知道什么时候才能翻译完。当然,这只是自己给自己的任务而已。万一有哪位朋友一时也有点时间,并且说,嗳,我有兴趣合作。。。

*/