Sun Java System Application Server Enterprise Edition 8.2 管理指南

第 2 章 部署应用程序

本章说明如何在 Application Server 上部署(安装)J2EE 应用程序。本章包含以下几节:

部署生命周期

安装 Application Server 并启动域之后,您可以部署(安装)J2EE 应用程序和模块。在部署过程中和更改应用程序时,应用程序或模块可能会经过以下阶段:

  1. 初始部署

    部署应用程序或模块之前,请启动域。

    将应用程序或模块部署(安装)到特定的独立服务器实例或群集。由于应用程序和模块封装在归档文件中,因此在部署期间应指定归档文件名。默认情况下,部署到默认服务器实例 server

    如果部署到服务器实例或群集,应用程序或模块将存在于域的中心系统信息库中,并由部署为目标的任何群集或服务器实例所引用。

    您还可以使用 asadmin deploy 命令(而非管理控制台)将其部署到域。如果将应用程序或模块只部署到域,则应用程序或模块将存在于域的中心系统信息库中,但要在您添加引用之后才会有服务器实例或群集引用该应用程序或模块。

    部署是动态的:部署应用程序或模块后,无需重新启动服务器实例即可使用应用程序或模块。如果重新启动了服务器实例,所有已部署的应用程序和模块仍将处于部署状态并且可用。

  2. 启用或禁用

    默认情况下,将启用已部署的应用程序或模块,这表示可以运行它并且可以通过客户机对其进行访问(如果应用程序或模块已部署到可访问的服务器实例或群集)。要禁止访问,请禁用应用程序或模块。在部署之后,已禁用的应用程序或模块并未从域中被卸载,而且可以很容易地将其启用。

  3. 添加或删除已部署应用程序或模块的目标

    部署后,应用程序或模块将存在于中心系统信息库中,并可以被多个服务器实例和/或群集引用。最初,作为目标部署到的服务器实例或群集将引用应用程序或模块。

    在部署应用程序或模块后,要更改引用应用程序或模块的服务器实例和群集,请使用管理控制台更改应用程序或模块的目标,或使用 asadmin 工具更改应用程序引用。由于应用程序本身存储在中心系统信息库中,因此添加或删除目标将添加或删除不同目标上同一版本的应用程序。但是,可以在一个目标上启用而在另一个目标上禁用部署到多个目标的应用程序,因此即使应用程序被一个目标引用,也只有在该目标上启用它时用户才能对其进行使用。

  4. 重新部署

    要替换已部署的应用程序或模块,请将其重新部署。重新部署将自动取消部署先前已部署的应用程序或模块,并将其替换为新的应用程序或模块。

    当通过管理控制台重新部署时,重新部署的应用程序或模块将部署到域中,并且所有引用该应用程序或模块的独立或群集服务器实例将自动接收新的版本(如果已启用动态重新配置)。如果使用 asadmin deploy 命令来重新部署,请将 domain 指定为目标。

    对于生产环境,请使用滚动升级(升级应用程序而不中断服务)。

  5. 取消部署

    要卸载应用程序或模块,请取消部署应用程序或模块。

自动部署

自动部署功能使您能够通过将预封装的应用程序或模块复制到 domain-dir/autodeploy 目录来部署该应用程序或模块。

例如,将名为 hello.war 的文件复制到 domain-dir/autodeploy 目录。要取消部署应用程序,请从 autodeploy 目录中删除 hello.war 文件。

也可以使用管理控制台或 asadmin 工具来取消部署应用程序。在这种情况下,归档文件将保留。


注 –

自动部署仅适用于默认服务器实例。


自动部署功能适用于开发环境。它与会话持久性(一种生产环境功能)不兼容。如果启用了自动部署,则不要启用会话持久性。

部署未封装的应用程序

此功能适用于高级开发者。

使用目录部署仅部署到默认服务器实例 (server)。您不能使用它来部署到群集或独立服务器实例。

包含未封装的应用程序或模块的目录有时称为展开的目录。目录的内容必须与相应的 J2EE 归档文件的内容匹配。例如,如果部署某一目录中的 Web 应用程序,则该目录的内容必须与相应的 WAR 文件的内容相同。有关必需的目录内容的信息,请参见相应的规范。

您可以直接在展开的目录中更改部署描述符文件。

如果您的环境被配置为使用动态重新装入,则还可以从目录中动态重新装入已部署的应用程序。有关更多信息,请参见配置高级设置

使用部署规划

此功能适用于高级开发者。

