7. 这个版本中所做的修改

7.1. 程序错误修复

CDI/Weld

1051375 - 如果 EAR 里部署的 WAR 中存在多个 beans.xml 文件,所有的 CDI bean 都会注册两次。

在以前的 EAP 6 版本里,当 EAR 部署包含一个 WAR 子部署以及多个 beans.xml 文件时,如 WEB-INF/beans.xml 和 WEB-INF/classes/META-INF/beans.xml,所有的 Bean 都会注册两次且部署会失败。我们通过修改部署处理器解决了这个问题,这样的部署现在不会再失败了。
1029099 - 当复制 EAP 6.1.0 群集上的 CDI bean 时抛出 NPE

早期版本的 JBoss EAP 的群集实例里创建的 Session ID 包含

新引入的代码所包含了相对路径而不是绝对路径。这意味着 bean 不再会重新创建且不会再出现 NPE 了。
1050963 - 永久性地修复了: org.jboss.weld.exceptions.DeploymentException: WELD-001414 Bean name is ambiguous

具有多个子部署的部署里没有隔离 Bean 名称的模糊性检验,再某些场景里这会导致 DeploymentException。本版本的 JBoss EAP 6 通过升级 Weld 组件解决了这个问题。
1070069 - 过期的会话意外地出现在下一个请求里

在以前的 JBoss EAP 6 版本里,我们发现会话可能会意外地被激活,且及时在会话过期后仍会和请求关联,从而导致 NonExistentConversationException

这是因为在 JSF 应用程序里,在请求的开始 Weld 没有正确检查会话状态。

这个版本包含了升级的会话上下文激活和失效过程以更详尽地检查会话状态。因此,过期的会话不再错误地和请求关联了。

CLI

988283 - CLI GUI - 字符串值的 write attribute 对话框应该用双引号将生成的命令值括起来

试图用 jboss-cli 工具设置某个包含属性的值时只会保存字符 $ 而不是属性,除非整个值用双引号括起。这是因为 CLI 命令行错误地解析了任何 ${X} 表达式为 $,除非用双引号括起来。

本版本里修复了命令行解析器,所以带有属性的值将被正确解析,即使它们没有用双引号括起来。
1007831 - CLI GUI - webservices client-config 和 endpoint-config 的 add 操作失败

在以前的 JBoss EAP 6 版本里,没有任何参数的 add 操作会被视作不要求 CLI GUI 进行任何输入的操作。

这导致用户无需提供所需的参数 name 就可以执行操作,且会失败。

在这个版本里,不带参数的 add 操作将被 GUI 界面逻辑按要求 name 参数的操作来处理。

现在,在允许用户执行在管理模型描述里不要求任何参数的 add 操作之前,会提示用户提供所需的 name 参数。
1019232 - 在数据源节点上使用 tab complete 时 jboss-cli.sh 抛出 NullPointerException

在以前的 JBoss EAP 6 版本里,在某些情况下当用户试图使用 tab complete 功能时,jboss-cli 工具将抛出异常并退出。

这是因为命令解析器里对这种情况没有足够的异常处理,本版本已纠正了这个问题。
1031173 - 当 EAP 安装到目录名带有空格的目录里时,jboss-cli.bat 无法运行。

在 Windows 上,如果 JBoss EAP 6 安装到目录名带有空格或其他特殊字符(如括号)的目录里,jboss-cli 工具将无法成功启动。例如,如果 JBoss EAP 6 安装在 C:\JBoss EAP\jboss-eap-6.2 里,下列错误信息将会显示:
Error: Could not find or load main class EAP\jboss-eap-6.2\bin\jboss-cli-logging.properties

通过修改 jboss-cli 工具在 Windows 上声明和使用文件路径的方式,我们修复了这个问题。现在,对于带有空格或其他特殊字符(如括号)的目录,这个工具无需任何变通办法就可以正常使用了。
1026418 - 接受 SSL 证书时作为参数传入的命令没有被执行

当用作为参数传入的命令启动 JBoss EAP 6 CLI 时,如果服务器提示用户接受服务器证书,它会将此作为错误登记日志。这导致作为参数传入的任何命令都被忽略,因为这些命令只有在没发生错误时才会被执行。

我们将接受证书提示作为普通输出而不是错误处理,从而解决了这个问题。因此,在用户已经接受服务器的证书后,用作为参数的命令可以成功启动 CLI。

CLI,Remoting

1037574 - 运行多个 CLI 操作时遇到的 OOM 可能是内存清理不正确引起的

以前的 JBoss EAP 6 的用户在通过命令行接口执行多个操作时可能遇到 OutOfMemory 错误。

这个问题可以追溯到使用 CLI 时内存清理错误引起的内存溢出。

这个版本已经解决了这个问题。

类加载

1060997 - testConnection 应考虑部署的类加载器

以前的 JBoss EAP 6 版本在测试数据源时抛出异常是由于一个程序错误引起的。当在数据源 "connection-url" 标签里使用 LDAP 协议时,这个异常会被抛出。产品将无法实例化 InitialContextFactory ,因为 "org.jboss.as.connector" 模块不能访问某些 JDK 提供的类(如 com.sun.jndi.ldap.LdapCtxFactory)。这导致数据源 "connection-url" 使用 "ldap://" 协议时连接测试失败。

我们在 org.jboss.as.connector 模块里添加了对 sun.jdk 的依赖关系,从而解决了这个问题。这使得连接器模块可以访问所需的 JDK 类,使用 "test-connection-in-pool" CLI 操作进行的数据源测试可以成功完成了。
1054972 -MBean 的初始化使用了错误的 TCCL

在以前的 JBoss EAP 版本里,我们发现当初始化 SAR 文件里找到的 MBean 时,应用程序的 TCCL(线程上下文类加载器)没有合适地设置。这意味着这个部署里的资源在初始化时对于 MBean 不可用。在这个版本里,TCCL 根据对 MBean 初始化的调用合适地进行了设置,MBean 在初始化时现在可以访问部署资源了。
971076 - "org.jboss.log4j.logmanager" 模块需要对 "javax.mail.api" 模块的依赖关系

在以前的 JBoss EAP 6 版本里,org.jboss.log4j.logmanager 没有在其 module.xml 里指定对 javax.mail.api 的依赖关系。

这个版本里添加了对 logmanager 模块的依赖关系。

群集

990567 - 保存 HTTP 会话到 PostgreSql 时出现 ClassCastException

我们发现了一个影响 HTTP 会话存储到 Postresql 的问题。使用下列 jdbc-store 配置时会抛出 ClassCastException ,就像这里显示的错误信息示例。HTTP 会话的值将被持久化但应用程序重部署会失败且显示相同的错误信息。
<binary-keyed-jdbc-store datasource="java:jboss/datasources/testDS" preload="true" passivation="false" purge="false">
 <binary-keyed-table prefix="b">
  <id-column name="id" type="VARCHAR(255)"/>
  <data-column name="datum" type="BYTEA"/>
  <timestamp-column name="ver" type="BIGINT"/>
 </binary-keyed-table>
</binary-keyed-jdbc-store>
14:24:21,262 ERROR [org.infinispan.interceptors.InvocationContextInterceptor] (http-/127.0.0.1:8080-1) ISPN000136: Execution error: java.lang.ClassCastException: java.lang.Class cannot be cast to org.infinispan.loaders.bucket.Bucket...

通过升级组件,我们解决了这个问题,现在 HTTP 会话数据可以在 Postresql 数据库里成功存储了。
917010 - CacheException: Failure while unregistering mbeans at server shutdown

以前的 JBoss EAP 版本里的 Infinispan 包含了一个程序错误,它在服务器关闭时导致下列异常:
WARN [org.infinispan.jmx.CacheJmxRegistration] (MSC service thread 1-1) ISPN000032: Problems un-registering MBeans: org.infinispan.CacheException: Failure while unregistering mbeans

这个错误不会阻止服务器的关闭,它是因为多个 stop 请求(CacheServiceEmbeddedCacheManagerService 里的请求)被发送到单个缓存实例而引起的。

通过升级 Infinispan 组件,这个问题已得到解决。
963448 - CoreGroupCommunicationService#handle 里的异常处理不正确

在以前的 JBoss EAP 6 版本里,我们发现 CoreGroupCommunicationService#handle 没有正确处理异常,影响了类的调用者。

我们发现这个类隐藏了隐藏并返回 null。这个值可能在调用者里产生意外的行为。

在这个版本里,null 响应将由分布式锁管理者处理,然而以后版本里的CommandDispatcher 将永久性地解决这个问题。
1039585 - 群集会话内存泄露

以前的 JBoss EAP 6 版本里的一个程序错误会导致分布式 Web 会话里的 OutOfMemoryException。如果Web 会话过期且无需释放或销毁带有会话管理者创建的锁对象,那这个异常将会抛出。当 Web 会话继续过期,残余的锁对象将在内存里积累。最终这会导致 OutOfMemoryException。唯一的解决办法是重新部署 Web 应用程序。

这个版本正确地释放了锁对象,从而不会再遇到 OutOfMemory 异常了。
956904 - Infinispan remote-store 需要 remote-servers,但在管理模型里并没有标记为必需的。

在处理 Infinispan 的 remote-store 配置时我们发现了一个问题。remote-store 选项要求设置 remote-server 选项的值,但这并未强制执行,导致 remote store 出现故障。我们通过标记 remote-server 参数为强制选项,阻止无效的 remote-store 配置,从而解决了这个问题。

在这个例子里,管理 CLI 命令没有完成并显示了警告信息。
[standalone@localhost:9990 /] /subsystem=infinispan/cache-container=web/distributed-cache=dist/remote-store=REMOTE_STORE:add(remote-servers=[])     {
  "outcome" => "failed",
  "failure-description" => "JBAS014706: [0] is an invalid size for parameter remote-servers. A minimum length of [1] is required",
  "rolled-back" => true,
  "response-headers" => {"process-state" => "reload-required"}
}

在这个例子里,管理 CLI 命令正常完成。
[standalone@localhost:9990 /] /subsystem=infinispan/cache-container=web/distributed-cache=dist/remote-store=REMOTE_STORE:add(remote-servers=[{"outbound-socket-binding" => "fred"}])
{
  "outcome" => "success",
  "response-headers" => {"process-state" => "reload-required"}
}

域管理

1015303 - LDAP 安全区需要可配置的超时选项

本版本的 JBoss EAP 6 进行了改进,允许对转出 LDAP 连接使用自定义属性。

在以前的版本里,转出 LDAP 连接是用有限属性集创建的,剩余部分使用默认的行为。因此不可能定义自定义属性来控制有些行为,如连接和读超时。

现在这个版本可以为转出 LDAP 连接定义自定义属性,代码类似于:
<ldap name="LocalLdap" url="ldap://localhost:10389" search-dn="uid=wildfly,dc=simple,dc=wildfly,dc=org" search-credential="password1!">
 <properties>
  <property name="one" value="two"/>
  <property name="three" value="four"/>
 </properties>
</ldap>
1074999 - 应用程序从 EAP 控制台的 Manage Deployments 部分消失

在以前的 JBoss EAP 6 版本里,使用控制台时在文件系统上没有更新部署的状态。

