Monitoring Using a Remote JMX Client
WSO2 Carbon which is the underline framework for WSO2 Governance Registry (and other products) can be monitored using a remote JMX client (such as JConsole) which is behind a firewall. This feature is enabled by the following configuration at carbon.xml
:
<Ports> <!-- The JMX Ports --> <JMX> <!--The port RMI registry is exposed--> <RMIRegistryPort>9999</RMIRegistryPort> <!--The port RMI server should be exposed--> <RMIServerPort>11111</RMIServerPort> </JMX> </Ports>
These parameters also can be passed at server start up time using the system properties com.wso2.rmiserver.port
and com.sun.management.jmxremote.port
for RMIServer port and the RMIRegistry port respectively.
When monitoring Carbon remotely, specifying the RMIRegistry port is sufficient but if your client is behind a firewall you will also need to specify the second port, RMIServer port. This second port need to be opened by the firewall admin.
The following code fragment is from CarbonServerManager.java which shows how the JMX URL is constructed according to provided port.
// Create an RMI connector and start it if (rmiServerPortString != null) { int rmiServerPort = Integer.parseInt(rmiServerPortString); jmxURL = "service:jmx:rmi://" + NetworkUtils.getLocalHostname() + ":" + rmiServerPort + "/jndi/rmi://" + NetworkUtils.getLocalHostname() + ":" + rmiRegistryPort + "/jmxrmi"; } else { jmxURL = "service:jmx:rmi:///jndi/rmi://" + NetworkUtils.getLocalHostname() + ":" + rmiRegistryPort + "/jmxrmi"; } JMXServiceURL url = new JMXServiceURL(jmxURL);
With this improvment you will be able to monitor Governance Registry using a JMX client which is behind a firewall.
Tip
If you are intending to establish a remote connection (over a network or into a VM), make sure that the server has been started with the -Djava.rmi.server.hostname=<IP_ADDRESS_WHICH_YOU_USE_TO_CONNECT_TO_SERVER>
option. For more information read Troubleshooting Connection Problems in JConsole.