3. 已解决和已知的问题


3.1. 已解决的问题

补丁

BZ#1110117 - 在关闭过程中查询 Patching MBean 导致 IllegalStateException

试图查询 JBoss EAP 实例的补丁状态以前可能导致 IllegalStateException 抛出。其根本原因是 InstallationManagerService 已被关闭而不可用。通过首先检查 InstallationManagerService 是否可用,本版本解决了这个问题。

EJB

BZ#1172856 - 服务器端 EJB 处理程序没有压缩响应
在以前的 JBoss EAP 6 版本里使用 EJB 压缩时,客户会发送一个压缩请求,但服务器发送的是未压缩的响应,即使是配置成应该发送压缩响应。
在本版本里,服务器将用压缩的响应进行回复。
BZ#1118432 - 如果 remote-naming InitialContext 应被关闭,将抛出 java.util.concurrent.RejectedExecutionException。
如果使用远程命名来查找 EJB,系统会创建一个 ejb-client 上下文。如果完成后远程命名上下文对象被关闭,客户将记录下面的错误日志,这是因为 ejb-client 已被关闭却试图再次关闭。通过在关闭前检查 ejb-client 上下文,我们解决了这个问题。
ERROR [org.jboss.remoting.handler-errors] Close handler threw an exception: java.util.concurrent.RejectedExecutionException
BZ#1156620 - 由于 EJB 客户没有取消关联,卸载 & 太多频道导致内存泄露。
这个 JBoss EAP 6 版本修复了一个应用程序导致的内存泄露问题,这个应用程序使用 jboss-ejb-client.xml 来配置远程的 EJB 客户连接。
这个修复也解决了另外一个关于带作用域的上下文的问题,过多的频道出现(因此,频道要等到给定主机的所有频道被关闭时才被关闭)。现在在调用 Context.close() 时关闭了这个频道,即使其他频道仍然对于相同的主机开放。
BZ#1088463 - 如果将大型参数传入 EJB 方法,客户将显示 EJBCLIENT000032 异常 - the OutOfMemoryError is swallowed

在以前的 JBoss EAP 6 版本里,当大型值传入 EJB 调用的参数时,频道会崩溃并在服务器上显示 out of memory 错误。在 ejb-client 上会显示指示错误发生在某些参数的解组过程中并带有可能的 OOM 信息。本版本已修复这个问题。当大型值传入 EJB 调用的参数时,OOM 异常显示在服务器上,且客户端会显示一个提示。

CDI/Weld

BZ#1159570 - CDI 注入的主题无法工作
在以前的 JBoss EAP 6 版本里,注入 JMS 主题 到 CDI Bean 会失败并显示下列错误:
javax.jms.InvalidDestinationException: Not a HornetQ Destination:HornetQTopic[EventTopic]

   @javax.inject.Inject 
   private javax.jms.Topic topic
本版本里注入可以正常进行了。
BZ#1166133 - Bean 代理类将原始的可变参数方法表示为无参方法

在以前的 EAP 版本里,Bean 代理将可变参数方法错误地表示为带有队列参数的无参方法。这导致依赖反射(Reflection)的框架出现问题。

我们通过在代理方法的字节码中添加缺失的可变参数标记解决了这个问题。现在,可变参数方法在 Bean 代理里可以正确表示了。
BZ#1146853 - 使用具有相同类和软件包的静态嵌套类时代理名称发生冲突

在以前的 EAP 6 版本里,如果被不同类封装的两个具有相同名称的静态嵌套类被用作 Bean,Weld 会用相同的类名生成代理,而在使用这些 Bean 时会抛出 ClassCastException

通过修改代理类名的生成过程来包含封装类的名称,我们解决了这个问题。现在两个静态类可以具有相同的简单类名,即使被同一个软件包里的两个不同类封装。
BZ#1054876 - 当超类不具有无参构造器时创建代理失败

以前的 JBoss EAP 版本包含的 Weld 实现执行了不必要的严格检查,它要求所有超类都必须具有公共的无参构造器。

这个版本已经解决了这个问题,现在只检查 bean 自身而不是所有超类的可代理性。
BZ#1149644 - CDI 拦截器无法注入 EJB 会话上下文

以前的 JBoss EAP 6 里的 Weld 集成代码存在一个疏忽,它不能将 EJB 会话上下文注入到 CDI 拦截器里。

通过为所有 EJB 上下文的注入点提供正确的 EJBContext JNDI 位置,本版本解决了这个问题。
BZ#1138192 - Package-private 成员无法用于静态模块里的 CDI bean

以前的 JBoss EAP 6 里的 Weld 集成代码有一个类加载优化,当声明了 package-private 无参构造器的静态模块里的任何正常作用域的 Bean 注入到部署里的 bean 时,它会导致 IllegalAccessException 抛出。

通过限制优化并对源自静态模块的类代理使用静态模块的 ClassLoader,本版本解决了这个问题。

静态模块里带有 package-private 构造器的 Bean 不再抛出 IllegalAccessException 了。
BZ#1086555 - Weld - 通用 Bean 的 Specialization 抛出不合适的异常

在以前的 JBoss EAP 6 版本里,设置通用 bean 的 specialization 会抛出 DefinitionException

本版本解决了这个问题,对普通类设置 specialization 现在可以正常进行了。

域管理

BZ#1111575 - subnet-match 无法解析 'value' 属性

以前版本的 JBoss EAP 6 的一个程序错误会阻止 subnet-match 解析 value 属性。

这个版本已经解决了这个问题,value 属性可以正常使用了。
BZ#1159709 - 部署扫描时的 IO 错误触发了卸载

在以前的 JBoss EAP 6 版本里,FileSystemDeploymentService.scanDirectory() 方法将 File.listFiles() 返回的 null 值作为空表而不是错误来对待。

因此,部署扫描时发生的 IO 错误可能触发应用程序的卸载。

这个版本已经解决了这个问题,如果到达文件限额,已部署的应用程序不会再被卸载了。
BZ#1133328 - 主机控制器上没有执行对转出 LDAP 连接的 runtime 更新

