package geniusweb.profilesserver;
import java.lang.management.ManagementFactory;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Set;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.Query;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* A central class containing the constants/configuration of the server.
*
* This class should is private to the server and should not be used by
* others. However servers that derive from this server can completely override
* this class to change the constants/configuration
*/
public class Constants {
private static transient ObjectMapper jackson; // cache
private static transient String hostport = ""; // cache
/**
*
* @return the object mapper, so that we can extend the objectmapper (with
* custom classes) centrally. Also allows us to cache the objectmapper
*/
public static ObjectMapper getJackson() {
if (jackson == null) {
jackson = new ObjectMapper();
}
return jackson;
}
/**
*
* @return a string like "127.0.1.1:8080" containing the server address on which
* this service is running.
* @throws UnknownHostException if we can not get the host ip
* @throws MalformedObjectNameException if we can not get the host ip
*/
public static String getIpAddressAndPort() throws UnknownHostException, MalformedObjectNameException {
synchronized (hostport) {
if (hostport.isEmpty()) {
MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
Set objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"),
Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
String host = InetAddress.getLocalHost().getHostAddress();
String port = objectNames.iterator().next().getKeyProperty("port");
hostport = host + ":" + port;
}
return hostport;
}
}
}