如何在部署到域时以编程方式获取 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 .
如何从部署到域的 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 .