如何在部署到域时以编程方式获取 JBoss 服务器组名称

How to obtain JBoss Server Group Name programatically when deployed to a domain

如何从部署到域的 java 企业应用程序中以编程方式获取 jboss eap 6.x / wildfly 服务器组名称?

其他一些 jboss 值(例如节点名称)可以通过系统 属性 值获得,但服务器组名称似乎不会以这种方式公开。

我希望能够在系统诊断功能中显示服务器组名称(即集群名称),以便技术用户验证他们正在查看正确的系统...(npe、dev、prod 等) )

我发现我需要使用 JMX 来获取这个值,因为它通过 MBean 暴露给 JVM(可通过 JConsole 验证....)

所以回答我自己的问题:

try {
    ObjectName serverMBean = new ObjectName("jboss.as:management-root=server");
    MBeanServer server = ManagementFactory.getPlatformMBeanServer();
    String serverGroupName = (String) ManagementFactory.getPlatformMBeanServer().getAttribute(serverMBean, "serverGroup");
    logger.info("JBoss server group name is" + serverGroupName);
} catch (Exception e) {
    logger.error("Unable to identify JBoss server-group-name", e);
}

如果应用程序也可以部署到独立服务器,则可以先查询 launchType 属性。有效值似乎是 STANDALONE 或 DOMAIN。

在独立模式下,serverGroup 属性不可用,但是可以使用 jboss.node.name 系统 属性 作为替代系统标识符。

另一种(也许更好)的方法是使用管理 API https://docs.jboss.org/author/display/WFLY8/Management+API+reference .