JBoss EAP 6 的域管理操作处理程序可以指定 runtime 更新是否应该根据模型更新的结果来执行。在以前的版本里,如果在服务器进程里运行,操作处理程序只会请求转出 LDAP 连接定义的 runtime 更新。

因此,对主机控制器进程里转出 LDAP 连接的修改不会导致对该进程的立即 runtime 更新。

在这个版本里,受影响的操作请求的 runtime 更新应用在所有的进程类型里,且对转出 LDAP 连接的修改立即反映在应用服务器进程和非应用服务器进程里。
BZ#1148565 - 管理 HTTP 服务器过早地关闭了空闲的连接

JBoss EAP 的管理 HTTP 服务器包含一个超时处理程序,它的目的是在 5 分钟后终止空闲连接。

在以前的版本里,超时处理程序在 30 秒后终止空闲连接。副作用是任何活动的 SSL 会话也会被终止。在随后的调用里,当客户的 Web 浏览器重新连接时,SSL 会话需要重新创建。

本版本将空闲连接的超时时间设置成了 5 分钟。

Web 浏览器现在可以正常关闭活动的连接,让任何底层的 SSL 会话保持不变并允许 Web 浏览器下次连接时恢复之前的会话。
BZ#1106393 - 在对 HC 的连接请求期间受管服务器意外地关闭

在以前的 JBoss EAP 6 版本里,在受管服务器对主机控制器的连接失败后,它只会进行一次的重新连接尝试。

在重新连接失败时,这可能导致系统意外地关闭。

在这个版本里,到主机控制器的连接会无限次地重试。服务器实例不再由于丢失到主机控制器的连接而关闭了。
BZ#1105677 - 不存在 LDAP 组导致安全区里验证失败

在以前的 JBoss EAP 6 版本里,包含对不存在的组的引用的用户在执行 LDAP 的 principal-to-group 搜索以加载用户组信息时出现验证失败。用户的验证将被中止。

在 JBoss EAP 6.4 里,我们在 principal-to-group 配置里定义了一个为 "true" 的 skip-missing-groups 属性,允许忽略组的缺失,从而修复了这个问题。
BZ#1073866 - 在 6.3.0.DR2 里添加 server-identity=ssl 到 SecurityRealm 里时抛出 NPE

在以前的 JBoss EAP 6 版本里,对于添加的服务列表,runtime 更新返回 NullPointerException,由此使得服务的回滚变得非常困难。

在 JBoss EAP 6.4 里,这个错误已被修复,服务引用列表将作为 runtime 更新提供。
BZ#1151434 - 在删除连接后 outbound-connections 元素没有根据 XSD 进行检验

在管理模式里,当定义新的转出 LDAP 连接时,资源将被实例化以保持子 LDAP 连接。

在以前的 JBoss EAP 6 版本里,当最后一个子资源被删除时,这个资源不会被删除。

这是因为 XML 编组遇到定义的模型里的转出 LDAP 连接时,它会将这些内容写入 <outbound-connections> 元素。因为这个模型里并没有连接,这个元素会保持为空,而按照 schema 则是无效的。

请注意:解析器允许这种情况,它不会阻止随后的服务器启动。

在这个版本里,一旦最后一个子资源被删除,资源也会被删除。解析器如果看到没有定义的转出连接,不会再写入空的 <outbound-connections> 元素。
BZ#908236 - 为没有安全区的 HTTP 管理接口定义安全套接字将导致 NullPointerException

以前的 JBoss EAP 6 版本不会执行模型检验来确保 HTTP 管理接口启用 SSL,也不会引用安全区来获取其 SSLContext。

没有这种检验,SecurityRealm 将为 null,从而导致 NullPointerException

在这个版本里,在更新应用到管理模型时将进行额外的检查以确保和 HTTP 管理接口相关联的安全区启用了 SSL。

如果用户试图定义一个带有 SSL 但没有关联安全区的 HTTP 管理接口,错误信息将被报告而不时抛出 NullPointerException
BZ#1129400 - 无法用 HTTP 管理接口创建资源适配器

在以前的 JBoss EAP 版本里,添加资源适配器的操作里的逻辑要求目标地址以 DMR ModelType.PROPERTY 元素列表的形式出现。

这意味着,使用 JSON 的基于 HTTP 的管理客户无法可靠地创建使用期望格式(遵照 JSON 语法的 $PROPERTY 元素可能有问题)的操作。

在这个 JBoss EAP 6 版本里,我们更新了资源适配器的 add 操作以使用标准的地址解析代码,它更宽容格式的区别。因此,用 HTTP 接口和 JSON 添加资源适配器的操作现在可以成功完成了。
BZ#1133961 - XML 解析会强制设置 username-to-dn 上的 'force' 属性,即使它已有默认值。

在 JBoss EAP 6 里,在为安全区的 LDAP 授权定义的 username-to-dn 元素里,schema 会描述一个可选属性 force

以前的版本里实现了一个解析器来确保强制设置这个属性。

这导致如果这个可选属性被忽略,本来按照 schema 是有效的配置被解析器拒绝。

我们在这个版本里更新了解析器,现在忽略了 force 属性的配置也可以被解析器正确地解析。
BZ#1052821 - 用 HTTPS 访问 Web 控制台时进行了不必要的 DNS 查找

如果客户连接至服务器并初始化 SSL 会话,它会试图解析客户主机名称。如果客户名称是一个地址,这会涉试图发现名称的 DNS 查找。在执行 DNS 查找时会影响远程客户连接的性能,此外,如果 DNS 服务器不可用,这还会导致长时间的延迟。

JBoss EAP 6.4 已经修复了这个问题,当客户试图连接并建立 SSL 会话时不会再在服务器上进行 DNS 查找了。

事务管理者

