Получить имя домена GlassFish2
Вопрос
Можно ли получить название текущего домена в GlassFish V2?
У меня есть код, как:
MemoryMXBean bean = ManagementFactory.getMemoryMXBean();
if (bean != null) {
MemoryUsage usage = bean.getNonHeapMemoryUsage();
int current = (int) ((double) usage.getUsed() / usage.getMax() * 100);
ch.log( Level.INFO, "Memory usage : (non heap) " + usage + " -- "+current+"% (limit:"+THRESHOLD+"%)");
if (current > THRESHOLD) {
//send email
}
которые будут отправлять нам электронное письмо, когда Appserver собирается сбой (исключение Permgen Space); Но у нас есть 3 appserver работает, поэтому доменное имя будет действительно полезным ... Любая идея?
Спасибо
Решение 3
Вы можете сделать это таким образом:
MBeanServerConnection serv;
if (hostname != null) {
//remote connection
JMXServiceURL u = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + hostname + "/jmxrmi");
String[] credentials = new String[]{"admin", "adminadmin"};
Map<String, String[]> environment = new LinkedHashMap<String, String[]>();
environment.put("jmx.remote.credentials", credentials);
JMXConnector c = JMXConnectorFactory.connect(u, environment);
serv = c.getMBeanServerConnection();
} else {
//local connection
serv = ManagementFactory.getPlatformMBeanServer();
}
//connect to AMX
DomainRoot dRoot = ProxyFactory.getInstance(serv).getDomainRoot(true) ;
//get the Administrative domain name in the Domain Configuration
Map<String, String> map = dRoot.getDomainConfig().getProperties() ;
System.out.println(map.get("administrative.domain.name"));
с участием hostname
равняться "host:port"
, или null
Если вы хотите подключить локальный JVM
Другие советы
Вы можете использовать Amx. Чтобы получить доменное имя. Это доступно от Доменroot..getAppserverdomainName ().
Это не самое красивое решение, но это взломать:
String dirName = (new File( ".." )).getCanonicalPath();
int dirNameIdx = dirName.lastIndexOf( File.separator );
if (dirNameIdx != -1)
APPSERVER = dirName.substring( dirNameIdx + 1 );
ch.log( Level.INFO, "Memory usage: Appserver name: " + APPSERVER );
}
при условии, что рабочий каталог ... / Domains / Domain / Config
Здание на ответе Кевина, если вы просто хотите использовать JMX (не полагаясь на библиотеки AMX), просто используя метод GetPropertyValue на J2EDOMAIN MBEAN.
MBeanServerConnection serv;
//remote connection
JMXServiceURL u = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + hostname + "/jmxrmi");
String[] credentials = new String[]{"admin", "adminadmin"};
Map<String, String[]> environment = new LinkedHashMap<String, String[]>();
environment.put("jmx.remote.credentials", credentials);
JMXConnector c = JMXConnectorFactory.connect(u, environment);
serv = c.getMBeanServerConnection();
String domainName = (String) mbsc.invoke(new ObjectName("com.sun.appserv:j2eeType=J2EEDomain,name=com.sun.appserv,category=runtime"), "getPropertyValue", new String[] {"administrative.domain.name"}, new Object[] {"java.lang.String"});
Вот действительно простой способ, которым мы использовали
db.getHISTORICAL_MEMORY_USAGE().setDOMAIN( System.getProperty( "domain.name" ) );
db.getHISTORICAL_MEMORY_USAGE().setSERVER( System.getProperty( "com.sun.aas.hostName" ) );