下面列出了javax.management.openmbean.CompositeData#get ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
Object fromCompositeData(CompositeData cd,
String[] itemNames,
MXBeanMapping[] converters)
throws InvalidObjectException {
Object o;
try {
final Class<?> targetClass = getTargetClass();
ReflectUtil.checkPackageAccess(targetClass);
o = targetClass.newInstance();
for (int i = 0; i < itemNames.length; i++) {
if (cd.containsKey(itemNames[i])) {
Object openItem = cd.get(itemNames[i]);
Object javaItem =
converters[i].fromOpenValue(openItem);
MethodUtil.invoke(setters[i], o, new Object[] {javaItem});
}
}
} catch (Exception e) {
throw invalidObjectException(e);
}
return o;
}
public static MonitorInfo from(CompositeData cd) {
try {
CompositeData stecd = (CompositeData) cd.get("lockedStackFrame");
StackTraceElement ste = new StackTraceElement(
(String) stecd.get("className"),
(String) stecd.get("methodName"),
(String) stecd.get("fileName"),
(Integer) stecd.get("lineNumber"));
return new MonitorInfo(
(String) cd.get("className"),
(Integer) cd.get("identityHashCode"),
(Integer) cd.get("lockedStackDepth"),
ste);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
protected static StringBuffer recurseCompositeData(StringBuffer buffer, String indent, String name,
CompositeData data) {
indent = addNameToBuffer(buffer, indent, name);
for (Iterator i = data.getCompositeType().keySet().iterator(); i.hasNext();) {
String key = (String) i.next();
Object o = data.get(key);
if (o instanceof CompositeData) {
recurseCompositeData(buffer, indent + " ", key, (CompositeData) o);
} else if (o instanceof TabularData) {
recurseTabularData(buffer, indent, key, (TabularData) o);
} else {
buffer.append(indent);
buffer.append(key);
buffer.append(": ");
buffer.append(o);
buffer.append("\n");
}
}
return buffer;
}
Object fromCompositeData(CompositeData cd,
String[] itemNames,
MXBeanMapping[] converters)
throws InvalidObjectException {
Object o;
try {
final Class<?> targetClass = getTargetClass();
ReflectUtil.checkPackageAccess(targetClass);
o = targetClass.newInstance();
for (int i = 0; i < itemNames.length; i++) {
if (cd.containsKey(itemNames[i])) {
Object openItem = cd.get(itemNames[i]);
Object javaItem =
converters[i].fromOpenValue(openItem);
MethodUtil.invoke(setters[i], o, new Object[] {javaItem});
}
}
} catch (Exception e) {
throw invalidObjectException(e);
}
return o;
}
/**
* Allows for reconstruction via CompositeData.
*
* @param cd
* composite data
* @return Client class instance
*/
public static Client from(CompositeData cd) {
Client instance = null;
if (cd.containsKey("id")) {
String id = (String) cd.get("id");
instance = new Client(id, (Long) cd.get("creationTime"), null);
instance.setAttribute(PERMISSIONS, cd.get(PERMISSIONS));
}
if (cd.containsKey("attributes")) {
AttributeStore attrs = (AttributeStore) cd.get("attributes");
instance.setAttributes(attrs);
}
return instance;
}
public static Map<String, MemoryUsage>
getMemoryUsageAfterGc(CompositeData cd) {
try {
TabularData td = (TabularData) cd.get(MEMORY_USAGE_AFTER_GC);
//return (Map<String,MemoryUsage>)
return cast(memoryUsageMapType.toJavaTypeData(td));
} catch (InvalidObjectException | OpenDataException e) {
// Should never reach here
throw new AssertionError(e);
}
}
private ConfigurationInfo(CompositeData cd) {
this.settings = createMap(cd.get("settings"));
this.name = (String) cd.get("name");
this.label = (String) cd.get("label");
this.description = (String) cd.get("description");
this.provider = (String) cd.get("provider");
this.contents = (String) cd.get("contents");
}
public static Map<String, MemoryUsage>
getMemoryUsageBeforeGc(CompositeData cd) {
try {
TabularData td = (TabularData) cd.get(MEMORY_USAGE_BEFORE_GC);
return cast(memoryUsageMapType.toJavaTypeData(td));
} catch (InvalidObjectException | OpenDataException e) {
// Should never reach here
throw new AssertionError(e);
}
}
private RecordingInfo(CompositeData cd) {
id = (int) cd.get("id");
name = (String) cd.get("name");
state = (String) cd.get("state");
dumpOnExit = (boolean) cd.get("dumpOnExit");
size = (long) cd.get("size");
disk = (boolean) cd.get("disk");
maxAge = (Long) cd.get("maxAge");
maxSize = (Long) cd.get("maxSize");
startTime = (Long) cd.get("startTime");
stopTime = (Long) cd.get("stopTime");
destination = (String) cd.get("destination");
durationInSeconds = (long) cd.get("duration");
settings = new LinkedHashMap<>();
Object map = cd.get("settings");
if (map instanceof TabularData) {
TabularData td = (TabularData) map;
List<String> keyNames = td.getTabularType().getIndexNames();
int size = keyNames.size();
for (Object keys : td.keySet()) {
Object[] keyValues = ((List<?>) keys).toArray();
for (int i = 0; i < size; i++) {
String key = keyNames.get(i);
Object value = keyValues[i];
if (value instanceof String) {
settings.put(key, (String) value);
}
}
}
}
}
public static StackTraceElement getLockedStackFrame(CompositeData cd) {
CompositeData ste = (CompositeData) cd.get(LOCKED_STACK_FRAME);
if (ste != null) {
return StackTraceElementCompositeData.from(ste);
} else {
return null;
}
}
private SettingDescriptorInfo(CompositeData cd) {
this.name = (String) cd.get("name");
this.label = (String) cd.get("label");
this.description = (String) cd.get("description");
this.typeName = (String) cd.get("typeName");
this.defaultValue = (String) cd.get("defaultValue");
this.contentType = (String) cd.get("contentType");
}
public static Map<String, MemoryUsage>
getMemoryUsageAfterGc(CompositeData cd) {
try {
TabularData td = (TabularData) cd.get(MEMORY_USAGE_AFTER_GC);
//return (Map<String,MemoryUsage>)
return cast(memoryUsageMapType.toJavaTypeData(td));
} catch (InvalidObjectException | OpenDataException e) {
// Should never reach here
throw new AssertionError(e);
}
}
public static Map<String, MemoryUsage>
getMemoryUsageAfterGc(CompositeData cd) {
try {
TabularData td = (TabularData) cd.get(MEMORY_USAGE_AFTER_GC);
//return (Map<String,MemoryUsage>)
return cast(memoryUsageMapType.toJavaTypeData(td));
} catch (InvalidObjectException | OpenDataException e) {
// Should never reach here
throw new AssertionError(e);
}
}
public static StackTraceElement getLockedStackFrame(CompositeData cd) {
CompositeData ste = (CompositeData) cd.get(LOCKED_STACK_FRAME);
if (ste != null) {
return StackTraceElementCompositeData.from(ste);
} else {
return null;
}
}
public static int getInt(CompositeData cd, String itemName) {
if (cd == null)
throw new IllegalArgumentException("Null CompositeData");
return ((Integer) cd.get(itemName));
}
/** Validate if the input CompositeData has the expected
* CompositeType (i.e. contain all attributes with expected
* names and types).
*/
public static void validateCompositeData(CompositeData cd) {
if (cd == null) {
throw new NullPointerException("Null CompositeData");
}
CompositeType type = cd.getCompositeType();
boolean currentVersion = true;
if (!isTypeMatched(threadInfoCompositeType, type)) {
currentVersion = false;
// check if cd is an older version
if (!isTypeMatched(threadInfoV5CompositeType, type)) {
throw new IllegalArgumentException(
"Unexpected composite type for ThreadInfo");
}
}
CompositeData[] stackTraceData =
(CompositeData[]) cd.get(STACK_TRACE);
if (stackTraceData == null) {
throw new IllegalArgumentException(
"StackTraceElement[] is missing");
}
if (stackTraceData.length > 0) {
StackTraceElementCompositeData.validateCompositeData(stackTraceData[0]);
}
// validate v6 attributes
if (currentVersion) {
CompositeData li = (CompositeData) cd.get(LOCK_INFO);
if (li != null) {
if (!isTypeMatched(lockInfoCompositeType,
li.getCompositeType())) {
throw new IllegalArgumentException(
"Unexpected composite type for \"" +
LOCK_INFO + "\" attribute.");
}
}
CompositeData[] lms = (CompositeData[]) cd.get(LOCKED_MONITORS);
if (lms == null) {
throw new IllegalArgumentException("MonitorInfo[] is null");
}
if (lms.length > 0) {
MonitorInfoCompositeData.validateCompositeData(lms[0]);
}
CompositeData[] lsyncs = (CompositeData[]) cd.get(LOCKED_SYNCS);
if (lsyncs == null) {
throw new IllegalArgumentException("LockInfo[] is null");
}
if (lsyncs.length > 0) {
if (!isTypeMatched(lockInfoCompositeType,
lsyncs[0].getCompositeType())) {
throw new IllegalArgumentException(
"Unexpected composite type for \"" +
LOCKED_SYNCS + "\" attribute.");
}
}
}
}
public static void main(String[] args) throws Exception {
MBeanServer mbs = MBeanServerFactory.newMBeanServer();
ObjectName pointName = new ObjectName("a:type=Point");
PointMXBean pointmx = new PointImpl();
mbs.registerMBean(pointmx, pointName);
Point point = new Point(1, 2);
PointMXBean pointproxy =
JMX.newMXBeanProxy(mbs, pointName, PointMXBean.class);
Point point1 = pointproxy.identity(point);
if (point1.getX() != point.getX() || point1.getY() != point.getY())
throw new Exception("Point doesn't match");
System.out.println("Point test passed");
ObjectName evolveName = new ObjectName("a:type=Evolve");
EvolveMXBean evolvemx = new EvolveImpl();
mbs.registerMBean(evolvemx, evolveName);
Evolve evolve =
new Evolve(59, "tralala", Collections.singletonList("tiddly"));
EvolveMXBean evolveProxy =
JMX.newMXBeanProxy(mbs, evolveName, EvolveMXBean.class);
Evolve evolve1 = evolveProxy.identity(evolve);
if (evolve1.getOldInt() != evolve.getOldInt()
|| !evolve1.getNewString().equals(evolve.getNewString())
|| !evolve1.getNewerList().equals(evolve.getNewerList()))
throw new Exception("Evolve doesn't match");
System.out.println("Evolve test passed");
ObjectName evolvedName = new ObjectName("a:type=Evolved");
EvolveMXBean evolvedmx = new EvolveImpl();
mbs.registerMBean(evolvedmx, evolvedName);
CompositeType evolvedType =
new CompositeType("Evolved", "descr", new String[] {"oldInt"},
new String[] {"oldInt descr"},
new OpenType[] {SimpleType.INTEGER});
CompositeData evolvedData =
new CompositeDataSupport(evolvedType, new String[] {"oldInt"},
new Object[] {5});
CompositeData evolved1 = (CompositeData)
mbs.invoke(evolvedName, "identity", new Object[] {evolvedData},
new String[] {CompositeData.class.getName()});
if ((Integer) evolved1.get("oldInt") != 5
|| !evolved1.get("newString").equals("defaultString")
|| ((String[]) evolved1.get("newerList")).length != 0)
throw new Exception("Evolved doesn't match: " + evolved1);
System.out.println("Evolved test passed");
}
static boolean getBoolean(CompositeData cd, String itemName) {
if (cd == null)
throw new IllegalArgumentException("Null CompositeData");
return ((Boolean) cd.get(itemName));
}
/** Validate if the input CompositeData has the expected
* CompositeType (i.e. contain all attributes with expected
* names and types).
*/
public static void validateCompositeData(CompositeData cd) {
if (cd == null) {
throw new NullPointerException("Null CompositeData");
}
CompositeType type = cd.getCompositeType();
boolean currentVersion = true;
if (!isTypeMatched(threadInfoCompositeType, type)) {
currentVersion = false;
// check if cd is an older version
if (!isTypeMatched(threadInfoV5CompositeType, type)) {
throw new IllegalArgumentException(
"Unexpected composite type for ThreadInfo");
}
}
CompositeData[] stackTraceData =
(CompositeData[]) cd.get(STACK_TRACE);
if (stackTraceData == null) {
throw new IllegalArgumentException(
"StackTraceElement[] is missing");
}
if (stackTraceData.length > 0) {
StackTraceElementCompositeData.validateCompositeData(stackTraceData[0]);
}
// validate v6 attributes
if (currentVersion) {
CompositeData li = (CompositeData) cd.get(LOCK_INFO);
if (li != null) {
if (!isTypeMatched(lockInfoCompositeType,
li.getCompositeType())) {
throw new IllegalArgumentException(
"Unexpected composite type for \"" +
LOCK_INFO + "\" attribute.");
}
}
CompositeData[] lms = (CompositeData[]) cd.get(LOCKED_MONITORS);
if (lms == null) {
throw new IllegalArgumentException("MonitorInfo[] is null");
}
if (lms.length > 0) {
MonitorInfoCompositeData.validateCompositeData(lms[0]);
}
CompositeData[] lsyncs = (CompositeData[]) cd.get(LOCKED_SYNCS);
if (lsyncs == null) {
throw new IllegalArgumentException("LockInfo[] is null");
}
if (lsyncs.length > 0) {
if (!isTypeMatched(lockInfoCompositeType,
lsyncs[0].getCompositeType())) {
throw new IllegalArgumentException(
"Unexpected composite type for \"" +
LOCKED_SYNCS + "\" attribute.");
}
}
}
}
public static ExoticCompositeData from(CompositeData cd) {
String whatsit = (String) cd.get("whatsit");
if (!whatsit.startsWith("!"))
throw new IllegalArgumentException(whatsit);
return new ExoticCompositeData(whatsit.substring(1));
}