/*
* @(#)DynamicMetaDataImpl.java 1.29 05/05/27
*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.sun.jmx.mbeanserver;
// java import
import java.util.Iterator;
import java.io.PrintWriter;
import java.io.StringWriter;
// RI import
import javax.management.* ;
import com.sun.jmx.trace.Trace;
/**
* The DynamicMetaDataImpl class provides local access to the metadata
* service in an agent.
* The DynamicMetaDataImpl only handles DynamicMBeans.
*
* @since 1.5
* @since.unbundled JMX RI 1.2
*/
class DynamicMetaDataImpl extends BaseMetaDataImpl {
/** The name of this class to be used for tracing */
private final static String dbgTag = "DynamicMetaDataImpl";
/**
* Creates a Metadata Service.
*/
public DynamicMetaDataImpl() {
// ------------------------------
// ------------------------------
}
/**
* This methods tests if the MBean is JMX compliant
*/
public void testCompliance(Class c)
throws NotCompliantMBeanException {
// ------------------------------
// ------------------------------
if (DynamicMBean.class.isAssignableFrom(c)) return;
throw new NotCompliantMBeanException(
"Only DynamicMBeans are supported by this implementation");
}
//---------------------------------------------------------------------
//
// From the MetaData interface
//
//---------------------------------------------------------------------
public MBeanInfo getMBeanInfo(Object moi)
throws IntrospectionException {
try {
return (MBeanInfo)
((javax.management.DynamicMBean)moi).getMBeanInfo();
} catch (RuntimeMBeanException r) {
throw r;
} catch (RuntimeErrorException r) {
throw r;
} catch (RuntimeException r) {
debugX("getMBeanInfo",r);
throw new RuntimeMBeanException((RuntimeException)r,
"Runtime Exception thrown by getMBeanInfo method of Dynamic MBean");
} catch (Error e ) {
debugX("getMBeanInfo",e);
throw new RuntimeErrorException((Error)e,
"Error thrown by getMBeanInfo method of Dynamic MBean");
}
}
public Object getAttribute(Object instance, String attribute)
throws MBeanException, AttributeNotFoundException,
ReflectionException {
if (attribute == null) {
final RuntimeException r =
new IllegalArgumentException("Attribute name cannot be null");
throw new RuntimeOperationsException(r,
"Exception occured trying to invoke the getter on the MBean");
}
try {
return ((javax.management.DynamicMBean)instance).
getAttribute(attribute);
} catch (RuntimeOperationsException r) {
throw r;
} catch (RuntimeErrorException r) {
throw r;
} catch (RuntimeException e) {
debugX("getAttribute",e);
throw new RuntimeMBeanException(e, "RuntimeException" +
" thrown by the getAttribute method of the DynamicMBean" +
" for the attribute " + attribute);
} catch (Error e) {
debugX("getAttribute",e);
throw new RuntimeErrorException((Error)e, "Error" +
" thrown by the getAttribute method of the DynamicMBean "+
" for the attribute " + attribute);
}
}
public AttributeList getAttributes(Object instance, String[] attributes)
throws ReflectionException {
if (attributes == null) {
throw new RuntimeOperationsException(new
IllegalArgumentException("Attributes cannot be null"),
"Exception occured trying to invoke the getter on the MBean");
}
try {
return ((javax.management.DynamicMBean)instance).
getAttributes(attributes);
} catch (RuntimeOperationsException r) {
throw r;
} catch (RuntimeErrorException r) {
throw r;
} catch (RuntimeException e) {
debugX("getAttributes",e);
throw new RuntimeOperationsException(e, "RuntimeException" +
" thrown by the getAttributes method of the DynamicMBean");
} catch (Error e) {
debugX("getAttributes",e);
throw new RuntimeErrorException((Error)e, "Error" +
" thrown by the getAttributes method of the DynamicMBean");
}
}
public AttributeList setAttributes(Object instance,
AttributeList attributes)
throws ReflectionException {
try {
return ((javax.management.DynamicMBean)instance).
setAttributes(attributes);
} catch (RuntimeOperationsException r) {
throw r;
} catch (RuntimeErrorException r) {
throw r;
} catch (RuntimeException e) {
debugX("setAttributes",e);
throw new RuntimeOperationsException(e,
"RuntimeException thrown by the setAttributes " +
"method of the Dynamic MBean");
} catch (Error e) {
debugX("setAttributes",e);
throw new RuntimeErrorException((Error)e,
"Error thrown by the setAttributes " +
"method of the Dynamic MBean");
}
}
public Object setAttribute(Object instance, Attribute attribute)
throws AttributeNotFoundException, InvalidAttributeValueException,
MBeanException, ReflectionException {
if (attribute == null) {
final RuntimeException r =
new IllegalArgumentException("Attribute name cannot be null");
throw new RuntimeOperationsException(r,
"Exception occured trying to invoke the setter on the MBean");
}
try {
((javax.management.DynamicMBean)instance).
setAttribute(attribute);
return attribute.getValue();
} catch (RuntimeOperationsException r) {
throw r;
} catch (RuntimeErrorException r) {
throw r;
} catch (RuntimeException e) {
debugX("setAttribute",e);
throw new RuntimeMBeanException(e,
"RuntimeException thrown by the setAttribute " +
attribute + "method of the Dynamic MBean");
} catch (Error e) {
debugX("setAttribute",e);
throw new RuntimeErrorException((Error)e,
"Error thrown by the setAttribute " + attribute +
"method of the Dynamic MBean");
}
}
public Object invoke(Object instance, String operationName,
Object params[], String signature[])
throws MBeanException, ReflectionException {
if (operationName == null) {
final RuntimeException r =
new IllegalArgumentException("Operation name cannot be null");
throw new RuntimeOperationsException(r,
"Exception occured trying to invoke the operation on the MBean");
}
try {
return (((javax.management.DynamicMBean)instance).
invoke(operationName, params, signature));
} catch (ReflectionException e) {
debugX("invoke",e);
throw e;
} catch (MBeanException e) {
debugX("invoke",e);
throw e;
} catch (RuntimeOperationsException r) {
throw r;
} catch (RuntimeErrorException r) {
throw r;
} catch (RuntimeException e) {
debugX("invoke",e);
throw new RuntimeMBeanException(e, "RuntimeException" +
" thrown by the invoke method of the Dynamic MBean");
} catch (Error e) {
debugX("invoke",e);
throw new RuntimeErrorException((Error)e, "Error" +
" thrown by the invoke method of the Dynamic MBean");
}
}
// TRACES & DEBUG
//---------------
private static boolean isTraceOn() {
return Trace.isSelected(Trace.LEVEL_TRACE, Trace.INFO_MBEANSERVER);
}
private static void trace(String clz, String func, String info) {
Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MBEANSERVER, clz, func, info);
}
private static void trace(String func, String info) {
trace(dbgTag, func, info);
}
private static boolean isDebugOn() {
return Trace.isSelected(Trace.LEVEL_DEBUG, Trace.INFO_MBEANSERVER);
}
private static void debug(String clz, String func, String info) {
Trace.send(Trace.LEVEL_DEBUG, Trace.INFO_MBEANSERVER, clz, func, info);
}
private static void debug(String func, String info) {
debug(dbgTag, func, info);
}
private static void debugX(String func,Throwable e) {
if (isDebugOn()) {
final StringWriter s = new StringWriter();
e.printStackTrace(new PrintWriter(s));
final String stack = s.toString();
debug(dbgTag,func,"Exception caught in "+ func+"(): "+e);
debug(dbgTag,func,stack);
// java.lang.System.err.println("**** Exception caught in "+
// func+"(): "+e);
// java.lang.System.err.println(stack);
}
}
}
|