因此,使用文件系统扫描器和控制台来管理部署的状态会导致扫描器以为部署已被卸载。

这个版本器用了控制台和文件系统扫描器来共享部署的状态,用户现在也可以使用管理工具来管理部署了。
1035232 - EAP 域模式无法和安全管理者一起正常使用

在以前的 JBoss EAP 6 版本里,如果使用了 Java 安全管理者而没有指定其类名,受管域里的服务器将无法成功启动。

例如,我们通常是在 ‘domain.conf’ 里指定 -Djava.security.manager 或作为命令行参数来使用默认的安全管理者的。

这是因为未赋值的系统属性会导致主机控制器将 true 传递给受管服务器,所以服务器会错误地用 true 的类名尝试使用 Java Security Manager。

我们通过添加对主机控制器属性的额外检查,使系统属性可以正确传递给受管服务器,从而解决了这个问题。因此,通过指定 -Djava.security.manager,使用安全管理者的受管域可以正常运行了。
1047515 - 域模式无法在 IBM JDK 里启动

本版本已解决了频繁阻止在 IBM JDK 环境里成功启动 JBoss EAP 6 的问题。

这个问题可以追溯到由父进程写入 java.lang.Process.getOutputStream() 的二进制数据(也就是 byte[])如何被子进程通过 System.in 接收。高阶位为 1 的字节都会被篡改,从而在控制台日志里产生下列输出:
[Host Controller] 16:44:06,419 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 1) JBAS014612: Operation ("start") failed - address: ([
[Host Controller] ("host" => "master"),
[Host Controller] ("server-config" => "server-one")
[Host Controller] ]): java.lang.IllegalStateException: JBAS010986: Host-Controller is already shutdown.
[Host Controller] at org.jboss.as.host.controller.ServerInventoryImpl.startServer(ServerInventoryImpl.java:175)

JBoss EAP 管理的域进程控制器与服务器的通讯是通过这种机制进行的,意味着这个问题会影响到 EAP 6 的受管域。

在本版本里,所有在 stdin 上和受管进程的通讯都是 Base64 编码,这样就改善了这个问题,Windows 里受管域服务器现在可以用 IBM JDK 正常启动了。
1054776 - ClientConfigurationImpl 不应该将 IP 地址解析为主机名

在以前的 JBoss EAP 6 里,当创建控制器客户的实例并将传入 IP 地址进行连接时,IP 地址会被解析成机器的主机名。

然后,当客户试图建立连接时,它使用主机名而不是 IP 地址。

这不仅会因为调用 DNS 服务器产生不必要的负荷,在某些特殊的部署场景下也会导致客户试图连接相同主机的不同 IP 地址而不是 JBoss EAP 实例绑定的地址,从而导致连接失败。

本版本已经修复了这个问题。控制器客户代码不会将给定的 IP 地址解析成主机名,而只会使用这个 IP 地址(而不是对应的主机名)进行连接。

请注意这次修复不会影响主机名传入到控制器客户的 factory 方法。此时,主机名将被解析成要使用的 IP 地址。
1072915 - 如果启用了 RBAC,从控制器无法重新连接到重启的主控制器。

在以前的 JBoss EAP 版本里, 当重新连接主主机控制器时,配置模型会被添加到错误的位置。

这意味着重新连接到启用了 RBAC 的主主机控制器会失败。

在这个版本里,这个模型被添加到了正确的位置,确保了从主机控制器可以正常进行连接。
1040621 - 在域里不能使用具有相同 runtime-name 的部署

在以前的 JBoss EAP 6 版本里,启动时对服务器组里部署的重复 runtime-name 属性的检查过于激进。如果在整个域而不是单个服务器组里有任何重复的 runtime-name,系统都会错误地抛出异常。

因此,域里包含具有相同 runtime-name 的多个部署会导致引导失败,即使这些部署并没有映射到相同的服务器组里。

例如:
JBAS010932: Caught exception during boot: org.jboss.as.controller.persistence.ConfigurationPersistenceException: JBAS014676: Failed to parse configuration
...
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1348,9]
...
Message: JBAS014664: An element of this type named 'example.war' has already been declared

在这个版本里,我们将 runtime-name 唯一性的检查从 XML 解析器移到了操作执行逻辑里,这个检查逻辑将忽略和相同服务器组以外的重复条目。

域里现在可以存在多个具有相同 runtime-name 值的部署,只要它们没有映射到同一个服务器组。
1076066 - 无法提升从主机控制器为主主机控制器和不通过删除 domain.cached-remote.xml 加载。

以前的 JBoss EAP 6 版本里的一个程序错误阻止了已重新配置为主主机控制器的从主机控制器在重启时加载缓存的域配置。这是因为新提升的主主机控制器从 domain/configuration/domain.xml 文件而不是 domain/configuration/domain.cached-remote.xml 文件里加载配置。

在这个版本里,如果用 --backup 选项启动的从主机控制器被重新配置为主主机控制器,并重载来体现这个变化,它作为备份服务器运行时维护的 domain.cached-remote.xml 文件将被自动检测并使用。
1038465 - 当资源被删除时 remote-destination-outbound-socket-binding 服务并没有停止

在以前的 JBoss EAP 6 版本里,当资源被删除时 remote-destination-outbound-socket-binding 服务并没有停止。

这意味着无法用相同的名称添加 remote-destination-outbound-socket-binding,因为已有服务用这个名称进行了注册, :add 操作会失败。

在这个版本里,当删除 remote-destination-outbound-socket-binding 资源时,对应的服务器将被停止。

由此,现在可以正常删除和添加 remote-destination-outbound-socket-binding 服务了。
1110065 - 以批模式在从控制器上创建服务器并设置系统属性会失败

在以前的 JBoss EAP 版本里, 当 HostController 升级其配置时,它会创建操作以应用这些修改到它管理的所有运行的服务器上。

因为主机控制器也为 non-running 创建操作来添加 "env" 系统属性,这会导致 "No handler for operation composite at address" 错误。

本版本不会再创建操作来修改 non-running 服务器的环境属性,这个错误不会再出现了。
1093866 - 没有正确实施 "admin-only-policy" 从主机控制器配置选项

在以前的 JBoss EAP 6 里,以 admin-only 模式启动的从主机控制器无法连接到主主机控制器来获取 domain-wide 配置。

由此,如果从主机控制器用 --admin-only 启动且其 host.xml 里设置了 admin-only-policy="fetch-from-master",从主机控制器将无法连接到主主机控制器来获取 domain-wide 配置。它会启动失败。

这阻止了 --admin-only 从主机控制器使用 RBAC,除非 domain-wide 配置文件在本地保存为 domain.cached-remote.xml 且从主机控制器使用 --cached-dc 选项启动。

在这个版本里,我们纠正了从连接逻辑,从主机控制器可以连接到主主机控制器并获取 domain-wide 配置,允许它获得 domain-wide RBAC 配置策略。
1024109 - DelegatingServerInventory 里出现 NPE

在主机控制器启动后立即发送到主机控制器的管理请求可能失败并抛出 NullPointerException。这是因为主机控制器能够接收请求和服务器管理系统完全启动之间会有一段时间。这段时间通常小于 1 秒,但期间收到的任何请求都会失败。

这个版本确保主机控制器只有在服务器管理系统完全启动后才接收请求,从而修复了这个问题。因此,不会再因为服务器管理系统没有完全启动而触发 NullPointerException 了。
1085122 - ApplyRemoteMasterDomainModelHandler 应该应用根资源的值

在以前的 JBoss EAP 版本里,我们发现域控制器的根域资源没有应用在从主机控制器上。相反,从主机控制器将使用它们自己的根资源。

这意味着当直接连接到从主机控制器时,根域资源里的版本号码就是从域控制器的版本号码,所以域配置在域里的各个控制器里并不是相同的。

在这个版本里,我们更新了从主机控制器注册过程来应用根域资源,现在整个域里的版本号一致了。
1016995 - 部署覆盖功能无法替换应用程序库

在以前的 JBoss EAP 6 里,部署覆盖(Deployment Overlay)功能无法像文档里描述的那样工作。它没有按预期地覆盖应用程序 JAR 库。现在我们进行了修改,允许部署覆盖功能可以替换应用程序 JAR 库并正常工作。
1077838 - SensitiveVaultExpressionConstraint 类的 isSensitiveValue 方法对 java.lang.String.substring 使用了不正确的索引

在以前的 JBoss EAP 6 里,当 write 属性值里出现多个 {} 时 SensitiveVaultExpressionConstraint 类会使用不正确的字符串索引

因此,由于使用了不正确的索引而导致了 StringIndexOutOfBoundsException

在这个版本里,我们修复了 SensitiveVaultExpressionConstraint 类的 isSensitiveValue 方法,它会使用正确的索引,所以 StringIndexOutOfBoundsException 不会再出现了。
1074560 - 当 LDAP 组里包含斜杠字符时 EAP 管理授权抛出异常

我们发现以前的JBoss EAP 6 版本里有一个程序错误,它阻止了在用于 Windows Active Directory LDAP 服务器上的 LDAP 组时 backslash (/) 字符的正确解析。这个错误会导致 EAP 管理授权抛出 NamingException。本版本包含的更新可以确保这个字符得到正确解析,从而不会再抛出异常了。
1077536 - JMX 监控客户引起的高 CPU 占用率,看起来是由 RBAC 引起的。

我们确定了以前的 JBoss EAP 6 里一个影响 JMX Query 的问题,CPU 负载会比预想的要高得多。其原因是基于角色的控制(RBAC)会检查每个查询的地址,而不管这个地址是否和 JMX Query 相关。为了解决这个问题,我们修改了查询的处理,首先检查这个地址是否和 JMX Query 相关,如果不相关则避免了进一步的处理。这个改动的结果是 JMX 监控的 CPU 负载又恢复到了正常的水平。
1038397 - 启用 Java Security Manager(JSM)时基于角色的访问控制(RBAC)无法工作

当启用 Java Security Manager 来运行 JBoss EAP 6 时,基于角色的访问控制(RBAC)实际上被禁用,因为此时所有验证的用户都会当作超级用户对待。唯一可以使用 RBAC 的办法是不要启用 Java Security Manager。

这个版本让所有对当前 AccessControlContext 的访问都发生在私有动作之外,从而解决了这个问题。现在当启用 Java Security Manager 时,RBAC 仍然有效。
901275 - 系统属性使用库表达式会抛出 java.lang.SecurityException

如果使用了在 value 属性里带有库表达式的系统属性,以前的 JBoss EAP 6 版本将无法引导。

这是因为 XML 配置里的相同属性资源会在安全库资源之前被处理。解析表达式时安全库还不是可用的源。使用 vault 属性的任何资源都会导致下列错误:
java.lang.SecurityException: JBAS013322: Vault is not initialized

在这个版本里,如果无法解析系统属性的值表达式,在引导过程中安装了库(如果配置配置)后会进行第二次尝试,从而解决了这个问题,使用库表达式的系统可以正常引导了。
1092220 - 审计日志没有正确记录引导操作

以前的 JBoss EAP 版本在服务器引导期间的管理操作的审计日志缺乏效率。
  • 引导操作使用了允许并行执行的特殊功能。审计日志功能没有考虑到这一点而导致了无序和混乱的日志。
  • 启用了审计日志的排队执行的操作的日志记录会在添加日志处理程序的操作执行前从队列里被冲刷。这些记录没有出现在日志里。

