/*
* JBoss, the OpenSource J2EE webOS
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package javax.management.modelmbean;
import java.lang.reflect.Constructor;
import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.AttributeChangeNotification;
import javax.management.Notification;
import javax.management.NotificationListener;
import javax.management.NotificationFilter;
import javax.management.MBeanInfo;
import javax.management.MBeanNotificationInfo;
import javax.management.MBeanRegistration;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.AttributeNotFoundException;
import javax.management.InvalidAttributeValueException;
import javax.management.MBeanException;
import javax.management.ReflectionException;
import javax.management.RuntimeOperationsException;
import javax.management.ListenerNotFoundException;
import javax.management.InstanceNotFoundException;
import org.jboss.mx.server.ServerConstants;
/**
* Mandatory Model MBean implementation. The Model MBean implementation
* can be configured by setting a jbossmx.required.modelmbean.class
* system property.
*
* @see javax.management.modelmbean.ModelMBean
*
* @author Juha Lindfors.
* @version $Revision: 1.2.8.2 $
*
*/
public class RequiredModelMBean
implements ModelMBean, MBeanRegistration
{
// Attributes ----------------------------------------------------
private ModelMBean delegate = null;
private MBeanRegistration registrationInterface = null;
// Constructors --------------------------------------------------
public RequiredModelMBean() throws MBeanException, RuntimeOperationsException
{
ClassLoader cl = Thread.currentThread().getContextClassLoader();
String className = System.getProperty(
ServerConstants.REQUIRED_MODELMBEAN_CLASS_PROPERTY,
ServerConstants.DEFAULT_REQUIRED_MODELMBEAN_CLASS
);
try
{
Class modelMBean = cl.loadClass(className);
delegate = (ModelMBean)modelMBean.newInstance();
if (delegate instanceof MBeanRegistration)
registrationInterface = (MBeanRegistration)delegate;
}
catch (ClassNotFoundException e)
{
throw new Error("Cannot instantiate model mbean class. Class " + className + " not found.");
}
catch (ClassCastException e)
{
throw new Error("Cannot instantiate model mbean class. The target class is not an instance of ModelMBean interface.");
}
catch (Exception e)
{
throw new Error("Cannot instantiate model mbean class " + className + " with default constructor: " + e.getMessage());
}
}
public RequiredModelMBean(ModelMBeanInfo info) throws MBeanException, RuntimeOperationsException
{
ClassLoader cl = Thread.currentThread().getContextClassLoader();
String className = System.getProperty(
ServerConstants.REQUIRED_MODELMBEAN_CLASS_PROPERTY,
ServerConstants.DEFAULT_REQUIRED_MODELMBEAN_CLASS
);
try
{
Class modelMBean = cl.loadClass(className);
Constructor constructor = modelMBean.getConstructor(new Class[] { ModelMBeanInfo.class });
delegate = (ModelMBean)constructor.newInstance(new Object[] { info });
if (delegate instanceof MBeanRegistration)
registrationInterface = (MBeanRegistration)delegate;
}
catch (ClassNotFoundException e)
{
throw new Error("Cannot instantiate model mbean class. Class " + className + " not found.");
}
catch (ClassCastException e)
{
throw new Error("Cannot instantiate model mbean class. The target class is not an instance of ModelMBean interface.");
}
catch (Exception e)
{
throw new Error("Cannot instantiate model mbean class " + className + ": " + e.toString());
}
}
// ModelMBean implementation -------------------------------------
public void setModelMBeanInfo(ModelMBeanInfo info) throws MBeanException, RuntimeOperationsException
{
delegate.setModelMBeanInfo(info);
}
public void setManagedResource(Object mr, String mr_type)
throws MBeanException, RuntimeOperationsException, InstanceNotFoundException, InvalidTargetObjectTypeException
{
delegate.setManagedResource(mr, mr_type);
}
// PersistentMBean implementation --------------------------------
public void load() throws MBeanException, RuntimeOperationsException, InstanceNotFoundException
{
delegate.load();
}
public void store() throws MBeanException, RuntimeOperationsException, InstanceNotFoundException
{
delegate.store();
}
// DynamicMBean implementation -----------------------------------
public MBeanInfo getMBeanInfo()
{
return delegate.getMBeanInfo();
}
public Object invoke(String opName, Object[] opArgs, String[] sig)
throws MBeanException, ReflectionException
{
return delegate.invoke(opName, opArgs, sig);
}
public Object getAttribute(String attrName)
throws AttributeNotFoundException, MBeanException, ReflectionException
{
return delegate.getAttribute(attrName);
}
public AttributeList getAttributes(String[] attrNames) {
return delegate.getAttributes(attrNames);
}
public void setAttribute(Attribute attribute) throws AttributeNotFoundException,
InvalidAttributeValueException, MBeanException, ReflectionException
{
delegate.setAttribute(attribute);
}
public AttributeList setAttributes(AttributeList attributes)
{
return delegate.setAttributes(attributes);
}
// ModelMBeanNotificationBroadcaster implementation --------------
public void addNotificationListener(NotificationListener inlistener, NotificationFilter infilter, Object inhandback)
throws IllegalArgumentException
{
delegate.addNotificationListener(inlistener, infilter, inhandback);
}
public void removeNotificationListener(NotificationListener inlistener) throws ListenerNotFoundException
{
delegate.removeNotificationListener(inlistener);
}
public void sendNotification(Notification ntfyObj) throws MBeanException, RuntimeOperationsException
{
delegate.sendNotification(ntfyObj);
}
public void sendNotification(String ntfyText) throws MBeanException, RuntimeOperationsException
{
delegate.sendNotification(ntfyText);
}
public MBeanNotificationInfo[] getNotificationInfo() {
return delegate.getNotificationInfo();
}
public void addAttributeChangeNotificationListener(NotificationListener inlistener,
String inAttributeName, Object inhandback) throws MBeanException, RuntimeOperationsException, IllegalArgumentException
{
delegate.addAttributeChangeNotificationListener(inlistener, inAttributeName, inhandback);
}
public void removeAttributeChangeNotificationListener(NotificationListener inlistener, String inAttributeName)
throws MBeanException, RuntimeOperationsException, ListenerNotFoundException
{
delegate.removeAttributeChangeNotificationListener(inlistener, inAttributeName);
}
public void sendAttributeChangeNotification(AttributeChangeNotification ntfyObj) throws MBeanException, RuntimeOperationsException
{
delegate.sendAttributeChangeNotification(ntfyObj);
}
public void sendAttributeChangeNotification(Attribute inOldVal, Attribute inNewVal)
throws MBeanException, RuntimeOperationsException
{
delegate.sendAttributeChangeNotification(inOldVal, inNewVal);
}
// MBeanRegistration implementation ------------------------------
public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception
{
if (registrationInterface != null)
return registrationInterface.preRegister(server, name);
return name;
}
public void postRegister(Boolean registrationDone)
{
if (registrationInterface != null)
registrationInterface.postRegister(registrationDone);
}
public void preDeregister() throws Exception
{
if (registrationInterface != null)
registrationInterface.preDeregister();
}
public void postDeregister()
{
if (registrationInterface != null)
registrationInterface.postDeregister();
}
}