BZ#1162882 - JBTM-2188 - PrivilidgedAction 块缺失了写入文件库的一些代码
在以前的 JBoss EAP 6 里,如果启用了安全管理者,Narayana 事务管理者将不被允许在 FileSystemStore 类管理的对象库文件里读或写。
这是因为,当使用安全管理者时,它会检验代码是否具有访问文件系统的权限。这个过程会检查整个方法调用链,这意味着有可能有些类没有访问文件系统的权限。
本版本进行的修复将文件系统作为特权实体来访问(AccessController.doPrivileged()),这减小了安全管理者承认为访问文件系统的特权实体类的栈。
BZ#1133346 - XA 恢复扫描会阻止 JBoss 启动

JBoss EAP 6 通过使用其他子系统提供的 "RecoveryHelpers" 的有疑问的事务分支的视图资源来进行事务恢复。当部署注册其中一个 Helper 时会使用锁。而恢复资源时会使用相同的锁。

如果资源完成恢复请求太慢,子系统部署(等待锁)也会延迟。

本版本消除了对锁的竞争,子系统可以如期部署了。
BZ#1113225 - CMR: 在崩溃后 TX 日志没有显示参与者

在以前的 JBoss EAP 6 版本里,读取事务日志的工具没有开放 CMR 记录。

这个版本已经解决了这个问题。
BZ#1077156 - 服务器绑定到 ::1 时无法在 IPv6 上启动 XST 事务

在以前的 JBoss EAP 6 版本里,服务器绑定到地址 ::1 时无法在 IPv6 上启动 XST 事务。这是因为地址的一部分必须包裹在方括号里:如 [::1]

通过在传入 XTS core 前将 URL 分隔为不相连的部分并插入方括号,本版本解决了这个问题。

请注意,如果您在 CLI 命令里使用了 -b 选项,请不要将 URL 的地址部分包裹在方括号里,因为这不符合规格且会阻止 Web Services 启动。
BZ#1032641 - 当服务器是用定义的 XA 数据源重载时,定期的恢复操作会出现 IllegalStateException。

在一些事务恢复操作过程中,以前的 JBoss EAP 6 会出现 IllegalStateException

事务恢复系统通过查询有疑问的事务分支的资源进行操作。它使用 JCA 注册 "RecoveryHelper" 来实现这一点。

当资源从系统里删除时,RecoveryHelper 将取消注册。在以前的版本里,代码里会有一个竞争条件,如果删除发生在“恢复扫描”期间,那么 Helper 不会被删除。

这导致事务恢复有可能继续使用资源,即使这个资源已经从服务器删除(产生 IllegalStateExceptions)。

在本版本里,如果当前的恢复扫描使用某个资源,它将等待它完成,然后删除 Helper。
BZ#1124861 - 用 CMR 进行恢复时出现问题,虽然恢复正常但会依赖于 orphan 检测。

在以前的 JBoss EAP 6 版本里,如果服务器在 XA 事务期间崩溃,XA 资源不会总是立即进行回滚。

通过升级 org.jboss.jbossts,本版本解决了这个问题。事务现在可以立即回滚,日志也如预期一样干净。
BZ#900289 - 域管理 API 没有开放事务对象库里的 JTS orphan

JBoss EAP 6 里包含的事务子系统维护着一个待定事务日志 。这个日志对控制台用户开放。

在某些情况下,资源会拥有一个有疑问事务的日志,它没有相应的顶级事务日志(但在磁盘上有一个 participant 日志)。这样的日志被称为“Orphan”且在以前的版本里默认是不开放的。

因此,如果配置事务子系统使用 JTS,那么这些 Orphan 记录将不会自动删除,导致可用存储空间溢出。

在本版本里,控制台用户可以通过设置事务子系统属性 expose-all-logstrue 来覆盖默认设置。然后控制台用户可以选择手动删除这些日志,防止存储空间溢出。

JMX

BZ#1113242 - RemotingConnector 和 VersionedConectionFactory 需要可配置的连接、频道以及不同版本的连接超时。

以前的 JBoss EAP 6 版本包含几个硬编码的 JMX 连接超时。在本版本里可以通过系统属性或在创建 JMXConnectorFactory: JMXConnectorFactory.connect(serviceURL, environment); 时传入属性来配置这些间隔。

这些设置的优先级顺序如下:
  1. 默认值是 30 秒。
  2. Env map 属性覆盖默认值。
  3. 系统属性覆盖传入 env map 的值。

专有属性顺序:

专门的超时属性:
  1. Channel timeout: org.jboss.remoting-jmx.timeout.channel
  2. Connection timeout: org.jboss.remoting-jmx.timeout.connection
  3. Versioned Connection timeout: org.jboss.remoting-jmx.timeout.versioned.connection