这些问题的后果包括:
  • 在添加审计日志处理程序前发生的操作的日志没有被记录。
  • Extension add 操作不会被记录。
  • 内部执行细节将被记录,而这是不应该的,这让某些操作看起来被执行了两次。
  • 并行引导操作没有按照来自 XML 解析器的逻辑操作流的顺序组织或反映,相反它们根据子系统区块进行日志记录,而这些区块的顺序是随机的。

在这个版本里,在有机会安装任何日志处理程序及使得要记录的跟踪事件更复杂之前,队列里的日志记录不会被冲刷,从而实现了对引导过程中并行操作的正确跟踪。

所有在引导过程中发生的操作现在都会被记录,且不会包括任何无关的内部执行细节。操作将清楚地分成两组以反映服务器是如何从根本上组织引导的。在引导过程中并行执行的操作将以 XML 解析器提供的原始顺序在日志里出现。
1092213 - 当设置 domain-uuid 头部时 AccessAuditContext domainUUID 没有被设置

以前的 JBoss EAP 版本里的 Infinispan 包含了一个程序错误,当 PrepareStepHandler 创建一个 UUID 并在操作上设置 "operations-headers" => "domain-uuid" 时,DID 没有将该 UUID 传递给 AccessAuditContext。

对于域控制器上的受管域的操作,这意味着审计日志记录里的 domainUUID 字段没有值,然而显示操作的 operation 字段包含一个 domain-uuid 操作的头部信息。

这个版本已经解决了这个问题。
1092206 - OperationContextImpl.readResourceForUpdate 假定所有的资源都代表持久性的配置

在以前的 JBoss EAP 6 版本里,在处理 OperationStepHandlerreadResourceForUpdate 方法时,操作执行逻辑假定所有的管理资源都代表持久性配置,

因此,subsystem=transaction/log-store=log-store 资源的 probe 操作和 subsystem=transaction/log-store=log-store/transactions=* 资源的 delete 操作无法被 Operator 角色里 admin 进行调用。

这个版本已经解决了这个问题。
1092203 - 如果 log-read-only 为 "false",未授权的 write 操作不会登记审计日志。

以前的 JBoss EAP 版本里有一个错误,如果 management audit-logging 资源被设置为 false,它会阻止未授权用户调用的 "write" 操作的日志记录。

这是因为模型控制器将 "acquisition of controller lock" 用作确定操作是否应该作为 "write" 操作记录在日志里的条件。当启用基于角色的访问控制(RBAC)并执行未授权的操作时,错误将在获得控制器锁前发生。

因此,如果 "log-read-only" 被设置为 false 时,未授权的 write 操作没有记录在审计日志里。如果 "log-read-only" 被设置为 true,日志记录将错误地表明这个操作为 "read" 操作。

这个版本已经解决了这个问题。
1049102 当 runtime-name 和部署名称不一样时 CLI 无法显示应用程序的状态。

在以前的 JBoss EAP 6 版本里,用来确认部署状态的管理操作处理程序使用部署名称而不是 runtime-name 来查找部署服务。

因此,如果部署具有和管理名称不一样的 runtime-name,试图读取其“status”属性会遇到 No metrics available

例如:
[standalone@localhost:9999 /] deploy /home/ABC.ear --name=ABC.ear --runtime-name=XYZ.ear

[standalone@localhost:9999 /] /deployment=ABC.ear:read-attribute(name=status)
{ "outcome" => "success", "result" => "no metrics available" }

在这个版本里,在查找部署服务时管理处理程序使用 runtime-name,这确保可以返回正确的状态。上面的例子的响应现在是:
[standalone@localhost:9999 /] /deployment=ABC.ear:read-attribute(name=status)
{ "outcome" => "success", "result" => "OK" }
1034700 - 启用 security manager 时无法使用 whoami 操作

JBoss EAP 6 启用 Java Security Manager 运行时无法使用 :whoami 操作。试图运行这个操作会导致 IllegalArgumentException。这是因为无效的 AccessControlContext 里当前调用者的标识符不正确而引起的。

本版本通过访问私有动作外部的当前 AccessControlContext 解决了这个问题。因此,当 JBoss EAP 6 启用 Java Security Manager 运行时,:whoami 操作现在可以正常使用了。

域管理、脚本和命令

1023444 - 在 Windows 32bit JDK 上域无法用默认的内存设置来启动

以前的 JBoss EAP 6 版本用默认的内存设置运行在 Windows 32-bit JDK 环境里时可能无法启动。

在本版本里,我们降低了默认的内存设置以确保 EAP 在更多的 JVM 上可以成功启动。

我们建议依赖于默认 JVM 设置的用户复查其配置并根据要求调整 JVM 参数。

域管理、Web Service

987898 - 写入 WS 端点的 wsdl-url 属性出现 'Unknown attribute wsdl-url' 而不是 'Attribute wsdl-url is not writable'

已部署的 SOAP Web Service 端点的 5 个属性(name、context、class、type 和 wsdl-url)不能通过管理工具访问。这是因为它们没有通过 Web Service 子系统对管理模型开放。本版本已经修复了这个问题,现在这些属性可以用管理 CLI 在 webservices 子系统下进行配置了。

EE

1056799 - JBMETA-371: DefaultPropertyReplacer + PropertyResolver 无法解析库表达式

在以前的 JBoss EAP 6 版本里,DefaultPropertyReplacerPropertyResolver 类里的表达式解析逻辑会假定 "${""}" 间的表达式内容是固定的格式,而 ":" 字符则代表系统属性名称和默认值的分隔符。

这意味着部署描述符里的安全库表达式无法被成功解析,因为这些表达式总是使用 ":",而并不是将其作为默认值前的分隔符。库表达式将被错误地评估,第一个 ":" 后的内容将被当作已解析的值处理。

在这个版本里,当检测到表达式的结尾时,在返回第一个 ":" 后面的表达式内容之前,解析器将首先检查是否可以解析整个表达式。

现在,安全库表达式可以用在允许表达式的部署描述符文件里了。

EJB

1093128 - 远程客户事务过期的值被硬编码值替代

以前的 JBoss EAP 6 版本里有一个问题,它导致跨越多个服务器的远程客户事务比预期的要早或要晚过期。

这个问题的出现是因为超时时间没有正确地在服务器间传播,让系统依赖硬编码的值(300秒)。

JBoss EAP 6.3.0 已经解决了这个问题。
1059911 - 计算下一次超时时 @Schedule EJB Timer 未使用时区

在以前的 JBoss EAP 6 版本里,如果 @Schedule EJB timer 使用了和服务器不同的时区,在初始调用后的任何 Timer 调用都不会正确触发。这个版本解决了这个问题,当服务器的时区和 @Schedule 不一样时所有 timer 定时器调用都可以正常进行。
1035216 - EJBTransactionRecoveryService 上的定期恢复过程中出现 ArrayIndexOutOfBoundsException

定期恢复和 EJBTransactionRecoveryService 间间歇性出现的一个问题会导致 ArrayIndexOutOfBoundsException。
[com.arjuna.ats.jta] (Periodic Recovery) ARJUNA016009: Caught:: java.lang.ArrayIndexOutOfBoundsException: 0
 at org.jboss.as.ejb3.remote.EJBTransactionRecoveryService.getXAResources(EJBTransactionRecoveryService.java:112)
....

引起这个问题的根本原因是关联的逻辑循环里没有包含 XAResource 元素的创建,这导致队列索引错误。我们现已将这个元素移至逻辑循环里,所以定期恢复不会再和 EJBTransactionRecoveryService 冲突了。
1017673 - TimerService.getTimers() 里出现 ConcurrentModificationException

如果 Bean 试图在其他线程调用 getTimers() 方法的同时创建一个新的 Timer,ConcurrentModificationException 将被抛出。这是因为 getTimers() 方法没有调用 Timer 上的 synchronized() 引起的。

本版本修复了这个问题,Timer 服务实现的 getTimers() 方法现在可以正确地调用 synchronized() 了。
1031199 - EJB backing 缓存会保留大量在调度执行器的 DelayedWorkQueue 里取消的任务

JBoss EAP 6 里的 @Stateful EJB 缓存实现利用了调度执行器来处理 @StatefulTimeout 逻辑。当访问某个 Bean 时,之前过期的任务将被取消,在调用完成后新任务将重新调度。

在默认情况下,从执行器取消任务并不会从队列里删除它。

因为取消的任务会一直保留在队列里,这最终会导致内存溢出。

在这个版本里,您可以配置调度执行器在取消任务时从队列里删除任务。这可以避免内存溢出。
1045105 - 远程 ejb 客户代码将密码里的 '$$' 转换为 '$' 进行处理

以前的 JBoss EAP 6 版本里有一个程序错误,它导致 PropertiesBasedEJBClientConfiguration 试图扩展包含了双美元符号($$)的密码,就好像这是一个表达式。这可能会导致在服务器和客户间传递错误的密码。

本版本已经修改了 PropertiesValueResolver,默认情况下它不会再扩展密码了。

如果需要扩展,我们可以设置`jboss-ejb-client.expandPasswords` 为 true 来启用它。
1055896 - 无法作为 pass-by-reference 获取异常

本版本解决了一个程序错误,它阻止了 Servlet 将 EJB 异常作为 pass-by reference 引用获取,即使是这样配置的。
901324 - 当在类里发现有多个用 @AroundInvoke 注解的方法时,AroundInvokeAnnotationParsingProcessor 会失败。

以前的 JBoss EAP 6 版本不会检查类里是否有多个用 @AroundInvoke 注解的方法。

因此,第一个被发现的方法将被使用,而其他的则会忽略。

在这个版本里,如果有多个用 @AroundInvoke 注解的方法,部署会失败,并为开发人员显示警告信息。
1056214 - 由于分配了大量吴用的字符串导致的 EJB 调用的性能问题

这个 JBoss EAP 6 版本里解决了一个性能问题。对于每次调用,StatefulComponentInstanceInterceptor 执行 DEBUG 日志里字符串的连接,从而导致性能问题。随后的分配可能导致在进行 stateful EJB 调用时垃圾收集活动的增加,从而导致更高的处理负荷。本版本合并了上游的补丁,降低了调用负荷,从而解决了这个问题。

EJB,Remoting

1098879 - 如果用于 EJB 调用的群集无法为群集节点创建连接,EJB 客户一开始就会失败,ClusterNode{} -> 操作失败,状态为 WAITING。

在以前的 JBoss EAP 6 里,如果为初始连接指定了多个群集节点,EJB 客户连接群集就会有问题。

这是 Windows 平台上特有的由于错误线程同步引起的问题,会导致第一个 EJB 调用间歇性地失败。

这个版本已经解决了这个问题。

Hibernate

1023994 - java.util.Calendar 转换成 java.util.Date 失败 - HHH-8643

本 JBoss EAP 6 版本包含对一个程序错误的修复,这个错误在设置 JPA 查询里的 TemooralType.DATETemporalType.TIMESTAMP 参数时导致抛出 IllegalArgumentException。这个参数本来是使用 Calendar 或 Date 值,然而这种互换性并未如期操作。这个问题现已被纠正,在查询里使用 TemporalType 参数时不会再出现异常了。
1048709 - 执行 Native SQL 上的 query.list 时出现 NPE

