package jef.tools.jmx;
import java.lang.management.ManagementFactory;
import java.util.List;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import jef.common.log.LogUtil;
public class JefMonitorRegister {
// private static HtmlAdaptorServer server;
public static boolean isJmxEnable(){
return !"false".equals(System.getProperty("enable.jmx"));
}
public static void registeJefDefault() {
if(isJmxEnable() && System.getProperty("jef.jmx.registed")==null){
JefMonitor mm = JefMonitor.getInstance();
registe(null,mm);
}
}
public static synchronized void registe(String path,Object mxBean){
System.setProperty("jef.jmx.registed","true");
try{
List<MBeanServer> servers = MBeanServerFactory.findMBeanServer(null);
MBeanServer s;
if (servers.isEmpty()) {
s = ManagementFactory.getPlatformMBeanServer();
} else {
s = servers.get(0);
}
String clsName=mxBean.getClass().getSimpleName();
String name=path==null?clsName+":name=default":path+",objectname="+clsName;
ObjectName objName = new ObjectName(name);
s.registerMBean(mxBean, objName);
// try{
// if(Class.forName("com.sun.jdmk.comm.HtmlAdaptorServer")!=null){
// processHtmlAdaptor(s);
// }
// }catch(ClassNotFoundException e){
// }
}catch(Throwable t){
System.out.println("MBean Regist error!");
t.printStackTrace();
}
}
/*
private static void processHtmlAdaptor(MBeanServer s) throws Exception {
//如果环境变量禁止了,那么就禁用
//如果是在复杂的启动环境里,(认为是在某个Java容器中,那么也禁用)
if(JefMonitorRegister.class.getClassLoader()!=ClassLoader.getSystemClassLoader() && !"1".equals(System.getenv("USE_JMX_HTTP"))){
return;
}
if(server==null){
int port=ProcessUtil.getFreePort();
server = new HtmlAdaptorServer();
ObjectName adapterName = new ObjectName("HttpAgent:name=jef-jmx,port="+port);
server.setPort(port);
String password=RandomStringUtils.random(5);
AuthInfo authInfo=new AuthInfo("admin",password);
server.addUserAuthenticationInfo(authInfo);
s.registerMBean(server, adapterName);
ThreadUtils.doTask(server);
TripleDES t = new TripleDES();
String passwordText = t.cipher2("781296-5e32-89122".getBytes("US-ASCII"), password);
//p1就是端口, p2就是密码用3DES加密后的密文,这里故意用p1和p2的名称,目的是让人看不太懂。防止有人破解后用JMX搞破坏
LogUtil.info("The JMX Agent was started at p1="+port+" p2="+passwordText);
}
}
*/
public static void unregiste(String path,Object mxBean){
try{
List<MBeanServer> servers = MBeanServerFactory.findMBeanServer(null);
MBeanServer s;
if (servers.isEmpty()) {
s = ManagementFactory.getPlatformMBeanServer();
} else {
s = servers.get(0);
}
if(mxBean==null){
return;
}
String clsName=mxBean.getClass().getSimpleName();
String name=path==null?clsName+":name=default":path+",objectname="+clsName;
ObjectName objName = new ObjectName(name);
s.unregisterMBean(objName);
}catch(Throwable t){
LogUtil.exception("MBean Regist error!", t);
}
}
}