/* * @(#)MBeanInstantiator.java 1.25 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.sun.jmx.mbeanserver; import javax.management.*; import java.io.ObjectInputStream; /** * Contains methods for instantiating objects, finding the class given * its name and using different class loaders, deserializing objects * in the context of a given class loader. * * @since 1.5 * @since.unbundled JMX RI 1.2 */ public interface MBeanInstantiator { /** * This methods tests if the MBean class makes it possible to * instantiate an MBean of this class in the MBeanServer. * e.g. it must have a public constructor, be a concrete class... */ public void testCreation(Class c) throws NotCompliantMBeanException; /** * Loads the class with the specified name using this object's * Default Loader Repository. **/ public Class findClassWithDefaultLoaderRepository(String className) throws ReflectionException; /** * Return the Default Loader Repository used by this instantiator object. **/ public ModifiableClassLoaderRepository getClassLoaderRepository(); /** * Gets the class for the specified class name using the MBean * Interceptor's classloader */ public Class findClass(String className, ClassLoader loader) throws ReflectionException; /** * Gets the class for the specified class name using the specified * class loader */ public Class findClass(String className, ObjectName loaderName) throws ReflectionException, InstanceNotFoundException ; /** * Return an array of Class corresponding to the given signature, using * the specified class loader. */ public Class[] findSignatureClasses(String signature[], ClassLoader loader) throws ReflectionException; /** * De-serializes a byte array in the context of a classloader. * * @param loader the classloader to use for de-serialization * @param data The byte array to be de-sererialized. * * @return The de-serialized object stream. * * @exception OperationsException Any of the usual Input/Output related * exceptions. */ public ObjectInputStream deserialize(ClassLoader loader, byte[] data) throws OperationsException; /** * De-serializes a byte array in the context of a given MBean class loader. *

The class loader is the one that loaded the class with name * "className". *

The name of the class loader to be used for loading the specified * class is specified. If null, a default one has to be provided (for a * MBean Server, its own class loader will be used). * * @param className The name of the class whose class loader should * be used for the de-serialization. * @param data The byte array to be de-sererialized. * @param loaderName The name of the class loader to be used for loading * the specified class. If null, a default one has to be provided (for a * MBean Server, its own class loader will be used). * * @return The de-serialized object stream. * * @exception InstanceNotFoundException The specified class loader MBean is * not found. * @exception OperationsException Any of the usual Input/Output related * exceptions. * @exception ReflectionException The specified class could not be loaded * by the specified class loader. */ public ObjectInputStream deserialize(String className, ObjectName loaderName, byte[] data, ClassLoader loader) throws InstanceNotFoundException, OperationsException, ReflectionException; /** * Instantiates an object using the list of all class loaders registered * in the MBean Interceptor * (using its {@link javax.management.loading.ClassLoaderRepository}). *

The object's class should have a public constructor. *

It returns a reference to the newly created object. *

The newly created object is not registered in the MBean Interceptor. * * @param className The class name of the object to be instantiated. * * @return The newly instantiated object. * * @exception ReflectionException Wraps a * java.lang.ClassNotFoundException or the * java.lang.Exception that occurred when trying to invoke the * object's constructor. * @exception MBeanException The constructor of the object has thrown an * exception * @exception RuntimeOperationsException Wraps a * java.lang.IllegalArgumentException: the className passed in * parameter is null. */ public Object instantiate(String className) throws ReflectionException, MBeanException; /** * Instantiates an object using the class Loader specified by its * ObjectName. *

If the loader name is null, a default one has to be provided (for a * MBean Server, the ClassLoader that loaded it will be used). *

The object's class should have a public constructor. *

It returns a reference to the newly created object. *

The newly created object is not registered in the MBean Interceptor. * * @param className The class name of the MBean to be instantiated. * @param loaderName The object name of the class loader to be used. * * @return The newly instantiated object. * * @exception ReflectionException Wraps a * java.lang.ClassNotFoundException or the * java.lang.Exception that occurred when trying to invoke the * object's constructor. * @exception MBeanException The constructor of the object has thrown an * exception. * @exception InstanceNotFoundException The specified class loader is not * registered in the MBeanServerInterceptor. * @exception RuntimeOperationsException Wraps a * java.lang.IllegalArgumentException: the className passed in * parameter is null. */ public Object instantiate(String className, ObjectName loaderName, ClassLoader loader) throws ReflectionException, MBeanException, InstanceNotFoundException; /** * Instantiates an object using the list of all class loaders registered * in the MBean server * (using its {@link javax.management.loading.ClassLoaderRepository}). *

The object's class should have a public constructor. *

The call returns a reference to the newly created object. *

The newly created object is not registered in the MBean Interceptor. * * @param className The class name of the object to be instantiated. * @param params An array containing the parameters of the constructor to * be invoked. * @param signature An array containing the signature of the constructor to * be invoked. * * @return The newly instantiated object. * * @exception ReflectionException Wraps a * java.lang.ClassNotFoundException or the * java.lang.Exception that occurred when trying to invoke the * object's constructor. * @exception MBeanException The constructor of the object has thrown an * exception * @exception RuntimeOperationsException Wraps a * java.lang.IllegalArgumentException: the className passed in * parameter is null. */ public Object instantiate(String className, Object params[], String signature[], ClassLoader loader) throws ReflectionException, MBeanException ; /** * Instantiates an object. The class loader to be used is identified by its * object name. *

If the object name of the loader is null, a default has to be * provided (for example, for a MBean Server, the ClassLoader that loaded * it will be used). *

The object's class should have a public constructor. *

The call returns a reference to the newly created object. *

The newly created object is not registered in the MBean server. * * @param className The class name of the object to be instantiated. * @param params An array containing the parameters of the constructor to * be invoked. * @param signature An array containing the signature of the constructor to * be invoked. * @param loaderName The object name of the class loader to be used. * * @return The newly instantiated object. * * @exception ReflectionException Wraps a * java.lang.ClassNotFoundException or the * java.lang.Exception that occurred when trying to invoke the * object's constructor. * @exception MBeanException The constructor of the object has thrown an * exception * @exception InstanceNotFoundException The specified class loader is not * registered in the MBean Interceptor. * @exception RuntimeOperationsException Wraps a * java.lang.IllegalArgumentException: the className passed in * parameter is null. */ public Object instantiate(String className, ObjectName loaderName, Object params[], String signature[], ClassLoader loader) throws ReflectionException, MBeanException, InstanceNotFoundException; /** * Instantiates an object given its class, using its empty constructor. * The call returns a reference to the newly created object. */ public Object instantiate(Class theClass) throws ReflectionException, MBeanException; /** * Instantiates an object given its class, the parameters and signature of its constructor * The call returns a reference to the newly created object. */ public Object instantiate(Class theClass, Object params[], String signature[], ClassLoader loader) throws ReflectionException, MBeanException; }