package com.javamonitor.mbeans;
import static com.javamonitor.JmxHelper.objectNameBase;
import java.lang.reflect.InvocationTargetException;
import java.security.Security;
/**
* An implementation of the DNS cache policy MBean interface for Sun JVM's.
*
* @author Kees Jan Koster <kjkoster@kjkoster.org>
*/
public class DNSCachePolicy implements DNSCachePolicyMBean {
/**
* The object name for the threading helper mbean.
*/
public static final String objectName = objectNameBase + "DNSCachePolicy";
private static final String POLICY = "sun.net.InetAddressCachePolicy";
/**
* @see com.javamonitor.mbeans.DNSCachePolicyMBean#getCacheSeconds()
*/
@SuppressWarnings("unchecked")
public int getCacheSeconds() throws ClassNotFoundException,
IllegalAccessException, InvocationTargetException,
NoSuchMethodException {
final Class policy = Class.forName(POLICY);
final Object returnValue = policy.getMethod("get", (Class[]) null)
.invoke(null, (Object[]) null);
final Integer seconds = (Integer) returnValue;
return seconds.intValue();
}
/**
* @see com.javamonitor.mbeans.DNSCachePolicyMBean#getCacheNegativeSeconds()
*/
@SuppressWarnings("unchecked")
public int getCacheNegativeSeconds() throws ClassNotFoundException,
IllegalAccessException, InvocationTargetException,
NoSuchMethodException {
final Class policy = Class.forName(POLICY);
final Object returnValue = policy.getMethod("getNegative",
(Class[]) null).invoke(null, (Object[]) null);
final Integer seconds = (Integer) returnValue;
return seconds.intValue();
}
private static final String DEFAULT = "default";
private static final String SECURITY = "security";
private static final String SYSTEM = "system";
private static final String BOTH = "both";
private static final String SECURITY_TTL = "networkaddress.cache.ttl";
private static final String SYSTEM_TTL = "sun.net.inetaddr.ttl";
private static final String SECURITY_NEGATIVE_TTL = "networkaddress.cache.negative.ttl";
private static final String SYSTEM_NEGATIVE_TTL = "sun.net.inetaddr.negative.ttl";
/**
* @see com.javamonitor.mbeans.DNSCachePolicyMBean#getCacheTweakedFrom()
*/
public String getCacheTweakedFrom() {
if (Security.getProperty(SECURITY_TTL) != null) {
if (System.getProperty(SYSTEM_TTL) != null) {
return BOTH;
}
return SECURITY;
}
if (System.getProperty(SYSTEM_TTL) != null) {
return SYSTEM;
}
return DEFAULT;
}
/**
* @see com.javamonitor.mbeans.DNSCachePolicyMBean#getCacheNegativeTweakedFrom()
*/
public String getCacheNegativeTweakedFrom() {
if (Security.getProperty(SECURITY_NEGATIVE_TTL) != null) {
if (System.getProperty(SYSTEM_NEGATIVE_TTL) != null) {
return BOTH;
}
return SECURITY;
}
if (System.getProperty(SYSTEM_NEGATIVE_TTL) != null) {
return SYSTEM;
}
return DEFAULT;
}
}