package jef.tools.jmx; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.lang.management.MemoryUsage; import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.concurrent.atomic.AtomicLong; import javax.management.NotificationBroadcasterSupport; import jef.tools.StringUtils; import jef.tools.reflect.ClassLoaderUtil; public final class JefMonitor extends NotificationBroadcasterSupport implements JefMonitorMBean { static JefMonitor monitor; private AtomicLong sequence=new AtomicLong(); private MemoryMXBean m= ManagementFactory.getMemoryMXBean(); private static String toStr(MemoryUsage m){ StringBuilder sb=new StringBuilder(64); sb.append("-Xms").append(StringUtils.formatSize(m.getInit())).append(' '); sb.append("-Xmx").append(StringUtils.formatSize(m.getMax())).append(' '); sb.append("Committed:").append(StringUtils.formatSize(m.getCommitted())).append(' '); sb.append("Used:").append(StringUtils.formatSize(m.getUsed())); return sb.toString(); } public String codeSource(String className) { Class<?> c; try { c = Class.forName(className); } catch (ClassNotFoundException t) { t.printStackTrace(); return "Not Found."; } try { URL source = ClassLoaderUtil.getCodeSource(c); if (source == null) { return "No Source. May be in JRE."; } return source.toString(); } catch (Throwable t) { t.printStackTrace(); String msg = t.getClass().getSimpleName() + ":" + t.getMessage(); return msg; } } public Map<String,String> getSystemProperties(){ Map<String,String> map=new HashMap<String,String>(); for(Entry<?,?> e:System.getProperties().entrySet()){ map.put(String.valueOf(e.getKey()), String.valueOf(e.getValue())); } return map; } private String serverName=null; public String getServerName() { if (serverName==null){ Properties p=System.getProperties(); if (p.containsKey("com.bes.instanceName")){ serverName=p.getProperty("com.bes.instanceName"); }else if (p.containsKey("weblogic.Name")){ serverName=p.getProperty("weblogic.Name"); }else if (p.containsKey("jef.hostName")){ serverName=p.getProperty("jef.hostName"); } } return serverName; } public static JefMonitor getInstance() { if(monitor==null)monitor=new JefMonitor(); return monitor; } }