shonky linux user
shonky linux user

Reputation: 6428

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

How can I obtain the jboss eap 6.x / wildfly server group name programmatically from within a java enterprise application deployed to a domain?

Some of the other jboss values such as node name can be obtained via system property values but server-group-name does not appear to be exposed this way.

I would like to be able to show the server group name (i.e. the cluster name) in a system diagnostics function for technical users to verify they are looking at the correct system... (npe, dev, prod etc)

Upvotes: 1

Views: 3047

Answers (2)

shonky linux user
shonky linux user

Reputation: 6428

I've discovered that I need to use JMX to obtain this value as its exposed via an MBean to the JVM (verifyable via JConsole....)

So answering my own question:

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);
}

If the application might also be deployed to a standalone server one could query the launchType attribute first. Valid values appear to be STANDALONE or DOMAIN.

In STANDALONE mode the serverGroup attribute is not available however one could use the jboss.node.name system property as an alternative system identifier.

Upvotes: 1

ehsavoie
ehsavoie

Reputation: 3547

One other (and maybe better) way to do it is to use the management API https://docs.jboss.org/author/display/WFLY8/Management+API+reference .

Upvotes: 1

Related Questions