在以前的 JBoss EAP 6 里,当使用 Hibernate 查询缓存时,使用查询里的 scalar 会导致用户遇到 NullPointerException。下面是会产生异常的查询示例:
query.addScalar("emp_first_name");

这个问题是试图自动识别处理 scalar 所需的 Hibernate 类型(如 String 类型)的代码引起的。在这个版本里,我们修改了相关的代码以正确地识别所需的处理程序。

对于 6.3.0 以前的版本,在查询 scalar 里显性地定义类型将避免 NPE:
query.addScalar("emp_first_name", new StringType());
1070423 - HHH-8983 数据库驱动可能在语句句柄上附加警告信息,积累后可能消耗大量内存。

在前一个 JBoss EAP 6 版本里,我们发现数据库驱动会在语句句柄上附加警告信息,积累后可能消耗大量内存。在使用 Timestamp 类型和底层的 Sybase datetime 映射时就会出现这个问题。后面的 Sybase 驱动发出的警告可能在批量更新里开始增大内存印记。本版本里已经解决了这个问题。
1073076 - HHH-3482: UnsupportedOperationException with StatelessSession

本版本已经解决了当使用 Stateless 会话并保存 ManyToOne 时抛出 UnsupportedOperationError 实例。这个错误是因为调用了不是为 StatelessSession 实现的 getTimestamp() 方法而引起的。UnsupportedOperationError 现在不会再出现了。
1057742 - PostgreSQL & 对 count-distinct 查询的复合属性使用括号导致 H2 方言不正确

我们在 JBoss EAP 6 里进行了更新,允许在 MySQL 和其他数据库的 count-distinct 查询里在复合属性周围使用括号。以前的版本是不允许这样做的,在 PostgreSQL 里会抛出异常。本版本允许方言使用括号而不会抛出异常。

HornetQ

1056216 - 修改群集连接的初始连接行为

如果群集的 HornetQ 实例丢失了和其他群集节点的连接,重新连接会导致无限循环。对于静态的群集配置,任何初始的连接都会无限进行,忽略 reconnect-attempts 参数。对于动态的群集配置,如果节点在它接收到节点成为群集拓扑一部分的通知和初始连接之间断开连接,重新连接将会无限地尝试。我们已经解决了这个问题,群集逻辑对于初始连接和重新连接都现在使用 reconnect-attempts 参数。
1089838 - 每次调用 ScheduledDeliveryHandlerImpl$ScheduledDeliveryRunnable.run() 都进行不必要的完整的 scheduledReferences 遍历

在以前的 JBoss EAP 6 版本里,如果大量的消息以很小的时间间隔进行调度,将会导致过度的 CPU 负荷。

其根本原因是每个实例消息都会被消费,全部scheduledReferences 链接列表被不必要地遍历了。

这个版本已经解决了这个问题。
1063864 - 往后移植 HornetQ-1278 到 JBoss EAP

在以前的 JBoss EAP 6 版本里,Scheduled Delivery Handling 会对 Scheduled Deliveries 列表进行完整的有序搜索

这可能导致性能问题,因为系统处理很多 Scheduled Deliveries 会占用很高的 CPU 资源。

本版本实施了一个排序列表并在超时前进行正确的搜索,从而让这个列表搜索现在运行得更快,不会有很高的 CPU 负荷。
1089843 - 在 XmlDataImporter 删除临时文件后出现错误的 WARN 消息

在以前的 JBoss EAP 6 版本里,当 XmlDataImporter 导入大型消息时,日志里会记录错误的 WARN 消息。

其根本原因是因为当导入超大消息时,XmlDataImporter 会创建一个临时文件并在导入完成后进行删除。

而当导入另外一条大型消息时,XmlDataImporter 功能试图再次删除临时文件,而这个文件已不存在,从而在日志里登记了 WARN 消息。

这个版本已经解决了这个问题。
1096942 - 客户无法发送消息 - HornetQException[errorCode=100 message=HQ119016: queue has been removed cannot deliver message, queues should not be removed when grouping

在以前的 JBoss EAP 6 里,用户会遇到群集分组的问题,因此路由消息可能会被打断并给出无效的应答。

在这个版本里,我们改进了节点间的通讯和组的获取过程,从而避免了这个消息及在群及分组时可能出现的其他错误消息。
1089844 - Policy Fail 在发送异常给客户前会丢弃消息

在以前的 JBoss EAP 6 版本里,我们发现 HornetQ 里的 "fail" address-full-policy 多数情况下会丢弃消息而不是发送异常给客户。

这导致每当地址已满时消息被丢弃而没有抛出异常。

我们已经解决了这个问题,当地址已满时 blocking sends 总是抛出异常,而当需要从服务器请求额外的凭证时,non-blocking sends 也会抛出异常。
1089846 - ClientSessionImpl 里所有实现 XAResource 的方法可能抛出 non-XAException 到 TM

在以前的 JBoss EAP 6 里,如果涉及 HornetQ 的 XA 事务超时,HornetQ 可能抛出 non-XAException 到事务管理者。

我们在 javax.transaction.xa.XAResource 的实现里确认了这个问题,本版本里已得到解决。
1089849 - 在某些重新连接的场景里,消息总是单独地应答。

在以前的 JBoss EAP 6 版本里,客户消费者在某些场景里将单独应答消息,例如在发生故障后。这个过程的效率是非常低的。

这个版本已经解决了这个问题。
1089851 - 在 depage 过程中避免可能的 NPE

在以前的版本里,在消息递送和分页过程中可能抛出 NullPointerException (NPE)。

这个版本已经解决了这个问题。
1089841 - 修复 totalIterator() 的顺序

在以前的 JBoss EAP 6 版本里,列出消息的任何管理操作会错误地将分页消息类在已发送的消息之前。

在重递送后也可以确认其他的顺序问题。

通过调整 Iterator 在发送消息到管理操作前获取消息的顺序,我们修复了这个问题。
1089835 - 如果 ServerLocator 的 consumerMaxRate <=0,ClientConsumer 的 max rate 不会起作用

在以前的 JBoss EAP 6 里,如果 ConnectionFactory (或 ServerLocator) 已将 maxRate 设置为小于或等于零的默认值,Core API 方法 createConsumer(String queueName, String filter, int windowSize, int maxRate, boolean browseOnly) 会忽略参数 maxRate

其根本原因是 createConsumer 方法里的逻辑错误。本版本已经解决了这个问题。
1089842 - 如果 filter 属性包含 \n 字符,listMessagesAsJSON 方法无法列出消息。

在以前的 JBoss EAP 6 版本里,如果消息的字符串或其他属性里包含新行符( \n),filter 无法正确解析消息。

这是由于 listMessagesAsJSON 方法里的错误逻辑引起的,它无法解析新行符。

这个版本已经解决了这个问题。

IIOP

1064644 - 当 org.jboss.as.jacorb.rmi.InterfaceAnalysis 分析 javax.ejb.EJBObject 时抛出 StackOverflowError

在以前的 JBoss EAP 6 版本里,我们发现由于依赖线程上下文切换的时机,启用了 IIOP 的 EJB 可能无法正确部署,从而抛出了 StackOverflowError。

这个问题是由于 org.jboss.as.jacorb.rmi.WorkCacheManager 里的线程同步不正确而引起的。

这个版本已经解决了这个问题,StackOverflowError 不会再出现了。
1052237 - 向后移植 JacORB #904 CDRInputStream.read_string 应该优雅地处理长度为 0 的字符串

CDRInputStream.read_string 函数错误地处理了空字符串,将其长度计算为 0,导致编组异常。我们添加了 QoS 来允许 CDRInputStream.read_string 可以和这些没有正确对空字符串编码的 ORB 互用。

安装程序

1034062 - 域的主机文件里端口偏移量配置的值翻倍了

当使用 Configure an offset for all default port bindings 选项来设置端口偏移量时,一个程序错误导致这个值翻倍了。本版本已经修复了这个问题。
1062602 - 安装程序接受不带字母的管理性用户的密码

在以前的 JBoss EAP 6 版本里,我们发现图形化安装程序工具没有遵循控制创建用户的用户名和密码限制。

这个版本已经解决了这个问题, GUI 安装程序现在会遵循密码和命名限制了。

JCA

1088470 - 如果TSR 在 SemaphoreArrayListManagedConnectionPool 里抛出 IllegalStateException 和 NPE,ConnectionListener 将会溢出。

如果TSR 在 SemaphoreArrayListManagedConnectionPool 里抛出 IllegalStateException 和 NPE,以前版本里的一个程序错误将导致 ConnectionListener 的溢出。

这个版本已经解决了这个问题。

JDR

1069850 - 阻止 JDR CommandLineMain 里抛出 NullPointerException

在以前的 JBoss EAP 6 版本里,每当 JDR CommandLineMain 抛出一个异常,NullPointerException 就会被抛出。本版本已修复了这个问题。

JMS

1033495 - 域模式下 commitPreparedTransaction CLI 操作不可用

在以前的 JBoss EAP 6 版本里,hornetq-server 资源上的管理操作在域模式下不可用。本版本里已修复了这个问题。

JPA

1040733 - JBoss AS / Hibernate JPA 集成时出现内存溢出

当使用管理 CLI 来获取使用 JPA 命名查询的应用程序部署的 JPA 统计时可能发生内存溢出。本版本里已解决了这个问题。

JSF

1029387 - WFLY-2493 EL 不能访问非 public 类的 publicn 方法/字段

在以前的 JBoss EAP 6 版本里,BeanELResolver 没有尝试覆盖对 Method.invoke 访问非 public 类的 public 方法/字段的访问控制。

这导致了当试图通过 Expression Language(EL) 访问非 public 类的 public 方法/字段时,会出现下列错误信息:
"java.lang.IllegalAccessException: Class javax.el.BeanELResolver can not access a member of class X with modifiers "private"

我们通过调用 EL 实现里的 setAccessible(true) 解决了这个问题。现在可以通过 EL 访问非 public 类的 public 方法/字段了。
1017242 - 在根上下文应用程序里 FacesMessages 无法正常工作

在以前的 JBoss EAP 6 里,我们发现如果应用程序绑定到根上下文,JSF 的 Flash scope 在重定向时没有正确恢复。这意味着 FacesMessages 在根上下文应用程序里无法正常工作。

本版本里的 Mojarra 组件升级到了最新的上游版本,从而解决了这个问题。现在 FacesMessages 可以在根上下文应用程序里正常工作了。
1052265 - JAVASERVERFACES-3080: 当多个 f:viewParam 包含在 f:metadata 里时出现问题

有有上游版本里的一个程序错误,在以前的 JBoss EAP 6 里,f:metadata 无法包含多个 f:viewParam。升级 JSF 组件后可以解决这个问题,现在 f:metadata 可以包含多个 f:viewParam 了。
1054051 - JSF slot 配置无法用于 default 配置

当额外的 JSF slot 安装在 modules 目录的根目录下时,main JSF slot 没有被添加为有效的 JSF 配置。尝试使用 main JSF 实现的 JSF 应用程序将失败并显示如下信息:
org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS012656: Default JSF implementation slot 'main' is invalid

我们解决了这个问题,现在 "main" slot 总是被当作有效的 JSF 实现。因此,当额外的 JSF slot 安装在 modules 目录的根目录下时,使用 main JSF 实现的 JSF 应用程序将可以成功部署了。

日志

1066597 - formatter 属性在每次被处理时都会改变

通过合并上游的补丁,以前的 JBoss EAP 6 里导致 HandlerOperations.equalValue() 方法总是返回 false 的程序错误已被修复。因为在比较值时,这个方法使用了错误的属性名,从而出现了这个程序错误。本版本里已不会再出现这个错误了。
1080991 - Messages#getBundle() in jboss-logging 缺少了 privileged action

在以前的 JBoss EAP 6 版本里,启用安全管理者而没有足够的权限来运行会导致获取消息束的错误。

因此,如果没有启用类加载器权限,当试图获取消息束会抛出异常。

在这个版本里,获取消息束会在私有块里完成。启用安全管理者时获取消息束不会再抛出异常了。
1088618 - throwable 信息的缓存字符串表示形式

在以前的 JBoss EAP 6 里无法保证正确存储栈跟踪信息。因此,在序列化 log4j 日志事件时会导致数据丢失。

为了修复这个错误,我们修改了 Log4J 来缓存反序列化时的栈跟踪信息(也就是 throwable 信息)。这确保了在序列化时不会丢失栈跟踪信息。
1017881 - /subsystem=logging/logger=org.jboss.as.quickstarts.logging:assign-handler 在批处理模式下无法运行

在以前的 JBoss EAP 版本里, composite logging 操作里的 name 属性被添加到模型并从中读取。

因此, composite 操作的 last name 是所使用的唯一处理程序名称,导致相同的处理程序名称被多次添加。

在这个版本里,name 属性不会再复制到模型里,并从操作本身读取。再 composite 操作里添加处理程序现在可以正常进行了。
1095516 - 当手动从 JBoss Config XML 里删除 POJO 对象时,它们的引用并没从 logging.properties 里删除。

在以前的 JBoss EAP 6 版本里,当 POJO 的定义从服务器的配置文件里删除时,对 POJO 的引用没有从 logging.properties 文件删除。

如果在之后创建具有相同名称的 POJO,JBoss EAP 将表示在 logging.properties 里有重复的条目。

这个问题已得到解决,对 POJO 的引用将从 logging.properties 文件里删除。
1073053 - EAP 6.2 审计日志显示的是 EAP 版本而不是 AS 版本号码

在以前的 JBoss EAP 6 版本里,审计日志将显示错误的版本号码。

这个版本已经解决了这个问题, 现在可以显示正确的版本号码了。
1066606 - 将 log4j appender 用作 custom-handler 如果有需要时应该调用 activateOptions

在以前的 JBoss EAP 6 版本里,如果 appender 实现了 OptionHandler,修改作为 log4j appender 的 custom-handler 里的属性不会调用 appender 上的 OptionHandler.activateOptions()。它要求重启 loggin 资源使这个修改生效。在这个版本里,如果 log4j appender 上的属性有修改则会调用 activation 方法,这样 OptionHandler appender 就不需要重启了。
1070452 - 当使用 per-deployment 日志时 System.out.println() 无法工作

以前的 JBoss EAP 6 版本里有一个程序错误,在使用 per-deployment 日志时,它阻止了 System.out.println() 方法输出到日志文件里。通过上游补丁,我们解决了这个问题。

Naming

1014414 - 对于不同的原因,Remote Naming 却抛出相同的异常。

在以前的 JBoss EAP 6 版本里,当 Remote Naming 客户无法连接到任何主机时,对于许多连接错误都抛出相同的异常。这个行为是次优的,它并没有为用户提供实际的错误指示。

抛出的异常是:
javax.naming.NamingException: Failed to connect to any server. Servers tried: [remote://localhost:4447]

在这个版本里,抛出的异常更贴近于实际的错误原因。

如果主机或端口细节是不正确的,下面的 CommunicationException 将被抛出,指示连接超时:
javax.naming.CommunicationException: Failed to connect to
any server. Servers tried: [remote://localhost:4447 (Operation failed
with status WAITING after 5000 MILLISECONDS), remote://localhost2:4321
(Operation failed with status WAITING after 5000 MILLISECONDS)] [Root
exception is java.net.ConnectException: Operation failed with status
WAITING after 5000 MILLISECONDS]

如果可用服务器中的一个有响应,但随后的验证失败,那 AuthenticationException 将被抛出:
javax.naming.AuthenticationException: Failed to connect to
any server. Servers tried: [remote://localhost:4447 (Authentication
failed: all available authentication mechanisms failed),
remote://localhost2:4321 (Operation failed with status WAITING after
5000 MILLISECONDS)] [Root exception is
javax.security.sasl.SaslException: Authentication failed: all available
authentication mechanisms failed]

