运行时环境已知问题和限制
使用 Liberty 概要文件运行时环境时,有一些已知问题和限制。
已知问题和限制的列表:
- 一般限制:
- 支持的最低 Java 级别
- 安装目录名称和路径不能包含非 ASCII 字符
- 运行时更改 JDBC 数据源可能导致 JPA 失败
- 依赖于 getRealPath 所返回结果的应用程序必须部署为展开的应用程序(而不是 WAR 文件)
- WebSphere Application Server 完整概要文件 脚本不能与 Liberty 概要文件配合使用
- 文件集限制
- 覆盖 Java SDK 中的类
取消发布共享库时,只有停止服务器才能删除共享库
- java:global 查询限制
- 未在嵌入的 Liberty 服务器中启动应用程序
与 WebSphere MQ 资源适配器和通用 JCA 支持相关的限制
- 不能对“dropins”目录中的应用程序进行版本控制
- 特定于 Liberty 功能部件的限制:
管理中心功能部件限制
- appSecurity-2.0 功能部件限制
- Bean 验证功能部件限制
- 动态高速缓存功能部件限制
- ejbLite-3.1 功能部件限制
eventLogging-1.0 功能部件限制
jpa-2.1 功能部件限制
- jsp-2.2 功能部件限制
- monitor-1.0 功能部件限制
requestTiming-1.0 功能部件限制
- wmqJmsClient-1.1 功能部件限制
wmqJmsClient-2.0 功能部件限制
concurrent-1.0 功能部件限制
jacc-1.5 功能部件限制
- 运行时修改 dataSource、jdbcDriver、connectionManager 和 JDBC 供应商属性可能会导致 JPA 失败
支持的最低 Java 级别
- Java SE 6 运行时环境
- 对于来自 IBM® 的 Java SDK,最低受支持级别为 6.0 (J9 2.6) SR 1。对于来自 Oracle 的 JDK,最低受支持级别为 Java 6 Update 26。
- Java SE 7 运行时环境
- 对于来自 IBM 的 Java SDK,最低受支持级别为 IBM 运行时环境 Java Technology Edition 7.0.4.1。对于 Windows 和 Linux 上来自 Oracle 的 JDK,最低受支持级别为 Java SDK/JRE/JDK 7.0.17。对于 Mac OS X 上来自 Oracle 的 JDK,最低受支持级别为 Java SDK/JRE/JDK 7.0 Update 15。
Java SE 8 运行时环境
- 对于来自 IBM 的 Java SDK,最低受支持级别为 IBM SDK Java Technology Edition V8。对于来自 Oracle 的 JDK,最低受支持级别为 Java 8 update 25。
在分布式平台上,支持 32 位或 64 位 Java。
对于 Windows 和 Linux 系统,您可以使用 Oracle JDK 或 IBM JDK。如果是在 Windows 或 Linux 上开发应用程序,并且计划将这些应用程序部署到正在运行 WebSphere Application Server 完整概要文件的服务器,那么应该使用 IBM JDK。对于 HP 系统和 Mac OS,请使用 Oracle JDK。

