Enterprise Server v3 与 Enterprise Server v2 之间存在与应用程序相关的差异。本节说明了部分差异。
在 Enterprise Server v3 中,用于部署的 force 选项的默认值为 false。不过 Enterprise Server v2 中该默认值为 true。因此在 Enterprise Server v3 中,必须在重新部署时明确地将选项设置为 true。升级期间不会自动设置该选项。此更改的目的在于避免意外地覆写现有应用程序的内容。而且此更改会同时应用到管理控制台和命令行实用程序。
Enterprise Server v3 中的 asadmin redeploy 命令为新命令,相当于 --force=true。force 选项仅适用于 deploy 命令(命令行界面)和 deploy 屏幕(控制台),而不适用于 redeploy 命令和 redeploy 屏幕。
Enterprise Server v2 包含两个用于应用程序系统信息库的子目录:applications/j2ee-apps 和 applications/j2ee-modules。Enterprise Server v3 中不存在这些子目录(没有 j2ee-apps 或 j2ee-modules 级别)。在 Enterprise Server v2 中,独立模块(例如 foo.war)部署在 applications/j2ee-modules/foo 之内,如今在 Enterprise Server v3 中,此类模块部署在 applications/foo 之内。企业应用程序和独立模块本质上共享同一名称空间,因此无需中间目录层。
在 Enterprise Server v3 中,以前的 web-module、ejb-module 等元素已过时,取而代之的是新的 application 元素。有关 application 元素的更多信息,请参见《Sun GlassFish Enterprise Server v3 Domain File Format Reference》中的“application”。
升级期间会通过 domain.xml 中新的 application 元素将 Enterprise Server v2 应用程序重新部署到新的 applications/ 位置。将使用新目录结构和元素来部署在 Enterprise Server v3 上部署的所有新应用程序。
Java EE 6 引入了比 Java EE 5 更严格的 JAR 可见性规则。因此某些版本更低的应用程序可能会失败。
Java EE 6 规范 引入了严格的规则,规定企业归档 (enterprise archive, EAR) 文件中有哪些 JAR 文件可见。请参见特殊章节 EE.8.3.3。具体而言,只有在应用程序客户端 JAR 文件的清单 Class-Path 显式地引用了 EJB JAR 文件的情况下,应用程序客户端模块才能访问 EJB JAR 文件。
这是针对 Enterprise Server v2 的更改(在此发行版本中,应用程序客户端自动拥有访问 EAR 文件中的所有 EJB JAR 文件,以及位于 EAR 文件顶层的所有 JAR 文件的权限)。为遵守这一更严格的规范语言,Enterprise Server v3 无法自动向应用程序客户端提供对这些 JAR 文件的访问权。
可按照以下方法处理这一由 Java EE 6 引入的更严格的新行为:
如果将应用程序部署到 Enterprise Server v2 域,“升级工具”将保留应用程序在该域中的 Enterprise Server v2 行为。有关升级的更多信息,请参见《Sun GlassFish Enterprise Server v3 Upgrade Guide》。
更改客户端的 Class-Path 清单以使其显式地引用其所依赖的 JAR 文件。Class-Path 不得列出 EAR 文件的库目录中的 JAR 文件。按照规范要求,EAR 文件中的所有模块都可使用该目录中的所有 JAR 文件。该目录默认为 /lib,也可使用 application.xml 描述符中的 library-directory 将其设置为其他目录。
使用可选的 --property compatibility=v2 设置来部署 EAR 文件。这样就可在将应用程序部署到 Enterprise Server v3 时保留其 Enterprise Server v2 行为。
《Sun GlassFish Enterprise Server v3 Upgrade Guide》中的第 1 章 “Application Server Compatibility Issues”中也探讨了对此行为的更改。
在 Sun GlassFish Enterprise Server v3 中运行 deploy --retrieve 和 get-client-stubs 命令时,将不再像在 Enterprise Server v2 中那样仅将一个 JAR 文件下载到本地目录。在 Enterprise Server v3 中,除了仍然会创建 localdir/myAppClient.jar 并可在 appclient 命令中将其作为目标外,还会创建另一个目录 localdir/myAppClient ,进而可包含其他文件。
之前可通过复制单个 Enterprise Server v2 下载 JAR 文件来将应用程序客户端组件从一个位置移动到另一位置,但是此方法在 Enterprise Server v3 中不起作用。现在支持的方法是使用 asadmin get-client-stubs 命令执行此操作。有关该命令的更多信息,请参见 get-client-stubs(1)。
如果仍然选择复制,就必须同时复制 localdir/myAppClient.jar 文件(与在 Enterprise Server v2 中一样)和 localdir/myAppClient 目录的所有内容。