现在对于连接列表里每台服务器的故障,都会给出合适的信息。
1061609 - InitialContext 吞没了原始的异常原因

在以前的 EAP 6 版本里,InitialContext 的实例化可能失败并显示如下信息:
javax.naming.NamingException: JBAS011843: Failed instantiate InitialContextFactory com.sun.jndi.ldap.LdapCtxFactory from classloader ModuleClassLoader for Module "deployment.externalContextBindingTest.jar:main" from Service Module Loader

然而,在这些信息里并看不到底层的原因,使得故障解除无法进行。为了解决这个问题,现在显示了底层的原因。现在如果发生问题,错误信息将显示具体原因:
javax.naming.NamingException: JBAS011843: Failed instantiate InitialContextFactory com.sun.jndi.ldap.LdapCtxFactory from classloader ModuleClassLoader for Module "deployment.externalContextBindingTest.jar:main" from Service Module Loader [Root exception is javax.naming.CommunicationException: 127.0.0.1:10389 [Root exception is java.net.ConnectException: Connection refused]]
1059836 - Remote Naming 的通讯异常应该在 ConnectException 上抛出

在以前的 JBoss EAP 6 版本里,当 java.net.ConnectException 发生时,通用的 javax.naming.NamingException 而不是更具体的 javax.naming.CommunicationException 将被抛出。

这个版本里进行了修改,可以确保在连接异常发生时 javax.naming.CommunicationException 被抛出。

CommunicationExceptionNamingException 的子类,所以之前捕获 NamingException 的代码也可以正常工作。

其他

901210 - Cleanup 部署目录 - AS7-6031

JBoss EAP 6.3 确保了 JBOSS_HOME/tmpJBOSS_HOME/tmp/vfs 里创建的文件和目录在可能干扰新启动的 EAP 实例前被删除。

在以前的 JBoss EAP 版本里,服务意外关闭后可能会留下一些旧的文件(作为关闭过程的一部分,JBoss EAP 会删除 JBOSS_HOME/tmpJBOSS_HOME/tmp/vfs 里的文件)。

这个版本提供了一种失效保护措施来减缓这种状况。如果 JBoss EAP 6.3 服务器没有优雅地关闭,服务器将没有机会清除这些临时文件。然而,在重新启动后,服务器现在会检查上述目录,如果存在来自前一实例的文件,服务器将初始化一个重命名/删除过程,并允许为新的实例创建新的文件(旧的目录将被重命名来避免和新创建的文件冲突)。这些过程是并发进行的。

在重新启动 JBoss EAP(优雅地或以其他方式)后,旧的临时文件将被删除(在服务关闭或重启时)以确保它们不占用不必要的磁盘空间。

注意 用户应该避免使用 -Xrs JAVA_OPT,因为这个会限制信号的处理并导致 tmp/vfs 目录的大小继续增长。

补丁

1110117 - 关闭时查询 patching MBeans 导致 IllegalStateException

在本版本的 JBoss EAP 6 里,patching 子系统 PatchResource 虽然没有对 InstallationManagerService 的依赖关系,但在关闭时会试图使用它。

这会导致当关闭 hook 试图查询 patching 子系统 MBean 时抛出 IllegalStateException

我们期望在下一个版本里解决这个问题。
1108952 - 应用大型补丁时出现 OutOfMemoryError

在以前的 JBoss EAP 版本里,从主主机控制器传递到从主机控制器的附件数据会被全部读入内存。

因此,当安装大型补丁时,子主机控制器上可能发生 OutOfMemoryError。在通过域控制器使用默认的内存设置安装 CP04 时可能就会出现这种情况。

本版本的附件数据会保存在临时文件里,并不会消耗内存,所以子主机控制器上不会发生 OutOfMemoryErrors

PicketLink

1084596 - 移植 PLINK-396

在以前的 JBoss EAP 6 版本里,我们发现 PicketLink 的IDPWebBrowserSSOValveIDPFilter 解码了 relaystate,这和 SAML 规格是相反的。本版本已解决了这个问题。

RESTEasy

1037753 - 选择的变体并不总是最合适的

在以前的 JBoss EAP 6 版本里,我们发现虽然 RESTEasy 遵循了 RFC 2616 规格,但并没有总是返回最合适的媒介处理程序,其品质因素相等但特征是不一样的。

