【发布时间】:2017-06-04 13:26:38
【问题描述】:
JBoss EAP 7 服务器 instance-id 在standalone.xml 中配置,如下所示:
<subsystem xmlns="urn:jboss:domain:undertow:3.1" instance-id="node2">
我拥有负载平衡和粘性会话的环境。因此,客户端接收到 JSESSIONID cookie,其值为:“ckvLpSqtsN2EjA8WpFqml3UMU5ZIyH2YI29Ir-i.node2”。
问题是:我在 MBean 上(可以访问 FacesContext)。如何获取为请求提供服务的服务器的实例 ID?在上述场景中,“node2”。
我已经尝试过的:
- FacesContext.getCurrentInstance().getExternalContext().getSessionId(true)。
- 不起作用,因为它会从 JSESSIONID 中的值中去除实例 ID。
- 从“Cookie”标头中读取 JSESSIONID 值(可通过 HttpServletRequest 获得)。
- 当用户还没有会话时不起作用(他没有 JSESSIONID cookie)。
我已经考虑通过在环境变量中设置实例 id 并配置standalone.xml 来定义 instance-id="${my.instance.name}" 来避免这个问题。然后,应用程序读取环境变量以获取实例 ID。这是跨 AS 可移植的,但容易出现配置错误。理想情况下,应用程序应该准确地获取 instance-id 上的内容,并且我不需要应用程序是可移植的。
这个问题类似于“Getting instance name of a WebSphere app Server”(Getting instance name of a WebSphere app Server),但针对的是 JBoss EAP 7 服务器。
【问题讨论】:
-
试试
System.getProperty("jboss.node.name")
标签: java jakarta-ee jboss jboss-eap-7