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”中也探讨了对此行为的更改。