package com.javamonitor.openfire.mbeans; import org.jivesoftware.openfire.ServerPort; import org.jivesoftware.openfire.XMPPServer; /** * An MBean representing the Openfire server itself. * * @author Kees Jan Koster <kjkoster@kjkoster.org> */ public class Openfire implements OpenfireMBean { /** * @see com.javamonitor.openfire.mbeans.OpenfireMBean#getVersion() */ public String getVersion() { return XMPPServer.getInstance().getServerInfo().getVersion() .getVersionString(); } private static final Integer XMPP_CLIENT_PORT = 5222; /** * @see com.javamonitor.openfire.mbeans.OpenfireMBean#getLowestPort() */ public Integer getLowestPort() { int slept = 0; Integer lowestPort = null; do { lowestPort = findLowestPort(); if (XMPP_CLIENT_PORT.equals(lowestPort)) { // this is extremely likely to be correct, so we are done return lowestPort; } try { Thread.sleep(1000L); } catch (InterruptedException e) { // won't happen... } } while (slept++ < 30); return lowestPort; } /** * Find the lowest port number, as the server stands now. * * @return The lowest known port number, or <code>null</code> if no ports * were opened yet. */ private Integer findLowestPort() { int lowestClientPort = Integer.MAX_VALUE; int lowestPort = Integer.MAX_VALUE; for (final ServerPort port : XMPPServer.getInstance() .getConnectionManager().getPorts()) { final int number = port.getPort(); if (number < lowestPort) { lowestPort = number; } if (ServerPort.Type.client.equals(port.getType()) && number < lowestClientPort) { lowestClientPort = number; } } if (lowestClientPort != Integer.MAX_VALUE) { return lowestClientPort; } else if (lowestPort != Integer.MAX_VALUE) { return lowestPort; } return null; } /** * Start collecting data. */ public void start() { // nothing to do... } /** * Stop collecting data. */ public void stop() { // nothing to do... } }