如果设置了 org.jboss.remoting-jmx.timeout 属性但没有设置专有属性,普通值而不是默认值将被使用。
BZ#1185118 - RootResourceIterator 里出现随机的 NPE
在以前的 JBoss EAP 版本里,将管理资源作为 JMX MBean 开放的 facade 里的逻辑对子资源进行了不必要的重复读取。如果资源是动态的或可能被非管理动作删除(例如,应用程序添加或删除的临时 JMS 队列资源),那第二次读取就可能返回空的子资源。
因此,远程客户调用远程的 JMX 服务器方法如 getMBeanCount() 可能间歇性地导致随机的 NullPointerExceptions 及类似下面内容的日志消息:
[0m[33m18:38:11,612 WARN [org.jboss.remotingjmx.protocol.v2.ServerCommon] (pool-2-thread-12) Unexpected internal error: java.lang.NullPointerException
				  at org.jboss.as.jmx.model.RootResourceIterator.doIterate(RootResourceIterator.java:49)
在本版本里,我们删除了子资源的重复读取,使用第一次读取的值(永不会是 'null')。这确保了 NullPointerExceptions 不再发生。

Remoting

BZ#1126489 - 对要求 readObject 权限的对象编组失败

如果启用了 Java 安全管理者,当 java.util.Calendar 对象作为参数传入或者作为 EJB 方法的响应时,即使 Java 安全策略提供了必要的权限,都会抛出 java.security.AccessControlException。本版本已解决这个问题,异常不会再抛出而编组和 EJB 调用都会成功。
BZ#1161430 - 当克隆的对象具有 writeObject 时,JBoss Marshalling NullPointerException 会发生。

当克隆的对象具有 writeObject 时,JBoss Marshalling NullPointerException 会发生。本版本已解决了这个问题。
BZ#1153281 - 接收 JMS 消息时登记了冗余的日志

每当JMS 消息发往服务器时都会看到 INFO 日志事件。本版本已解决这个问题。

Web 控制台

BZ#1107869 - Web 控制台错误输出并完全终止 jbossas 进程
当在 Web 管理控制台的 ‘Transactions’ 部分启用 JTS 时,也有必要在 JacORB 子系统里设置属性 `transactions` 为`on`。
在以前的 JBoss EAP 6 版本里,管理控制台不会通知用户这个依赖关系。
本版本在控制台添加了一个校验检查,从而纠正了这个问题。
BZ#1026823 - 提供可靠的方法来清除 "Run as" 对话框设置的 "ROLE" 头部信息

在以前的 JBoss EAP 6 版本里,当 Superuser 代替其他用户(通过 Run As... 链接)运行时,它们的角色在动作结束后没有重置。

这个版本已经解决了这个问题,用户不再需要关闭浏览器窗口并重新访问 Web 控制台来使角色重置。
BZ#1017655 - Web services 配置检验出错

在以前的 JBoss EAP 6 版本里,Web 控制台不会拒绝使用 > Web > 配置集的 Web Services 里的 WSDL HostWSDL PortWSDL Secure Port 的无效值。

这个版本已经解决了这个问题。管理模型的检验规则会被承认,错误的值不会再被保存了。
BZ#1029851 - 管理控制台 - 即使在取消部署文件的上传后,其内容仍会被添加到 data 目录。

以前的 JBoss EAP 6 版本里的一个问题,它导致即使用户取消的文件的上传,这个文件仍会通过管理部署屏幕上传成功。本版本已解决了这个问题。

这个问题的出现是因为旧版本允许用户在文件复制已发生后且部署条目添加到 domain.xml 之前取消文件的上传。

在这个版本里,我们重新设计了控制台流程,删除了操作期间的取消选项,从而避免了不完整的操作以及保存文件和 domain.xml<deployment> 条目间不一致的状态。

HornetQ

BZ#1165456 - HornetQ: Disallow SSLv3 [defense-in-depth]

在这个 JBoss EAP 6 版本里,由于最近发现的 POODLE 漏洞,我们禁用了 SSLv3。关于 POODLE 的更多信息请参考 Oracle 的安全主题:http://www.oracle.com/technetwork/topics/security/poodlecve-2014-3566-2339408.html

服务器

BZ#1110635 - 如果在覆盖路径以 "/" 开头,部署覆盖功能无法正常实现。

在以前的 JBoss EAP 6 版本里,添加前缀为 '/' 的部署覆盖无法进行。

在 JBoss EAP 6.4 里,这个问题已被修复。不管是不是以 '/' 开头,部署覆盖都可以完成。
deployment-overlay add --name=example-overlay --content=/lib/example.jar=eap6-overlay-example.jar --deployments=example.ear

Web Services

BZ#1157482 - 在并行调用时 EJB3 Web Service 返回无效的用户

如果通过并行调用进行加载,使用用户名令牌进行验证的 EJB3 Web Service 会有问题。本版本已解决这个问题。
BZ#1115214 - CXF-5679, CXF-5724 - WS-S 在升级后失败并抛出异常 org.apache.ws.security.WSSecurityException: The signature or decryption was invalid

在以前的 JBoss EAP 6 版本里,Apache CXF 2.7.10 里引入的回退会导致错误:
org.apache.ws.security.WSSecurityException: The signature or decryption was invalid

这个版本已经解决了这个问题,现在可以正确执行 WS-Security SOAP 消息的签名验证。
BZ#1121223 - [CXF-5892] 确保 EncryptedKey 元素引用它前面的 BinarySecurityToken

在以前的 JBoss EAP 6 版本里,当 WSS 时间戳没有包含在 SOAP 消息里时,CXF 将 EncryptedKey 元素引用的 BinarySecurityToken 放在 EncryptedKey 元素之后。

这可能导致期望 EncryptedKey 引用的 BinarySecurityToken 在EncryptedKey 元素之上的接收者执行失败,因为当他们在处理 EncryptedKey 元素时试图查找 BinarySecurityToken 但没有处理它。

通过再 SOAP 消息里移动 BinarySecurityToken,我们解决了这个问题。现在在解析 SOAP 消息时 EncryptedKey 元素总是引用已找到的 BinarySecurityTokens
BZ#1155490 - JBoss WS CXF 客户的 HandlerChainSortInterceptor 出现内存泄露

如果 JAX-WS 客户用某个 JAX-WS 处理程序实现,它会无限次地调用服务端口方法,这会导致内存泄露。本版本已经解决了这个问题。

EE

BZ#1029260 - 无法在 jboss-deployment-structure.xml 文件里使用 ear-subdeployments-isolated 属性设置

如果您在 jboss-deployment-structure.xml 里配置 ear-subdeployments-isolated 属性并放入 <EAR>/META-INF 目录,隔离标记将被 sub-system 配置所覆盖。

在 JBoss EAP 6.4 里,这个问题已被修复。处理顺序已被更新。

JPA

BZ#1131711 - org.jboss.as.jpa.hibernate4.management.QueryName.displayable() 上的 HttpManagementService-threads 消耗了太高的 CPU 资源

在以前的 JBoss EAP 6 里,由于较高的 CPU 使用率,org.jboss.as.jpa.hibernate4.management.QueryName.displayable() 上的 HttpManagementService-threads 拖慢了性能。这是由于对 String.replace() 的多次调用引起的。目前的版本已经修复了这个问题。
BZ#1114726 - 当其他子部署引用了实体类时,JPA 实体类的增强无法用于子部署。

在以前的 JBoss EAP 6 版本里,预期在部署时由持久化供应商重写的用户应用程序里的实体类没有被重写。因此,当子部署被并行部署且存在对超出包含持久性单元的部署的其他子部署里实体类的引用时,实体类定义在持久化供应商重写前被加载。这会影响到性能。本版本已解决了这个问题。

JMS

BZ#1070106 - 普通的 JMS 适配器在域模式里无法正确部署

在以前的 JBoss EAP 版本里,在资源适配器的 add 操作里没有正确地检查上下文信息。因此,普通的 JMS 适配器在域模式里无法正确部署。本版本修复了这个问题,现在普通的 JMS 适配器在域模式里可以正确部署了。

JCA,JMX

BZ#1150821 - 如果启用了检验,JMX Datasource 池和 JDBC 统计信息会消失。

在以前的 JBoss EAP 6 版本里,如果启用检验,JMX 数据源池和 JDBC 统计信息可能会消失。这是由于保留了对部分资源模型的引用,而如果这个模型被改动,这些引用会无效。本版本里解决了这个问题,不再在操作过程种保留对部分资源模型的引用。

结果:DataSource 统计信息没有显示。

日志

BZ#1096053 - SyslogHandler 没有正确处理多字节的字符

在以前的 JBoss EAP 6 版本里,使用 org.jboss.logmanager.handlers.SyslogHandler 来登记多字节字符可能导致日志里的错误输出。例如:
Mar 8 17:29:09 UNKNOWN_HOSTNAME java[9896]: SyslogHandler: ????????????

这个版本已经解决了这个问题, 现在字符可以正常输出到日志里了。
BZ#1031448 - logging-profile 可用于 servlet,但不能用于 JSP

在以前的 JBoss EAP 6 版本里,logging-profile 可用于 servlet,但无法用于 JSP。JSP 里的所有日志消息都会进入系统日志上下文。

这是因为被检查的类加载器是 org.apache.jasper.servlet.JasperLoader,其父类加载器在日志上下文里进行了注册。

通过添加选项到日志管理者以递归地检查类加载器的父节点的 LogContext,从而解决了这个问题。
BZ#1071695 - 当 exception stack frame 类查找失败时出现无限递归

JBoss LogManager 用 %E 格式器配置时会输出 JAR 类的来源。如果加载类时出现问题,JBoss Modules 会输出一个警告。在某些情况下,exception 格式器会触发日志管理者加载类和模块输出警告间的无限递归。

JBoss EAP 6.4 已经修复了这个问题,这种情况不会再触发无限递归了。

类加载

BZ#1155823 - MODULES-192 触发软件包证书的 SecurityErrors

在以前的 JBoss EAP 6 版本里,在读取类流前 JarFileResourceLoader 试图获取证书,这会导致证书没有加载。

在多线程并行加载签名类时导致 SecurityError 出现。

在本版本里,JarFileResourceLoader 在读取类流后才获取证书,这样 SecurityError 不会再发生了。
BZ#1172577 - 包含额外的 sun.jdk 依赖关系
在以前的 JBoss EAP 6 版本里,JDK 里的一些类没有通过 sun.jdk 向应用程序开放,而在使用 JDK javax.sql.rowset.RowSetProviderjava.lang.invoke.MethodHandleProxies 并依赖于 sun.jdk 模块时应该这样做。
在这个 JBoss EAP 6 版本里,应用程序将在依赖于 sun.jdk 模块的这些软件包里查找类:
  • com.sun.rowset
  • com.sun.rowset.providers
  • sun.invoke

域管理/安全性

BZ#1150024 - HeaderParser 无法处理 DigestAuthenticator 里的分隔符

以前的 JBoss EAP 6 版本里有一个程序错误,在进行 Digest 验证时没有正确处理头部信息里包含的值里的转义分隔符。

此外,add-user 工具没有正确转义包含反斜杠('\')的用户名。

因此,有效的验证请求会被拒绝。

在本版本里,Digest 验证里重构了对头部信息的解析,add-user 现在可以正确地转义用户名的反斜杠,从而让验证可以正常进行。
BZ#1153854 - 管理接口:SSL 配置不允许禁用协议

在以前的 JBoss EAP 6 版本里,我们发现有可能指定创建 SSLContext 时请求的协议,而当配置安全区以提供 SSLContext 时不可能指定协议或底层 SSLEngine 支持的加密套件。

这意味着不可能选择一组协议和加密套件以用于 SSL 连接。

在这个版本里,用户可以在安全区定义里指定一系列启用的协议和加密套件。这将匹配被支持的协议和配置底层 SSLEngine 的加密套件。

此外,如果没有指定配置,启用的协议默认将是 TLSv1、TLSv1.1 和 TLSv1.2。SSLv3 和更早的版本默认不再启用,而且可能进一步配置协议和加密套件。

群集

BZ#993041 - org.jboss.as.web.session.ClusteredSession.access 里的 RuntimeException

在以前的 JBoss EAP 6 里,某些情况下当分布式 Web 会话被访问时,如果另外一个节点突然离开群集,获取锁可能失败。这种情况发生时会导致这样的异常信息:
RuntimeException: JBAS018060: Exception acquiring ownership of <session-id>

这个问题的根本原因是锁的获取并没有考虑群集节点可能恰好同时离开群集,导致获取锁失败。

这个版本已经解决了这个问题,不会再抛出异常了。

安全性

BZ#1150020 - add-user 工具没有正确将字符转义

JBoss EAP 6 的 add-user 工具将所有值迭代在属性文件里并转义所有的特殊字符。

在以前的版本里,一个字符检查的错误导致第一次出现的 '=' 字符被转义。如果用户名包含了更多的 '=' 字符,它会被错误地转义,导致生成的属性文件不可用。

本版本纠正了特殊字符的处理以处理所有的 '=' 字符以及包含多个 '=' 字符的用户名并正确地写入到属性文件。
BZ#979369 - 通过程序调用 login() 时 HttpSession 的创建具有不同的行为

在以前的 JBoss EAP 6 版本里,当使用下列程序登录时 HttpSession 的创建行为会不一致:
  • 不使用 SSO:调用 login() 方法时不会创建会话 - 也就是随后的请求无法被验证;
  • 使用非群集的 SSO:调用 login() 方法时会创建会话,但第一次调用不会设置验证状态 - 也就是随后的请求无法被验证;用户在第二次调用 login() 方法后被验证,因为会话已经存在了。
  • 使用群集 SSO:当验证 login() 方法和后续的请求时创建会话
本版本的 JBoss EAP 6 已经修复了这个问题,org.apache.catalina.authenticator.AuthenticatorBase.ALWAYS_USE_SESSION 类有一个新的选项,总是创建会话。
BZ#949737 - NegotiationAuthenticator valve 中断了会话复制

以前的 JBoss EAP 版本没有包含和 JBoss EAP 5 一样的定义全局验证机制的选项。为了突破这个限制,可以手动添加 Valve 到受影响的部署的 jboss-web.xml 里,从而启用 SPNEGO 验证。

这样做到后果是对 Valve 的调用很早,领先于负责群集的 Valve。这意味着 JBoss Negotiation Valve 会创建一个新的 HTTP 会话,而群集 Valve 不会接收任何关于会话生命周期的通知。所以,群集 Valve 需要的会话不会进入群集,从而影响了复制。

本版本的 JBoss EAP 6 现在支持定义全局验证机制。这个方法不需要手动添加 Valve 到 Web 应用程序的 jboss-web.xml

SPNEGO 验证 Valve 将在可以在群集 Valve 之后调用,所以群集 Valve 可以接收到关于会话生命周期的通知并可以正确地复制会话。

域管理、对 IPv6 的支持

BZ#1149612 - 用户可以在 IPv4 环境里使用 any-ipv6-address 接口

在以前的 JBoss EAP 6 版本里,检查/拒绝接口的 any-ipv6-address 配置和 java.net.preferIPv4Stack=true 系统属性的逻辑是在安装网络接口服务而不是等到服务启动时完成的。

因此,检查可能运行在不需要接口服务的主机控制器进程上,如果实际使用接口配置的服务器进程没有设置 java.net.preferIPv4Stack=true,就会导致虚假的故障。

在这个版本里,直至接口服务已启动才会进行一致性检查,确保了只有该进程实际上使用了服务才会设置。

现在,没有设置 java.net.preferIPv4Stack=true 的服务器可以在其中一个接口的配置里使用 any-ipv6-address,即使域控制器或自己的主机控制器没有设置 java.net.preferIPv4Stack=true

mod_cluster

BZ#1083563 - 因为部署缺失对 mod_cluster 服务(JDK8)的依赖关系,Mod_cluster 消耗待定的请求会失败。

本版本解决了这个问题,mod_cluster 子系统可以正常消耗待定的请求。
BZ#1044879 - 如果 "Balancer" 名称包含了大写字母,modcluster 不会保留 sticky sessions。

在以前的 JBoss EAP 6 版本里,如果负载平衡器的名称里包含了大写字母,modcluster 模块不会保留 sticky session。

通过检验负载平衡器名称的大小写,本版本解决了这个问题。

RESTEasy

BZ#1090487 - 为了应用实体扩展限制,默认会打开 Resteasy 安全处理。

我们创建了两个新的 RESTEasy 参数在处理 org.w3c.dom.Document 文档时提高安全性。两者都是 context-param 且在应用程序的 web.xml 文件里配置。

Name: resteasy.document.secure.processing.feature Default value: true Description:在org.w3c.dom.Document 文档和 JAXB 对象表示形式里强制使用安全约束。

Name: resteasy.document.secure.disableDTDs Default value: true Description:在 org.w3c.dom.Document 文档和 JAXB 对象表示形式里禁用 DTD。

请注意 EAP 6.4.0 里的 Xerces 2.9.1.redhat-6 不支持 Max 属性限制。
BZ#1088956 - Windows 上的命名空间测试抛出 MalformedByteSequenceException

在以前的 JBoss EAP 6 版本里,当在客户请求的主体里没有指定编码时,RESTeasy 会返回以服务器的编码而不是以原始请求编码为格式的响应。

通过设置 UTF-8 为默认的编码,本版本已经解决了这个问题。
BZ#899666 - RESTEasy: 空的 cfg. param javax.ws.rs.Application 导致异常

WEB-INF/web.xml 文件里的 javax.ws.rs.Application 配置选项为空时,以前版本的 JBoss EAP 6 附带的 RESTEasy 组件抛出 java.lang.StringIndexOutOfBoundsException: String index out of range: 0 错误。

通过升级 RESTeasy 组件,这个版本已经解决了这个问题。

安装程序

BZ#977805 - Solaris 里无法从启动菜单里启动 JBoss 管理控制台

由于 Solaris 上 gvfs-open 的问题,当 JBoss EAP 6 使用安装程序安装后,Solaris 上的 JBoss EAP 6 管理控制台的启动菜单快捷键无法使用。

从 JBoss EAP 6.4 开始,对于用安装程序安装的 JBoss EAP 6,Solaris 上的管理控制台的启动菜单快捷键不会被创建。

管理控制台可以直接通过浏览器打开。如果配置了默认的端口,管理控制台的 URL 是:http://localhost:8080/console(独立模式)、http://localhost:9990/console(域模式)。
BZ#1032892 - 对于 Windows 里以盘符开始的路径无法使用 Tab 填充
在以前的 JBoss EAP 6 版本里,Windows 服务器上的控制台安装程序无法对用驱动器字母开始的目录路径使用 Tab 完成功能。
当输入以盘符开始的路径时,例如 `C:\`,并按 +Tab+ 键,不会显示任何东西。而在这种情况下,本应该显示该目录的内容。
这个版本已经解决了这个问题, 现在 tab-completion 可以按预期那样工作了。

CDI/Weld、事务管理者

BZ#1098127 - 在使用 JTS 的远程 EJB 调用 CDI 事务性 observer 方法时出现 "Failure while notifying an observer of event"

在以前的 JBoss EAP 6 版本里,使用 JTS 事务的远程 EJB 客户触发 CDI 事件会导致对服务器上的事务性 Observer 的调用失败。

我们在 Weld 集成代码里修改了事务同步回调方法的 JNDI 命名空间选择,从而解决了这个问题。

现在分布式事务场景里可以正确调用事务性 Observer 了。

Naming

BZ#1131626 - 当查找远程队列时看到 ERROR: remote lookup Channel end notification received, closing channel Channel ID

在以前的 JBoss EAP 6 里,当在 EJB 里对远程队列执行查找时可能遇到错误,即使操作成功完成。

本版本通过升级 jboss-remote-naming 解决了这个问题。

域管理、测试套件

BZ#1078062 - ManagementClientContentTestCase 有时候会有问题(主和从控制器的 JDK 不一致时)

在以前的 JBoss EAP 6 里,对于域里同进程上的 management-client-content=rollout-plans 资源,用于 management-client-content 存储机制的表返回不同的 'hash' 属性值。

在 JBoss EAP 6.4 里,按照存储 management-client-content 的顺序更新表,这个问题已被修复。对于域里所有的进程,management-client-content=rollout-plans 资源的 'hash' 属性返回相同的值。

JCA

BZ#1107120 - 在 EAP 6.x 里部署 MySQL JDBC 驱动失败

以前版本的 JBoss EAP 6 的一个程序错误在某些情况下会阻止 MySQL JDBC 驱动的部署。

部署会失败并通知用户该部署已存在。尝试删除现有部署也会失败。

这个版本已经解决了这个问题, 现在驱动部署可正常进行了。

Web 控制台 - UX

BZ#1016546 - RBAC: [可用性] 尝试配置 Auditor 角色为 Administrator 时显示不清楚的错误消息

在以前的 JBoss EAP 6 版本里,如果用户试图执行他们并没有权限执行的操作,他们会看到下列错误信息:

You don't have the permissions to access this resource!

这样的信息会让用户感到困惑,因为他们只是执行某个操作,而不是访问某个资源。现在的版本里这个错误信息是:

You don't have the permissions to perform this operation!

安全性、Web

BZ#952518 - Servlet 里 init() 和 destroy() 方法方法未使用 run-as

以前的 JBoss EAP 6 里存在一个问题,run-as 标识符未用于 Servlet.init(),这和 Java Servlet 2.4 规格是矛盾的。

这是因为与 JBoss EAP 5 一样,JBoss EAP 6 里不存在 RunAsListener 引起的。

这个版本已经解决了这个问题,产品会遵循对应的规格。

脚本、命令和安全性

BZ#901193 - add-user 检查没有国际化设置,但提示却有。

JBoss EAP 6 里的 add-user 工具根据当前地区设置提示用户确认要进行的动作。当用户输入和不同的翻译进行比较时,用户输入会转换成小写字母而翻译的值却不会进行转换。

这意味着 add-user 工具在进行比较时无法确定用户已经选择了哪个选项,且会报告错误并通知用户还未选择有效的值。

在这个版本里,进行比较的用户输入和翻译值在比较前都转换成小写字母。通过 add-user 工具里的确认对话框可以正确接受已国际化的响应。

对 IPv6 的支持

BZ#900564 - 日志条目里的 IPv6 地址格式错误

以前的 JBoss EAP 6 版本里登记的 IPv6 地址不会按要求包括在方括号里。在这个版本里,我们纠正了对 IPv6 地址的处理,现在日志里的地址包括在方括号 里。

Apache 服务器 (httpd) 和连接器

BZ#1188769 - 在 Windows 上 snmpd.conf 不会被加载,除非放入 conf 目录里。

我们发现以前的 JBoss EAP 6 版本如果在 Windows 上运行, SNMPConf 配置会被忽略。

在这个版本里,我们在 etc/httpd/conf 里添加了 snmpd.conf.sample 配置,从而解决了这个问题。

PicketLink

BZ#1170792 - SAML11TokenProvider 和 SAML20TokenProvider 没有考虑 CLOCK_SKEW
在以前的 JBoss EAP 6 版本里,在检验令牌时 `SAML11TokenProvider` 和 `SAML20TokenProvider` 没有考虑 `CLOCK_SKEW` 属性。
因此,如果检验主机和 STS 的时钟没有同步,验证会失败。
在这个版本里,`SAML11TokenProvider` 和 `SAML20TokenProvider` 会在检验令牌时考虑 `CLOCK_SKEW`。检验主机和 STS 的时钟在 `CLOCK_SKEW`限制内可以偏离,而验证仍会成功。

CLI

BZ#1139515 - 引号不配对的 CLI 部署命令导致 StringIndexOutOfBoundsException
在 Windows 里运行以前的 JBoss EAP 6 版本时,如果使用 jboss-cli.bat 部署应用程序并试图用 Tab 完成引号(")时会抛出异常。
接受这个动作会导致下列错误:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
在本版本里,不会再抛出异常。

Hibernate

BZ#1132207 - HHH-9389 表映射 @ElementCollection 的外键的列名使用实体类名而不是指定的实体名
在以前的 JBoss EAP 6 版本里,在计算用于联合实体表和表映射 @ElementCollection 属性的外键列的前缀时,@Entity(name="...") 的 name 属性会被忽略。
由此,计算的外键前缀是实体类名而不是在 @Entity 注解里提供的名称。
在这个版本里,@Entity 注解的 name 属性用于计算外键的名称前缀。例如, ``@Entity(name="prod")` public class Product 会导致外键(@ElementCollection 表)的前缀为 'prod' 而不是'Product'。

RPM

BZ#1124516 - RPM 里缺少 snmpd.conf.sample 文件

下列 'mod_snmp' RPM 版本里缺失了 'httpd/conf.d/snmpd/snmpd.conf.sample' 文件:
  • mod_snmp-2.4.1-7.GA.ep6.el5.i386.rpm
  • mod_snmp-2.4.1-7.GA.ep6.el5.x86_64.rpm
  • mod_snmp-2.4.1-8.GA.ep6.el6.i386.rpm
  • mod_snmp-2.4.1-8.GA.ep6.el6.x86_64.rpm
  • mod_snmp-2.4.1-9.GA.ep6.el7.x86_64.rpm

这个版本已经解决了这个问题。
Expand
表 1. 其他已解决的问题
BZ#1187027: 舍弃数据源的 :enable / :disable 操作
BZ#1168836: 在 JBoss EAP 6.4 里向后移植 JBTM-2279
BZ#1152477: @RolesAllowed 注解无法用于 EJB 里的普通类型
BZ#1151526: 对于 HTTP 400,SAAJ SOAPConnection 没有返回 SoapFault
BZ#1148728: remote-outbound-connection 里用户名的属性替换无法工作
BZ#1147715: 只有需要时才使用 JCA XidWrapper
BZ#1139102: node-identifier 的默认值使用了无效的破折号 '-'
BZ#1138595: 无法获得 JSR77 MBean 的实现类名
BZ#1132207: 表映射 @ElementCollection 的外键的列名使用实体类名而不是指定的实体名
BZ#1127999: 由于不区分大小写,JBOSS JSP 类加载出现问题。
BZ#1127329: 无效的布尔值被设置为 'false' 而不是 null
BZ#1127318: JAXB Unmarshaller 设置错误的元素为 nil
BZ#1104691: 未正确处理托管的页面(未考虑 JSP 头部信息,保存为文本)
BZ#1103735: JBossCachedAuthenticationManager 里出现 Classloader 泄露
BZ#1098074: AccountChooserValve 的 AccountIDPMapProvider 参数被忽略
BZ#1085500: JBoss Negotiation 应该回退至表单验证而不是返回 401
BZ#1064217: SAML Assertion 解析 - 空的 AttributeValue 导致异常抛出
BZ#1062104: JAAS 登录模块的 logout() 方法没有用 cache-type="infinispan" 进行调用
BZ#1062101: JAAS 登录模块的 logout() 方法使用了 cache-type 进行调用
BZ#1057835: JBoss EAP6 无法解析 2.0 版本的 ejb-jar.xml
BZ#1054556: 即使用户/密码无效,AuditProvider 也会提及 "[Success]"。
BZ#1024239: connection-properties=hoge:remove, :disable 和数据源的 :remove 行为异常
BZ#1018026: 从已停止的服务器卸载应用程序时,从 domain/servers/serverName/data/content 文件夹删除内容文件失败。
BZ#900984: UserTransaction 上设置的事务超时值会泄露给线程且不会被清除
BZ#1149020: EJB Compression 缺失了服务器端的处理程序
BZ#1090406: 当设置事务子系统的属性 process-id-uuid 为 false 时服务器无法启动
BZ#1080140: 在数据库连接恢复后 JTS 事务日志的类型 PREPARED 没有修改为 HEURISTIC
BZ#1080035: 在 JTS 上运行时 Oracle 数据库连接失败时的恢复不一致
BZ#1001909: 最后一个资源没有在其他资源前提交
BZ#1188643: PicketLink 抛出 java.lang.RuntimeException: PLFED000092: Null Value: Destination is null
BZ#1188642: SAML11TokenProvider 和 SAML20TokenProvider 没有考虑 CLOCK_SKEW
BZ#1187026: 舍弃-ds.xml 部署
BZ#1172419: EAP6 无法使用端口 > 32767
BZ#1171863: 向后移植 WFLY-4140: 在某些情况下,如 ID 不等于 archive_name,resource-adapter 的 activate 方法会失败
BZ#1170359: InitialContext 用更常用的 NamingException 重新包裹专有的 NamingExceptions
BZ#1163646: 设置 "org.jboss.as.jaxrs.enableSpringIntegration" 为 "true" 导致 JaxrsSpringProcessor 抛出 NullPointerException
BZ#1158498: 无法使用 Entity Manager 启用 NamingStrategyDelegator 实现
BZ#1155815: 为零的队列导致 java.lang.ClassCastException
BZ#1154936: 在 org.apache.cxf 里添加可选的 fastinfoset 依赖关系
BZ#1148603: Hibernate AbstractCollectionPersister 的 processQueuedOps 方法调用了一个已舍弃的方法,这对性能有负面影响。
BZ#1147412: 如果使用了最大数量的连接,数据源在删除或禁用时将被重新创建。
BZ#1140278: Logging 应用程序约束不允许 Deployer 在 Web 控制台里修改日志
BZ#1132188: 当启用了数据源失效切换时 connection-url 里最后一个 URL 无法运行预填充
BZ#1131691: AS 日志里的 JBoss Remoting 版本(未知)
BZ#1131612: PickletLink IdP 过滤器会吞没其他过滤器添加到响应里的 cookie
BZ#1131225: 当使用无效的 Kerberos 令牌时回退至 FORM 验证
BZ#1130863: 某些区域设置会导致控制台的按钮消失并抛出错误
BZ#1128278: 有些情况下没有重用 HQL FromElement 会导致额外的联合
BZ#1125004: 使用专门的密钥库密码/ salt / 迭代计数组合时 vault.sh / VaultSession 运行失败
BZ#1124086: 如果指定了不同的别名,Vault 应该抛出异常。
BZ#1117364: 在 mod_cluster 配置里设置 "Socket Timeout" 或 "Stop Context Timeout" 为 0 会产生 "Unknown error"
BZ#1115650: 即使调用 "javax.naming.InitialContext#close()",jboss-remote-naming 线程也不会关闭。
BZ#1192088:为 jboss 用户保留静态的 gid/uid
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部