mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
git-svn-id: http://code.alibabatech.com/svn/druid/trunk@10 b9813039-fb51-4c41-a8b9-e21c2acb5095
103 lines
3.3 KiB
Java
103 lines
3.3 KiB
Java
/*
|
|
* Copyright 2011 Alibaba Group.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package com.alibaba.druid.util;
|
|
|
|
import java.io.PrintWriter;
|
|
import java.io.StringWriter;
|
|
import java.lang.management.ManagementFactory;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import javax.management.InstanceAlreadyExistsException;
|
|
import javax.management.JMException;
|
|
import javax.management.MBeanServer;
|
|
import javax.management.ObjectName;
|
|
import javax.management.openmbean.CompositeData;
|
|
import javax.management.openmbean.CompositeDataSupport;
|
|
import javax.management.openmbean.CompositeType;
|
|
import javax.management.openmbean.OpenType;
|
|
import javax.management.openmbean.SimpleType;
|
|
|
|
/**
|
|
*
|
|
* @author wenshao<szujobs@hotmail.com>
|
|
*
|
|
*/
|
|
public final class JMXUtils {
|
|
public static ObjectName register(String name, Object mbean) {
|
|
try {
|
|
ObjectName objectName = new ObjectName(name);
|
|
|
|
MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
|
|
|
|
try {
|
|
mbeanServer.registerMBean(mbean, objectName);
|
|
} catch (InstanceAlreadyExistsException ex) {
|
|
mbeanServer.unregisterMBean(objectName);
|
|
mbeanServer.registerMBean(mbean, objectName);
|
|
}
|
|
|
|
return objectName;
|
|
} catch (JMException e) {
|
|
throw new IllegalArgumentException(name, e);
|
|
}
|
|
}
|
|
|
|
public static void unregister(String name) {
|
|
try {
|
|
MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
|
|
|
|
mbeanServer.unregisterMBean(new ObjectName(name));
|
|
} catch (JMException e) {
|
|
throw new IllegalArgumentException(name, e);
|
|
}
|
|
|
|
}
|
|
|
|
private static final String[] THROWABLE_COMPOSITE_INDEX_NAMES = { "message", "class", "stackTrace" };
|
|
private static final String[] THROWABLE_COMPOSITE_INDEX_DESCRIPTIONS = { "message", "class", "stackTrace" };
|
|
private static final OpenType<?>[] THROWABLE_COMPOSITE_INDEX_TYPES = new OpenType<?>[] { SimpleType.STRING, SimpleType.STRING, SimpleType.STRING };
|
|
|
|
private static CompositeType THROWABLE_COMPOSITE_TYPE = null;
|
|
|
|
public static CompositeType getThrowableCompositeType() throws JMException {
|
|
if (THROWABLE_COMPOSITE_TYPE == null) {
|
|
THROWABLE_COMPOSITE_TYPE = new CompositeType("Throwable", "Throwable", THROWABLE_COMPOSITE_INDEX_NAMES, THROWABLE_COMPOSITE_INDEX_DESCRIPTIONS,
|
|
THROWABLE_COMPOSITE_INDEX_TYPES);
|
|
}
|
|
|
|
return THROWABLE_COMPOSITE_TYPE;
|
|
}
|
|
|
|
public static CompositeData getErrorCompositeData(Throwable error) throws JMException {
|
|
if (error == null) {
|
|
return null;
|
|
}
|
|
|
|
Map<String, Object> map = new HashMap<String, Object>();
|
|
|
|
map.put("class", error.getClass().getName());
|
|
map.put("message", error.getMessage());
|
|
|
|
StringWriter buf = new StringWriter();
|
|
error.printStackTrace(new PrintWriter(buf));
|
|
|
|
map.put("stackTrace", buf.toString());
|
|
|
|
return new CompositeDataSupport(getThrowableCompositeType(), map);
|
|
}
|
|
}
|