![[8.5.5.2 或更高版本]](../ng_v8552.gif)
![[8.5.5.2 或更高版本]](../ng_v8552.gif)
安装目录名称和路径不能包含非 ASCII 字符
最近的 JVM 并不完全支持在 -jar 和 -javaagent 命令中使用非 ASCII 字符。在安装目录名称和路径中只应使用 ASCII 字符。
运行时更改 JDBC 数据源可能导致 JPA 失败
如果未通过属性来指定数据库字典类型,那么在创建第一个实体管理器和建立数据库连接时,OpenJPA 会检测并计算数据库字典类型。此数据库字典类型可用于后续创建的所有实体管理器。如果在应用程序处于运行状态时更改了 JDBC 数据源,那么实体管理器工厂就检测不到此更改,因此对新数据源执行的操作都将继续使用旧字典。如果将数据库更改为其他供应商,那么这可能会导致失败。
将数据库更改为其他供应商之后,请重新启动应用程序。
运行时修改 dataSource、jdbcDriver、connectionManager 和 JDBC 供应商属性可能会导致 JPA 失败
如果在服务器处于运行状态时更新 dataSource、jdbcDriver、connectionManager 或者任何 JDBC 供应商属性列表(例如,properties.db2.jcc 或 properties.oracle)的配置,那么您可能会看到 J2CA8040E 失败。这些失败会说明不能将多个 dataSource 元素与单个 connectionManager 相关联。即使您的配置只将一个 connectionManager 与 dataSource 元素相关联,也会生成这些失败。
这些 JDBC 资源的配置只要发生更新,就应该重新启动服务器。
依赖于 getRealPath 所返回结果的应用程序必须部署为展开的应用程序(而不是 WAR 文件)
Java EE 规范说明如果是从 Web 归档 (WAR) 文件提供内容,那么 getRealPath() 方法会返回 null 值。将 WAR 文件部署到 Liberty 概要文件时,概要文件不会自动将归档文件解压到目录结构。因此,应用程序可能无法启动。如果应用程序依赖于 getRealPath() 所返回的结果,那么必须将应用程序部署为展开的 Web 应用程序(而不是 WAR 文件)。例如,您可以手动解压 WAR 文件并将展开的应用程序复制到 dropins 目录。
WebSphere Application Server 完整概要文件 脚本不能与 Liberty 概要文件配合使用
不能使用 WebSphere Application Server 完整概要文件 的 bin 目录下的任何脚本来管理 Liberty 概要文件。
文件集限制
- 文件集不会递归地浏览基本目录的子目录。例如,不支持下列指令:
<fileset id="testFileset" dir="\temp" includes="**\a.jar"/> <fileset id="testFileset" dir="\temp" includes="a\a.jar"/> <fileset id="testFileset" dir="\temp" includes="*\a.jar"/> <fileset id="testFileset" dir="\temp" includes="a\b\a.jar"/>
覆盖 Java SDK 中的类
- 如果您正在使用 javac 从命令行进行构建,那么使用 javac -endorseddirs 选项以及 ${wlp.install.dir}/dev/specs 目录中的 JAR 文件来编译您的代码。
- 如果您正在使用 Apache Ant 来进行构建,那么使用 javac 任务的
<compilerarg> 子元素以及 ${wlp.install.dir}/dev/specs 目录中的 JAR 文件来编译您的代码。在构建脚本中,将
-endorseddirs 选项和 ${wlp.install.dir}/dev/specs 目录指定为独立 <compilerarg> 元素。例如:
<javac srcdir="src" destdir="classes"/> <compilerarg value="-endorseddirs"/> <compilerarg value="${wlp.install.dir}/dev/specs"/> </javac>
- 如果您正在使用 Apache Maven 来进行构建,那么使用 Maven 编译器插件中的 endorseddirs 元素以及 ${wlp.install.dir}/dev/specs 目录中的 JAR 文件来编译您的代码。例如:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <compilerArguments> <endorseddirs>${wlp.install.dir}/dev/specs</endorseddirs> </compilerArguments> </configuration> </plugin>