部署规划是指仅包含特定于 Application Server 的部署描述符的 JAR 文件。有关这些部署描述符(例如 sun-application.xml)的说明,请参见 Application Server Developer's Guide。部署规划是 JSR 88: J2EE Application Deployment 实现的一部分。使用部署规划可以部署不包含特定于 Application Server 的部署描述符的应用程序或模块。

要使用部署规划进行部署,请指定 asadmin deploy 命令的 --deploymentplan 选项。例如,以下命令将根据 mydeployplan.jar 文件中指定的规划来部署 myrosterapp.ear 文件中的企业应用程序。


$ asadmin deploy --user admin ---deploymentplan mydeployplan.jar myrosterapp.ear

在企业应用程序 (EAR) 的部署规划文件中,sun-application.xml 文件位于根目录下。根据以下语法来存储每个模块的部署描述符:module-name.sun-dd-name,其中 sun-dd-name 取决于模块类型。如果模块包括 CMP 映射文件,则该文件命名为 module-name.sun-cmp-mappings.xml.dbschema 文件存储在根级别目录下,并用井号 (#) 替换每个正斜杠符号 (/)。下面列出的内容显示了企业应用程序 (EAR) 的部署规划文件的结构。

$ jar -tvf mydeployplan.jar
420 Thu Mar 13 15:37:48 PST 2003 sun-application.xml
370 Thu Mar 13 15:37:48 PST 2003 RosterClient.war.sun-web.xml
418 Thu Mar 13 15:37:48 PST 2003 roster-ac.jar.sun-application-client.xml
1281 Thu Mar 13 15:37:48 PST 2003 roster-ejb.jar.sun-ejb-jar.xml
2317 Thu Mar 13 15:37:48 PST 2003 team-ejb.jar.sun-ejb-jar.xml
3432 Thu Mar 13 15:37:48 PST 2003 team-ejb.jar.sun-cmp-mappings.xml
84805 Thu Mar 13 15:37:48 PST 2003 team-ejb.jar.RosterSchema.dbschema

在 Web 应用程序或模块文件的部署规划中,特定于 Application Server 的部署描述符位于根级别目录下。如果独立 EJB 模块包括 CMP Bean,则部署规划包括位于根级别目录的 sun-cmp-mappings.xml.dbschema 文件。在下面列出的内容中,部署规划描述了 CMP Bean。

$ jar r -tvf myotherplan.jar
3603 Thu Mar 13 15:24:20 PST 2003 sun-ejb-jar.xml
3432 Thu Mar 13 15:24:20 PST 2003 sun-cmp-mappings.xml
84805 Thu Mar 13 15:24:20 PST 2003 RosterSchema.dbschema

使用 deploytool 实用程序

为软件开发者设计的 deploytool 实用程序可以封装和部署 J2EE 应用程序和模块。有关如何使用 deploytool 的说明,请参见《The J2EE 1.4 Tutorial》。

J2EE 归档文件的类型

软件供应商将应用程序或模块封装到了归档文件中。要部署应用程序或模块,请指定归档文件名。归档文件的内容和结构是按照 J2EE 平台的规范定义的。J2EE 归档文件的类型包括:

软件供应商可以将应用程序汇编为一个 EAR 文件或多个独立的 WAR 文件、EJB JAR 文件和应用程序客户机端 JAR 文件。在管理工具中,用于所有类型文件的部署页面和命令都是类似的。

命名约定

在给定域中,已部署的应用程序和模块的名称必须是唯一的。

在一个应用程序中,不同类型的模块可以具有相同的名称。部署应用程序时,将使用 _jar_war_rar 后缀来命名保存各个模块的目录。相同类型的模块在一个应用程序内必须具有唯一的名称。此外,数据库架构文件名在一个应用程序内必须是唯一的。

建议将类似 Java 包的命名模式用于模块文件名、EAR 文件名、在 ejb-jar.xml 文件的 <module-name> 部分找到的模块名以及在 ejb-jar.xml 文件的 <ejb-name> 部分找到的 EJB 名称。使用这种类似软件包的命名模式可以确保不会发生名称冲突。这种命名方式的好处不仅适用于 Application Server,也适用于其他 J2EE 应用服务器。

EJB 组件的 JNDI 查找名也必须是唯一的。建立一致的命名约定可能会有帮助。例如,将应用程序名和模块名附加到 EJB 名称中是一种确保名称唯一的方式。在这种情况下,mycompany.pkging.pkgingEJB.MyEJB 将是模块 pkgingEJB.jar(该模块封装在应用程序 pkging.ear 中)中 EJB 的 JNDI 名称。

请确保软件包和文件名称中不包含空格或操作系统视为非法的字符。