例如,当给定 application/json, */* Accept header 和变体值 ["application/xml","application/json"],RESTEasy 的 Request.selectVariant() 会选择 application/xml 而不是 application/json

在这个版本里,专有的 Accept header 值会优先于非专有的具体相同品质值的变体值(例如都具有 q=1.0 或 q=0.5 )。
1014393 - RHEL 5, 6 里 IBM jdk 16, 17 上的 resetStream 抛出 Stream closed 异常

在以前的 JBoss EAP 6 里,IBM JDK 16 / 17 提供的 xercesImplresteasy-jaxb-provider 使用的 jaxb unmarshaller 有冲突。

当用户直接使用 EAP 6 提供的 xercesImpl jar 就会出现这个问题。

这些冲突导致了在将 IBM JDK 16, 17 或 xerces:xercesImpl:2.9.1-redhat-x(EAP 6 所提供的)用作基于 resteasy 2.3.6.Final-redhat-x 的项目的依赖关系时会出现 java.io.IOException: Stream closed 错误。

这个版本已经解决了这个问题。

RPM

1086157 - 执行 yum update 时出现 RHEL6|RHEL5 Web Server 和 httpd-manual 错误

在以前的版本里,在运行在 RHEL 系统上的 JBoss EAP 6 里执行 yum update 会产生错误。这是因为 jbappplatform-6-i386-server-6-rpm 频道缺少了 RPM 依赖关系(httpd-manual)。我们已在这个频道里添加了 httpd-manual 软件包,现在执行 yum update 不会再出现错误了。

Remoting

1052204 - 可序列化的类和不同的不可序列化超类之间的协议不兼容性

在以前的 JBoss EAP 6 版本里,当 IBM 和 Oracle JVM 通过序列化 StringBuilderStringBuffer 类来通讯时可能会抛出异常。

这是因为编组协议错误地序列化了可序列化类的第一个不可序列化超类的类描述符。

本版本通过升级 JBoss Marshalling 组件解决了这个问题。
1102271 - JBoss Marshalling 要求类的字段不能为 null

在以前的 JBoss EAP 6 里,如果对象包含的某个字段的值为 null 且这个字段的对象类型没有存在反编组队列里,试图反编组对象都会失败并抛出 ClassNotFoundException。

这个版本已经解决了这个问题。
1069075 - 使用 jboss-client.jar 调用 EAP 上的 EJB 时 Tomcat 上的线程溢出并抛出 OutOfMemoryError

升级 JBoss Remoting 可以解决以前版本里的 OutOfMemoryError 问题。这是当 Tomcat 上的 Web 应用程序调用 EJB 时发生的线程溢出引起的。
1011831 - JBREM000205: Failed to accept a connection: java.nio.channels.ClosedChannelException at server shutdown

在服务器关闭过程中,remoting 子系统里的 DEBUG 信息错误地记录成 WARN 信息。记录的信息类似于:
02:46:15,512 WARN [org.jboss.remoting.remote] (Remoting "node1:MANAGEMENT" read-1) JBREM000205: Failed to accept a connection: java.nio.channels.ClosedChannelException

本版本的 JBoss EAP 6 升级了 remoting 子系统,已将信息重新归类为 DEBUG 级别。
1080429 - 将 JBREM000200 从 ERROR 修改为 DEBUG,既然它是无害的。

Windows 平台上以前的 JBoss EAP 6 的用户在关闭 JMX 连接时能会遇到下列 IOException:
JBREM000200: Remote connection failed: java.io.IOException: An existing connection was forcibly closed by the remote host

这是因为 Windows 强制地关闭连接引起的。它并没有负面的影响,日志级别 ERROR 可以修改为 DEBUG,以避免出现在更底层级别的日志里。
1052258 - 应用程序在 IBM-I 的 IBM JDK 上运行时出现 segfault 和其他 xnio 问题

这个 JBoss EAP 6 版本纠正了运行在 IBM 系统上的应用程序因为 segmentation fault 而运行失败的问题。

这是因为没有为 IBM 操作系统进行优化的 IBM JDK 的 NIO 实现引起的。JBoss EAP 里的 I/O 层试图检测和利用这些实现。然而,在某些操作系统(如 IBM-I),这些实现会导致 segfault。

这个版本里会检测这些操作系统并使用安全 fall-back。这解决了 segmentation fault 问题,应用服务器不会再意外地崩溃了。

Remoting,Web

1032552 - 由于大量的 org.apache.tomcat.util.net.JIoEndpoint$Poller 对象出现 OOM

本版本纠正了线程溢出可能导致的 OutOfMemoryError 。这个溢出可追溯到 JIoEndpoint 类。我们更新了相关的代码,现在 OOM 错误不会再出现了。

脚本和命令

1062595 - 如果用户名和密码相同(非交互模式),add-user 将抛出 RuntimeException。

如果对 add-user 工具的非交互式调用失败(如有问题的用户名/密码组合),以前的 JBoss EAP 6 会抛出 RuntimeException。这个异常的目的是警告脚本故障已经发生。然而,这种类型的异常不应该被处理就进行传播。我们在这个版本里添加了一个自定义异常以表示这个异常是有意为之,而不是表示 add-user 里有程序错误。
1027165 - add-user.sh 要求控制台输出

以前的 JBoss EAP 6 版本里有一个问题,添加用户到 EAP 服务器的脚本(add-user.sh)如果没有控制台(非交互模式)则无法执行。

这是因为脚本(add-user.sh)依赖于控制台(java.io.Console)来进行操作。

执行这个脚本(add-user.sh)会抛出下列异常并中止:
java.lang.IllegalStateException: JBAS015232: No java.io.Console available to interact with user.

这个版本已经解决了这个问题。
1063888 - add-user 脚本使用 help 参数时显示错误的密码信息

在以前的 JBoss EAP 6 版本里,add-user 工具的 help 参数输出只显示关于密码的单个限制条件(密码不能和用户名一样)。在添加用户时这会造成混淆,因为为了确保使用密码有效,需要多个限制条件。本版本从 help 输出文本里删除了使用交互时模式时的单个限制条件以及其他适用的限制。
1062611 - add-user: 检验用户名时 '@' 没被当作非字母字符

当输入无效的用户名时,以前的 JBoss EAP 6 里的 add-user 会显示误导的错误信息。这个信息指出用户名必须只包含字母,而实际上它可以接受特殊字符的子集。我们重写了这些错误信息使其包含可接受的字符的列表,现在当输入无效的用户名时,用户可以看到更为准确的错误信息了。
1020677 - 域模式的服务器脚本使用了错误的字符串来进行检验 JBoss 是否已启动。

在以前的 JBoss EAP 6 版本里,我们发现在确认服务器是否已正确启动时域和独立服务脚本都使用了错误的变量。

当试图检验服务器的状态时,这会导致不正确的结果。

这个版本已经解决了这个问题。
956281 - 在带有 32位 JVM 的 Windows 上启动 EAP 6.1 会导致启动 JVM 失败

在带有 32-bit JVM 的 Windows 8 上运行以前的 JBoss EAP 6 版本时,默认的t max perm gen space 设置会导致不能创建 JVM,然后阻止了服务器的启动。

这个版本已经解决了这个问题。
1057127 - 当补丁升级了一些依赖关系时,jconsole.sh 无法工作。

以前的 JBoss EAP 6 版本里有一个程序错误,每当应用 CP1 补丁时,它都会阻止 jconsole.sh 脚本的运行。这个补丁更新 jconsole.sh 里一些硬编码的模块,同时也改动了原始的模块 JAR 文件。

这意味着不可能用 jconsole.sh 连接到 EAP 控制台。

使用 bin/client 里的 jboss-cli-client.jar 可以修复这个问题,它包含了所有需要的依赖关系。
1062592 - add-user 工具给出的令人混淆的错误信息

本版本的 JBoss EAP 6 已经修改了 CLI add-user 工具的一条错误信息以避免混淆。

在以前的版本里,如果输入的密码只包含数字字符时,将会显示表示用户密码需要至少包含一个字母数字字符的错误信息。本版本里相关的错误信息会表示只有数字的密码必须包含至少一个字母字符。
1057625 - add-user.sh 语法针对 Cygwin 的修改(用于 EAP 6.3.0)

在以前的 JBoss EAP 6 版本里,我们发现在 Cygwin 环境里 add-user.sh 脚本无法运行。

这是由于脚本里一行错误格式的代码引起的。

这个版本已经解决了这个问题,然而在 Cygwin 环境里运行时这个脚本仍带有一个未解决的问题。详情请参考本文档的『已知问题』里的 Ticket 1069252。
928486 - 对密码的要求应该只显示一次

在以前的 JBoss EAP 6 版本里,用户在使用 add-user 工具时输入无效密码只会接收关于第一次违反密码规则的错误信息。

如果用户违反了多条规则,在选择有效密码前将需要多次尝试创建密码。

在这个版本里会显示密码限制的完整列表,减少了尝试创建密码的次数。

安全性

1023084 - JBossJSSESecurityDomain.java 里的程序错误 - 试图使用错误的供应商

以前的 JBoss EAP 6 版本里有一个程序错误,它导致 JBossJSSESecurityDomain.java 试图使用密钥库/信任库供应商来获取信任管理者的实例。这种行为是错误的,因为 "trust-manager-factory-provider" 设置无法用在安全域的 JSSE 里。使用这个设置(即使正确地配置)将在启动时抛出异常。本版本已经纠正了这个程序错误,现在可以用 "trust-manager-factory-provider" 设置来设置 trustManagerFactoryProvider 了。
1065476 - AdvancedLdap 登录模块无法处理在 UID 里包含斜杠字符的用户

在以前的 JBoss EAP 6 版本里,如果请求 ID(UID)包含斜杠字符(/),验证请求将会失败。这是因为 AdvancedLdap 登录模块没有正确处理这个字符。在这个版本里,我们更新了这个模块,在绑定前从用户 DN 里删除了引号。
1069127 - RBAC + LDAP 需要和 <local/> 登录机制一起使用

在以前的 JBoss EAP 里,如果一个验证的用户无法映射到 LDAP 帐号时 LDAP 组加载将会失败。这是因为使用安全区的验证过程首先会在客户和服务器间协商一个机制,然后再加载用户的组信息。因为 local 验证系统代表带有人工用户名的用户,而如果 LDAP 服务器无法映射这个用户名到某个用户,这个过程的第二部分会失败。

在这个版本里,我们在用于本地验证的 <local /> 元素里添加了新的属性 skip-group-loading。当这个属性被设置为 true 时,组加载将在本地验证发生后被跳过,从而避免了错误。如果使用了不同的机制,组加载则进行正常处理。
1066488 - 管理安全区:LDAP referrals 无法工作

以前的 JBoss EAP 6 有一个程序错误,所有的用户和组都必须在相同的 LDAP 服务器上定义且是可搜索的。

导致 referral 的任何用户和组条目都不能和 JBoss EAP 6 一起使用。

这是因为在根据 LDAP 验证用户或使用 LDAP 加载组时,安全区里的 LDAP 搜索没有包含处理 referral 的逻辑。

这个版本已经解决了这个问题, 现在 LDAP referral 可以按预期那样工作了。
1030053 - NegotiationAuthenticator 丢失了 POST 数据

在以前的JBoss EAP 6 版本里,我们发现如果 NegotiationAuthenticator 和 PicketLInk 及 HTTP_POST 绑定一起使用时会丢失任何 SAMLRequest 参数。这导致了即使在验证成功后,用户仍会停留在 IDP 登入页面。在这个版本里,我们已安装了 NegotiationAuthenticator 的补丁,这个问题不会再出现了。
1065486 - LdapExtended 登录模块不会处理在 UID 里包含斜杠字符的用户

在以前的 JBoss EAP 6 版本里,如果用户 ID(UID)包含斜杠字符(/),用户验证将会失败。这是因为 LdapExtended 登录模块没有正确处理这个字符。在这个版本里,我们更新了这个模块,在绑定前从用户 DN 里删除了引号。现在用户可以按预期进行验证了。
974324 -用于管理的 EAP 6 域模式日志不存在

在以前的 JBoss EAP 6 版本里,我们没有添加 TRACE 和 DEBUG 日志到安全区的 LDAP 交互里。这使得诊断 LDAP 的验证问题极为困难。我们现在添加了 DEBUG 日志到使用了 LDAP 的安全区里。客户现在可以使用这些日志来诊断和 LDAP 相关的问题。
1069885 - JAAS 缓存没有缓存 SecureIdentityLoginModule(以及 ConfiguredIdentityLoginModule)结果

在以前的 JBoss EAP 版本里,当使用 SecureIdentityLoginModule 而没有缓存加密的数据源密码时会出现性能问题。这是当使用数据源的应用程序未被保护时 JAAS 缓存不允许缓存键为 null 而导致的。

在这个版本里,密码库用来加密数据库密码,绕过了 JAAS 登录模块并解决了性能问题。
1067610 - 如果 DatabaseRolesMappingProvider 的 rolesQuery 返回一个空集,验证会失败。

在以前的JBoss EAP 6 版本里,我们发现如果 DatabaseRolesMappingProvider 返回一个 null 值,验证将会失败。这个问题是由于如果这个值为 null,验证无法提供角色给被验证的用户而导致的。在本版本里,安全系统将承认成功的验证且不会试图在返回值为 null 的实例里应用角色。
1000185 - JASPI auth-module 配置不支持 "module" 属性

在以前的 JBoss EAP 6 版本里,安全子系统里的 JASPIC auth-module 配置会忽略 "module" 属性。这个属性告诉 PicketBox 到哪去加载自定义的 auth-module 类。

因此,我们不能配置自定义的 JASPIC auth-module,因为 PicketBox 无法确定应该使用的 jboss 模块。

因为 module 属性已经存在于安全子系统模式里,我们需要在安全子系统里添加代码来处理这个属性,允许 PicketBox 正确地加载自定义模块。

因此,用户现在可以用 "module" 属性来配置自定义 JASPIC auth-module,指定包含自定义模块类的 jboss-module。

服务器

955818 - 没有正确处理 WARs-in-EAR 的 Class-Path manifest 条目

在以前的 JBoss EAP 6 版本里,当 EAR 里的多个子部署通过 Class-Path manifest 条目引用单个非模块 JAR 文件时,它会被添加到第一个子部署的类加载器里。

这导致类加载问题,因为 Utility Jar 里的类将被加载到错误的类加载器里。

本版本为 Utility JAR 创建了一个新的部署模块,所有依赖的部署都使用它。因此,类加载问题不会再出现了。
1060269 - 主域服务器重载的反向 DNS 查找

以前的 JBoss EAP 6 版本的用户可能已发现,如果受管服务器没有重启,服务器在重新加载后会无法重新连接到域控制器。

如果没有正确配置反向 IP 查找,而服务器用控制器的主机名(非 IP 地址)进行重新连接,这个问题就可能会发生。这种情况下连接会失败。

通过重用保存在 InetSocket 对象里的数据,本版本已经解决了这个问题。这避免了反向 IP 查找的需要并允许服务器如期进行重新连接。
1036872 - 无法配置禁用在 JRE 的 java.security 文件里指定的策略的安全策略文件设置

使用特殊前缀 = 来禁用默认的策略文件会出现问题。底层的原因时当主机控制器启动服务器时,它 java.security.policy 设置提供了 null 值,导致使用了 java.security 文件里指定的策略文件以及可能的权限问题,从而阻止了服务器的引导。

通过修改系统属性的解析,我们解决了这个问题。以 "=" 开始的系统属性的值不再在主机控制器启动服务器时被重置为 null
1049999 - Class-Path: . can cause JBAS011046: 这个模块里已经定义了名为 'TestBean' 的组件

在以前的 JBoss EAP 6 版本里,WEB-INF/lib 里的一些 JAR 库文件包含了带有 "." 条目的 Class-Path manifest 属性 。

这个问题导致了一些资源或组件被两次处理,造成日志里出现警告信息。

本版本忽略了 Class-Path manifest 属性里的 "." 条目,所以资源不会再被处理两次了。
924562 - 依赖关系替换导致的部署重启无法进行

这个 JBoss EAP 6 版本里解决了导致 NullPointerException 的一个问题。当部署部分重启某些已被清除以节省内存的数据结构时(例如当替换某个依赖关系时),这个异常可能出现。这个问题键该阻止重部署的完成。为了解决这个问题,本版本不再允许部分重部署。如果依赖关系被替换,部署将完全重启,而这个异常不会再出现了。

事务管理者

1038993 - 无法通过 CLI 命令将对象库类型从 hornetq 修改为 jdbc

在以前的 JBoss EAP 6 里,通过 CLI 界面修改对象库类型(从 HornetQ 到 JDBC,反之亦然)没有正确填充。

因此,对象库将保持初始设置(可能缺少所需的选项)。

在这个版本里,我们加强了写处理程序 use-hornetq-storeuse-jdbc-store 来禁用其他选项,
1034650 - 增大 com.arjuna.ats.jta.orphanSafetyInterval 的默认值

如果事务的处理时间和定期恢复进程的活动重叠,以前的 JBoss EAP 6 版本会导致大量的回滚 XAExceptions 被登记日志,本版本已修复这个问题。orphanSafetyInterval 的超时间隔已增至 20 秒,这显著地减少了遇到异常的可能性。
1027126 - 使用 standalone-xts.xml 和 mysql 5.5 上运行的 jdbc 对象库时服务器无法启动

在以前的 JBoss EAP 6 里,如果没有配置事务管理者运行 XTS 事务,而使用了 MySQL 5.5 上的 JDBC 对象库,驱动会放入 deployments,导致服务器无法启动。

这个版本已经解决了这个问题。
1107569 - 单阶段提交优化:Bean 调用实际失败了,但抛出的 XAException 并未被捕获。

以前的 JBoss EAP 6 版本里的一个程序错误阻止了用户看到表示单阶段提交失败的异常。

因为资源管理者可能执行 XAR::end 失败但执行 XAR::rollback 成功,而不会报告异常给用户,从而出现了这个错误。

本版本会抛出正确的异常,以确认单阶段提交的结果。
1092198 - LogStoreProbeHandler 覆盖了 LogStoreResource 根模型

在以前的 JBoss EAP 6 版本里,我们发现 LogStoreProbeHandler 替代了 LogStoreResource 持有的 delegate。这会从现有委托的 model 字段(如 "type" 属性)删除任何数据。

因此,调用 subsystem=transactions/log-store=log-store 上的 probe 操作将导致资源的 type 属性的值被修改为 default,即使事务管理者实际上使用了 hornetq。实际的运行时行为不会受影响,但报告的值将是错的。

在这个版本里,当前委托模型的内容会在被删除前复制到新委托里,当日志库类型实际上是其他类型时,在运行 probe 操作后,type 属性不会再是 default

Web

1027272 - 使用群集 SSO 时会话失效会抛出 ContextNotActiveException

在以前的 JBoss EAP 6 版本里,当过期的会话和 SSO 关联时 SSO Valve 没有设置上下文。

因此,在会话被销毁后 ClusteredSingleSignOn 将调用 WeldListener.sessionDestroyed(event),导致会话失效上出现 ContextNotActiveException

在这个版本里,当过期会话和 SSO 关联时 SSO Valve 会设置上下文,会话失效时也避免了 ContextNotActiveException。
1050204 WAIT_FOR_BEFORE_START 无法用于 "/" 上下文应用程序

在以前的 JBoss EAP 6 版本里,WAIT_FOR_BEFORE_START 属性无法用于根上下文应用程序。如果用户将 WAIT_FOR_BEFORE_START 设置为 "/" 并部署一个根应用程序,连接器将无法正常启动。

这个版本已经修复了这个问题。当设置 WAIT_FOR_BEFORE_START 为 “/” 并部署根上下文应用程序时,连接器现在可以成功启动了。
1105160 - 对 JSSESupport keySizeCache map 的并发访问导致高 CPU 占用率

以前的 JBoss EAP 6版本没有正确地同步 JSSESupport 里的 keySizeCache

这意味着对 JSSESupport keySizeCache 的并发访问会导致产生高 CPU 占用率的 Hash 表循环。

在这个版本里,对 JSSESupport 里的 keySizeCache 的访问被同步,不会出现对 keySizeCache 的并发访问。
1036197 - 如果 org.apache.tomcat.util.Constants.ENABLE_MODELER 被设置为 true,Native HTTP 连接器将无法使用。

在以前的 JBoss EAP 6 里,JBossWeb Coyote 的 *Protocol 类的 start() 方法使用 getName() 的值构建了一个 MBean 名称,它很可能包含一个冒号而 MBean 对象名不能包含任何冒号。

如果设置了 -Dorg.apache.tomcat.util.Constants.ENABLE_MODELER=true,当 JBoss 试图启动时会报告下列错误:
JBWEB003044: Threadpool JMX registration failed: javax.management.MalformedObjectNameException: Invalid character ':' in value part of property

这个版本使用 getJmxName() 而不是 getName() 来构建 MBean 的名称。

因此,当设置 -Dorg.apache.tomcat.util.Constants.ENABLE_MODELER=true 时并启用 Modeller 时,异常不会再出现了。

Web 控制台

1079948 - 在 JBoss EAP 6.2 管理控制台里无法看到所有主机

在以前的 JBoss EAP 6 版本里,主机选择器里没有滚动条。这使得选择未显示的主机变得很困难。

我们在这个版本的主机选择器里添加了一个滚动条,现在可以很容易地选择所有主机了。
1014219 - RBAC: 控制元素对于具有多个 scoped 角色的用户的可见性问题

分配有多个角色的用户将在控制台里看到他们并没有访问权限的操作。例如,具有 host-master-administratorhost-slave-monitor 角色的用户只应该看到从主机上下文里的控制元素(如服务器配置页面里的 Add 按钮)。在主主机上下文里这个按钮不应该可见(然而它是可见的)。

如果执行不应出现的操作将会失败,因为在操作执行时会强制实施正确的访问控制。这不会造成安全漏洞。

本版本已修复了这个问题。和用户角色不相关的控制元素将变灰并处于不活动状态。
900849 - 当数据大于 64k 时 EAP6 CLI 出现错误

任何返回超过 65535 个字符的字符串的 CLI 命令都无法运行并出现下列错误:
Communication error: java.util.concurrent.ExecutionException: Operation failed

这是由于使用了 JBoss DMR 库里的 java.io.DataOutput.writeUTF() 方法引起的。如果处理的字符串超过 65535 个字符,这个方法会抛出 UTFDataFormatException。我们已更新了 JBoss DMR 库来使用其他技术以正确处理超过这个长度的字符串。现在,返回超过 65535 个字符的字符串的 CLI 命令可以正常运行了。
901227 - Web 控制台里的 node-timeout, worker-timeout, flush-wait 和 ttl mod_cluster 属性问题

以前的 JBoss EAP 6 版本里基于 Web 的管理控制台里存在一个问题,它阻止了用户查看或设置 mod_cluster 属性的值为 -1
  • node-timeout
  • worker-timeout
  • flush-wait
  • ttl
1103747 - EAP 6.x 的管理控制台的 "Profiles" 标签页里无法列出所有的主题/队列

在以前的 JBoss EAP 6 版本里,用户发现他们无法在管理控制台的 Profiles 标签页里列出所有的主题和/或队列。可见的队列的最大数目是 8。本版本已经解决了这个问题,现在所有的队列都是可见的了。
1029687 - 登出加密管理控制台(SSL)时重定向到 HTTP 地址

在以前的 JBoss EAP 6 里,用户登出加密的管理控制台(HTTPS)时会被错误地重定向到 HTTP 地址且登出会失败。

这是因为重定向到 HTTP 地址是硬编码的。

在这个版本里,我们更新了重定向,使其考虑用户是通过 HTTP 还是 HTTPS 访问,从而正确地进行重定向。
1048211 - 安全域在管理控制台显示错误的安全策略

以前的 JBoss EAP 6 版本里一个程序错误导致了安全域显示错误的安全策略。

本版本的 JBoss EAP 6 已经修复了这个问题,相关细节现在可以根据所选的安全策略而更新了。
999813 - [可用性] 当在管理控制台里冲刷 JMS 目的地度量时 Cancel 操作被忽略

在 JBoss EAP 6.1.0 和 6.1.1 里,在通过 Web 管理控制台冲刷 JMS 目的地之前,会显示一个确认对话框,要求对这个行为进行确认。而不管用户的选择是什么,JMS 目的地都会被冲刷。其根本原因是确认的结果被忽略了。我们已经解决了这个问题,现在 JMS 目的地只有在点击“OK”关闭确认对话框后才被冲刷。
1012490 - 在 Runtime Metrics 页面列出了消息目的地所有的 JNDI 名称

在以前的 JBoss EAP 6 里,我们发现消息目的地(Runtime > JMS 目的地)的 Runtime Metrics 页面只列出 JMS 目的地的单个 JNDI 名称。JMS 目的地的其他 JNDI 名称被省略号("...")代替了。

这意味着 JMS 目的地的完整 JNDI 名称列表只能通过访问 EAP 配置集里的完整目的地列表来获取。

在这个版本里,所有 JMS 目的地的 JNDI 名称的完整列表在消息目的地的 Runtime Metrics 页面里借助信息提示的方式可见。

如果 JNDI 名称列表太长,它将被截取并显示省略号,但当鼠标悬停于 JNDI 名称条目之上时信息提示会显示完整的列表。
1073537 - 所有服务器都要求通过 DS 连接测试

在以前的 JBoss EAP 6 版本里,DS 连接测试使用了域里所有的服务器。这会对性能造成负面影响。

在本版本里,只有当前选择的配置集里的服务器会用于连接测试,这会产生更好、更可靠的性能。

Web Services

1060001 - Spring 依赖关系注入在端点实例里无法工作

以前的 JBoss EAP 6 版本里的一个程序错误阻止了 JBoss WS-CXF 里创建的 bean 注入到端点,本版本通过组件升级解决了这个问题。
1032593 - 在应用程序卸载后数据仍保留在 jboss-eap-6.2/standalone/data/wsdl 里

即使应用程序从 JBoss EAP 服务器卸载,以前的 JBoss EAP 6 仍将数据保存在 Web Services Description Language (WSDL) 目录里(EAP_HOME/standalone/data/WSDL)。

只要在没有设置自动清理文件的服务器上卸载应用程序,WSDL 数据就默认会被保存。

我们通过更新资料库(jbossws-cxf-4.2.x 和 trunk)里的文件,修改维护和发布 WSDL 日志的行为,从而解决了这个问题。

这阻止了在 JBoss EAP 6.3 服务器里卸载应用程序后将数据保存在 WSDL 目录里。
1032439 - javax.management.InstanceNotFoundException: jboss.ws:service=ServerConfig 引起 jbossws testcase 间歇性地失败

在以前的 JBoss EAP 6 里,WS 服务器配置并不总是通过 JMX 可用。

这是由于已舍弃的对 WS ServerConfigService 里 MBean 服务器的 OPTIONAL 服务依赖关系引起的。

在这个版本里,每当 JMX 子系统可用时,MBean 服务器依赖关系被设置为 REQUIRED 而不是 OPTIONAL。

因此,当 JMX 子系统可用时,WS 服务器配置总是通过 JMX 可用。
1069349 - CXF 里的 Schema 导入在用于获取它们的 URL 里可能出现名称冲突

以前的 JBoss EAP 6 版本里的一个程序错误在导入 CXF 里的 Schema 时导致名称冲突。本版本已解决了这个问题。
900634 - JBossWS-CXF 没有发送错误消息到 FaultTo 端点

如果 WS-Addressing 的 FaultTo 元素被设置为 WS 客户,WS 服务器不会发送错误消息给 FaultTo 目的地。然而,如果设置了 ReplyTo 元素,WS 服务器会发送响应到 ResponseTo 目的地。本版本的 JBoss EAP 6 带有更新的 Apache CXF,从而修复了这个问题。
1040732 - JAXBDataBinding 无法处理带有普通对象的异常,如 ObjectWithGenerics<Boolean, Integer>

在以前的 JBoss EAP 6 版本里,当 Exception 类包含了一些带有下例展示的类型参数的成员时会出现问题。

我们合并了从 Exception 类生成的 WSDL,现在 SOAP 错误信息不会再出现了。
@javax.xml.ws.WebFault
public class GenericsException extends Exception {
  private static final long serialVersionUID = 1L;
  private ObjectWithGenerics<Boolean, Integer> obj;

  public ObjectWithGenerics<Boolean, Integer> getObj() {
  return obj;
  }
  public void setObj(ObjectWithGenerics<Boolean, Integer> obj) {
  this.obj = obj;
  }
}

我们在上游开发里解决了这个问题并合并到了本版本里。
1079084 - Webservices DUP 没有根据 @WebService 注解扫描所有可见的类

我们发现在以前的 JBoss EAP 6 版本里,Webservices DUP 有一个程序错误,它没有扫描所有可见的用 @WebService 注解的类。当包含 web.xml 和引用 JAX-WS 端点(类用 @WebService 注解)的 <servlet-class> 的 war 归档位于 ear 归档里且包含这个类的 jar 位于 ear 归档的 lib/ 目录里时会出现问题。我们已经在这个版本里修改了相关的代码,以更彻底地扫描用 @WebService 注解的类,错误信息也不会再出现了。
1077259 - 对于带有 WSA ReplyTo prop set 的请求,没有创建 HttpServletRequestSnapshot。

对于启用了 WS-Addressing 的请求,如果也指定了 ReplyTo header 属性为非通用的地址,以前的 JBoss EAP 6 版本里的一个程序错误阻止了 HttpServletRequestSnapshot 的创建。

这个程序错误导致了立即的 HTTP 202 响应且容器过早地回收了 servlet 请求。这阻止了端点访问 servlet 请求的上下文信息。

通过升级 CXF 组件,这个版本已经解决了这个问题。
1079043 - 当 JAX-WS client 从 JAX-WS 端点实现里调用时会丢失 MessageContext

在以前的 JBoss EAP 版本里,当 JAX-WS 客户在端点里被调用时,端点的 MessageContext 从 ThreadLocal 里被删除且在客户调用结束后无法被替换。

这导致在进行任何 JAX-WS 调用后 MessageContext 对于端点不可用。

这个版本已经解决了这个问题。
1031642 - WebServices 子系统的 modify-wsdl-address 属性的 false 值被忽略了

以前的 JBoss EAP 6 版本里有一个程序错误,在执行 WSDL soap:address 重写时它阻止了 WS Stack 处理 @WebService(wsdlLocation=...) 。

当注解只被置于服务端点接口时,上面的注解属性没有被处理。

这个版本已经解决了这个问题。
1060355 - Schema 检验 + 多个 schema 导入到相同的命名空间 + 类别查找无法运行

通过升级 CXF 组件,我们解决了一个导致 org.apache.cxf.wsdl.EndpointReferenceUtils.SchemaLSResourceResolver#resolveResource 里的算法没有正确解析 schema 并只返回它发现的第一个 schema 的问题。

jbossas

1067620 - 当启用 Java Security Manager 时无法修改 EAP 6 上应用程序的权限

我们发现了一个应用 JSM 的问题,已部署的应用程序被赋予 AllPermission 权限,这和策略文件是矛盾的。这个问题的根本原因是没有启动虚拟文件系统(VFS),所以基于 vfs:/... URL 的策略不会被加载并只会应用默认权限。这个问题已被解决,通过确保 VFS 模块的加载,现在 JSM 策略可以正确地应用了。

mod_cluster

1008901 - 有些重要的日志消息没有 ID 来进行标识

在以前的 JBoss EAP 6 版本里,我们发现有两条日志消息没有正确地本地化。

因此,用户无法看到 MODCLUSTER{id} 消息或者翻译。

在这个版本里,我们添加了两条消息:MODCLUSTER000044 和 MODCLUSTER000045。

这些消息现在可以正常显示了。
1030965 - 注册的上下文的数量对 mod_cluster 的性能有负面的影响

我们在将 mod_cluster 配置为负载平衡器的 Apache HTTP 服务器上确定了一个性能问题。workers->nodes 表上的 httpd 共享内存操作对负载平衡器性能有着负面的影响。因此,当注册的上下文增加时,httpd 负载平衡器的性能会降低。

要绕开这个问题,请试图减少注册的上下文的数量。

为了修复这个错误,我们修改了 httpd 来利用本地内存而不是共享内存。
1020142 - modcluster 子系统的 XSD 没有指定 worker-timeout 属性

在以前的 JBoss EAP 6 版本里,用于检验的 mod_cluster XSD 没有指定 worker-timeout 属性。

这意味着使用 XSD 来检验配置可能会失败,即使配置是正确的且服务器正确地进行了解析。

我们已修复了 XSD schema,在使用 worker-timeout 属性时用 XSD schema 可以通过检验了。
1058334 - 服务器日志里没有解析 mod_cluster 的 ${project.version}

在以前的 JBoss EAP 6 里,版本字符串逻辑使用 ModClusterLogger.java 里的 ${project.version}。

因此,${project.version} 被写入了服务器日志。

在这个版本里,我们在 Version.properties 里添加了一个版本字符串并在登记开始信息前读取它来修复这个逻辑。现在服务器日志里已可以正确显示版本了。
985101 - STOP-APP 及 ENABLE/DISABLE-APP 没有包括在 mod_cluster-manager 页面上

以前的 JBoss EAP 6 版本里没有开放 mod_cluster-manager 页面上 STOP-APP 命令。

这个版本已经解决了这个问题, mod_cluster-manager 页面上的 STOP-APP 命令是可用的了。
980246 - mod_cluster-manager 可能将单个 VirtualHost 的别名显示多次,造成页面乱码。

在以前的 JBosS EAP 里,有用户报告当部署多个带有独立虚拟服务器的应用程序、且每个虚拟服务器都有多个别名时,mod_cluster_manager 可能错误地多次显示系统的虚拟主机(每个别名一次)。

我们已经解决了这个问题,现在所有的虚拟机主机及别名在 manager 页面上都只显示一次。
1098576 - ModClusterService stop 命令总是消耗会话

在以前的 JBoss EAP 6 版本里,使用 CLI 界面里的 ModClusterService stop 或 stopContext 命令无法在消耗活动会话后移动上下文至 STOPPED 状态。这意味着这些命令无法按需要(无需消耗活动)快速停止上下文。通过升级 mod_cluster 组件,我们解决了这个问题。
1044594 - [WFLY-2663] mod_cluster 度量属性从未被应用到类里

在以前的 mod_cluster 子系统里,配置的加载度量以及指定的属性会从 XML 里解析,但并未应用到类里。

这意味着配置加载度量的属性不会有任何作用。

在这个版本里,属性已经如预期地应用到对象上了。
1052185 - MODCLUSTER-365: Reset MCMP 被发送到所有可用的代理

以前的 JBoss EAP 6 版本里有一个问题,它导致 mod_cluster 发送 Reset MCMP(Mod_Cluster Manangement Protocols)到它的 proxy-list 里的所有 httpd 服务器(在其中一个服务器重启后)。这个行为可能对设置 auto-enable 上下文为 false 的系统有负面的影响。

正确的行为是只发送 Reset 请求到重启的服务器。这个问题的出现是因为 DefaultMCMPHander.status 调用了默认发送到所有代理的 sendRequests

通过升级 mod_cluster 组件,这个问题已得到解决。