取消发布共享库时,只有停止服务器才能删除共享库
从服务器取消发布共享库时,不会立即将库 JAR 文件从服务器释放。因此,操作系统并不知道文件已不再使用,并且不让您删除该文件。下一次停止服务器时,将释放库 JAR 文件,并且您可以将其删除。
java:global 查询限制
应用程序中使用 java:global 查询定义的资源只能用来访问由部署在当前服务器中的应用程序声明的名称。
appSecurity-2.0 功能部件限制
- 对于 EJB 应用程序,run-as-mode SYSTEM_IDENTITY 在 ibm-ejb-jar-ext.xml 文件的扩展设置中不受支持。
- 单独会话 Bean 不支持 getCallerIdentity API。
- 角色名称可供 HttpServletRequest.isUserInRole 和 EJBContext.isCallerInRole API 或者部署描述符中的元素引用,而不先使用 @DeclareRoles 注释或者部署描述符中的 <security-role/> 元素来声明角色名称。但是,必须先声明角色,然后才能在完整概要文件中使用这些角色。
未在嵌入的 Liberty 服务器中启动应用程序
请确保使用指向 libertyInstallDir/bin/tools/ws-javaagent.jar 的 JVM 参数 -javaagent 启动了用于启动嵌入式 Liberty 服务器的 Java 进程。如果未使用 -javaagent JVM 参数,那么服务器运行时会启动,但应用程序无法启动,同时没有明显异常。
![[8.5.5.6 或更高版本]](../ng_v8556.gif)
与 WebSphere MQ 资源适配器和通用 JCA 支持相关的限制
通过使用 wasJmsClient-1.1 或 wasJmsClient-2.0 功能部件,或通过使用通用 JCA 支持,可在 WebSphere Application Server Liberty 概要文件内使用 WebSphere® MQ 资源适配器。
可将 WebSphere MQ 资源适配器 V7.5 与 Liberty 概要文件 V8.5.5 及更高版本配合使用。如果您想要使用基于 JMS 2.0 资源适配器的 WebSphere MQ 资源适配器 V8.0,那么必须确保您正在使用与 JMS 2.0 资源适配器兼容的最新 Liberty 概要文件版本。
- 对于 Liberty 概要文件 V8.5.5.2,必须将 wasJmsClient-1.1 功能部件与 IBM MQ 资源适配器 V7.5.0.5 或更高版本配合使用。
- 对于 Liberty 概要文件 V8.5.5.6,必须将 wasJmsClient-2.0 功能部件与 IBM MQ 资源适配器 V8.0.0.3 或更高版本配合使用。
要知道有关 WebSphere MQ 资源适配器与 Liberty 概要文件之间的版本兼容性的更多信息,请参阅 有关获取 WebSphere MQ 资源适配器的参考。
- 要在 z/OS® 上运行 IBM® WebSphere MQ 资源适配器,必须使用 wasJmsClient-1.1 或 wasJmsClient-2.0 功能部件。
- 跟踪和日志记录未集成到使用通用 JCA 的 Liberty 跟踪系统中。跟踪将写至单独文件,并且必须通过设置系统属性来启用。启用跟踪的过程与为 Java™ 标准环境的 JMS 跟踪工具配置 WebSphere MQ 类的过程相同。请参阅 Java 标准环境跟踪一节。
不能对“dropins”目录中的应用程序进行版本控制
对于“dropins”目录中的应用程序,应用程序监视器使用文件名和文件扩展名来确定应用程序类型并生成应用程序标识和应用程序名称。因此,不能使用文件名或文件扩展名对应用程序指定版本号。建议不要在生产环境中使用“dropins”目录。
管理中心功能部件限制
Bean 验证功能部件限制
- 不支持在 OSGi 应用程序内部进行 Bean 验证。
![[8.5.5.6 或更高版本]](../ng_v8556.gif)
- 不支持在 OSGi 应用程序内部进行 Bean 验证。
- 在 validation.xml 中为 beanValidation-1.0 功能部件提供定制 ConstraintValidatorFactory 实现的应用程序不会针对 Bean 验证 1.1 API 进行编译。
动态高速缓存功能部件限制
- 不支持高速缓存复制。
- 在使用随机逐出和基于大小的逐出技术时,仅支持高性能磁盘高速缓存方式。
- 在 cachespec.xml 文件中不支持 Web Service 客户端和服务器端高速缓存以及 Portlet 高速缓存。
- 不支持对 SingleThreadModel Servlet 进行 Servlet 高速缓存。
- 只包含 Enterprise JavaBeans (EJB) 的 JAR 文件不支持使用属性文件来定义高速缓存配置。
- 只能对 32 位 Java 虚拟机 (JVM) 限制堆高速缓存大小。
ejbLite-3.1 功能部件限制
- 不支持低于 V3.0 的 EJB 模块。此限制也意味着使用 .xmi 文件格式(而不是 .xml 文件格式)的绑定和扩展不受支持。
- 会话 Bean 未绑定到 ejblocal 名称空间,这表示 JNDI 查询和 ejb-ref 绑定名称必须使用 java:global、java:app 或 java:module 名称。忽略 ibm-ejb-jar-bnd.xml 中的 simple-binding-name 和接口 binding-name 元素。
- 有状态 Bean 钝化目录不可配置。文件会钝化到服务器工作区。
![[8.5.5.6 或更高版本]](../ng_v8556.gif)
eventLogging-1.0 功能部件限制
- 从正在运行的服务器移除 eventLogging-1.0 功能部件会导致所部署 Web 应用程序重新启动。
![[8.5.5.6 或更高版本]](../ng_v8556.gif)
jpa-2.1 功能部件限制
对于 jpa-2.1 功能部件,通过 CORBA/RMI-IIOP 进行的 JPA 实体交换要求参与通信的双方必须启用完全相同的 JPA 功能部件级别。
jsp-2.2 功能部件限制
- 不支持将转换的 JSP 文件仅存储在内存中的 useInMemory 配置选项。
monitor-1.0 功能部件限制
- 从 server.xml 文件中移除该功能部件之后,必须重新启动服务器以使 JAX-WS 应用程序正常运行。
![[8.5.5.6 或更高版本]](../ng_v8556.gif)
requestTiming-1.0 功能部件限制
- 从正在运行的服务器移除 requestTiming-1.0 功能部件会导致所部署 Web 应用程序重新启动。
- 使用 DayTrader 应用程序进行度量时,显示已激活的 requestTiming-1.0 功能部件对可能的最大应用程序吞吐量的影响百分比为 8%。虽然对您的应用程序的影响可能高于或低于此比例,但您还是应注意某些性能下降可能是显而易见的。
wmqJmsClient-1.1 功能部件限制
- 在 Windows 环境变量中,必须将 PATH 变量手动设置为指向 WebSphere MQ 安装 bin 目录。当应用程序使用“绑定”连接方式时,必须设置此 PATH 变量。
- wmqJmsClient-1.1 功能部件中不包括 WebSphere MQ Java 类(通称为“基本 Java”)。这包括在其他应用程序服务器的资源适配器中,但是建议不要将其用于 Java Enterprise Edition 环境中的基本 Java API。有关更多信息,请参阅在 J2EE/JEE 环境中使用 WebSphere MQ Java 接口。
- wmqJmsClient-1.1 功能部件不支持 WebSphere MQ 资源适配器的 BINDINGS_THEN_CLIENT 传输类型。
- wmqJmsClient-1.1 功能部件不包括高级消息传递安全性 (AMS) 功能部件。
![[8.5.5.6 或更高版本]](../ng_v8556.gif)
wmqJmsClient-2.0 功能部件限制
- 在 Windows 环境变量中,必须将 PATH 变量手动设置为指向 WebSphere MQ 安装 bin 目录。当应用程序使用“绑定”连接方式时,必须设置此 PATH 变量。
- wmqJmsClient-2.0 功能部件中未包括 WebSphere MQ Java 类(通称为“基本 Java”)。这包括在其他应用程序服务器的资源适配器中,但是建议不要将其用于 Java Enterprise Edition 环境中的基本 Java API。有关更多信息,请参阅在 J2EE/JEE 环境中使用 WebSphere MQ Java 接口。
- wmqJmsClient-2.0 功能部件不支持 WebSphere MQ 资源适配器的 BINDINGS_THEN_CLIENT 传输类型。
concurrent-1.0 功能部件限制
对于 concurrent-1.0 功能部件,以下限制适用:
对于类型为 securityContext 的线程上下文,不会传播未使用 JAAS 登录模块添加的主体集中的任何定制信息。例如,如果提交者的主体集包含 TAI 添加的定制主体,那么所传播主体集不会包含此定制主体。
![[8.5.5.6 或更高版本]](../ng_v8556.gif)
jacc-1.5 功能部件限制
- 应用程序 ear 文件的 ibm-application-bnd.xml 文件或 ibm-application-bnd.xmi 文件中的授权信息(authorizations 属性的 users 和 groups 属性)。
- server.xml 文件的授权信息(application-bnd 元素中的 security-role 属性的 user、group 和 special-subject 属性)。