From: Adrian B. <ej...@us...> - 2004-05-28 20:12:07
|
User: ejort Date: 04/05/28 13:12:01 Modified: src/main/org/jboss/mx/server Tag: Branch_3_2 ServerConstants.java AbstractMBeanInvoker.java MBeanServerImpl.java Log: Backport of modifications and workaround for RI bug from head to allow jboss-3.2 to run with java 1.5 Revision Changes Path No revision No revision 1.14.2.7 +2 -2 jmx/src/main/org/jboss/mx/server/ServerConstants.java Index: ServerConstants.java =================================================================== RCS file: /cvsroot/jboss/jmx/src/main/org/jboss/mx/server/ServerConstants.java,v retrieving revision 1.14.2.6 retrieving revision 1.14.2.7 diff -u -r1.14.2.6 -r1.14.2.7 --- ServerConstants.java 17 Apr 2004 17:30:58 -0000 1.14.2.6 +++ ServerConstants.java 28 May 2004 20:11:58 -0000 1.14.2.7 @@ -18,7 +18,7 @@ * * @author <a href="mailto:ju...@jb...">Juha Lindfors</a>. * @author <a href="mailto:Adrian.Brock@HappeningTimes.com">Adrian Brock</a>. - * @version $Revision: 1.14.2.6 $ + * @version $Revision: 1.14.2.7 $ * */ public interface ServerConstants @@ -125,7 +125,7 @@ final static String DEFAULT_MBEAN_REGISTRY_CLASS = "org.jboss.mx.server.registry.BasicMBeanRegistry"; final static String MBEAN_SERVER_BUILDER_CLASS_PROPERTY = "javax.management.builder.initial"; - final static String DEFAULT_MBEAN_SERVER_BUILDER_CLASS = "javax.management.MBeanServerBuilder"; + final static String DEFAULT_MBEAN_SERVER_BUILDER_CLASS = "org.jboss.mx.server.MBeanServerBuilderImpl"; final static String OPTIMIZE_REFLECTED_DISPATCHER = "jbossmx.optimized.dispatcher"; 1.9.2.12 +3 -3 jmx/src/main/org/jboss/mx/server/AbstractMBeanInvoker.java Index: AbstractMBeanInvoker.java =================================================================== RCS file: /cvsroot/jboss/jmx/src/main/org/jboss/mx/server/AbstractMBeanInvoker.java,v retrieving revision 1.9.2.11 retrieving revision 1.9.2.12 diff -u -r1.9.2.11 -r1.9.2.12 --- AbstractMBeanInvoker.java 17 Apr 2004 17:30:58 -0000 1.9.2.11 +++ AbstractMBeanInvoker.java 28 May 2004 20:11:58 -0000 1.9.2.12 @@ -35,10 +35,10 @@ import javax.management.RuntimeMBeanException; import javax.management.RuntimeOperationsException; import javax.management.Descriptor; -import javax.management.modelmbean.ModelMBeanInfoSupport; import org.jboss.logging.Logger; import org.jboss.mx.server.registry.MBeanEntry; +import org.jboss.mx.modelmbean.JBossModelMBeanInfoSupport; import org.jboss.mx.modelmbean.ModelMBeanConstants; import org.jboss.util.TCLStack; @@ -47,7 +47,7 @@ * * @author <a href="mailto:ju...@jb...">Juha Lindfors</a>. * @author Sco...@jb... - * @version $Revision: 1.9.2.11 $ + * @version $Revision: 1.9.2.12 $ * */ public abstract class AbstractMBeanInvoker @@ -425,7 +425,7 @@ */ Descriptor attrDesc = invocation.getDescriptor(); ctx.setDescriptor(attrDesc); - ModelMBeanInfoSupport minfo = (ModelMBeanInfoSupport) info; + JBossModelMBeanInfoSupport minfo = (JBossModelMBeanInfoSupport) info; minfo.setDescriptor(attrDesc, ModelMBeanConstants.ATTRIBUTE_DESCRIPTOR); TCLStack.pop(); } 1.24.4.9 +58 -22 jmx/src/main/org/jboss/mx/server/MBeanServerImpl.java Index: MBeanServerImpl.java =================================================================== RCS file: /cvsroot/jboss/jmx/src/main/org/jboss/mx/server/MBeanServerImpl.java,v retrieving revision 1.24.4.8 retrieving revision 1.24.4.9 diff -u -r1.24.4.8 -r1.24.4.9 --- MBeanServerImpl.java 17 Apr 2004 17:30:58 -0000 1.24.4.8 +++ MBeanServerImpl.java 28 May 2004 20:11:58 -0000 1.24.4.9 @@ -48,19 +48,18 @@ import javax.management.RuntimeMBeanException; import javax.management.RuntimeOperationsException; import javax.management.loading.ClassLoaderRepository; -import javax.management.loading.DefaultLoaderRepository; import javax.management.modelmbean.DescriptorSupport; import javax.management.modelmbean.InvalidTargetObjectTypeException; import javax.management.modelmbean.ModelMBean; import javax.management.modelmbean.ModelMBeanAttributeInfo; import javax.management.modelmbean.ModelMBeanConstructorInfo; import javax.management.modelmbean.ModelMBeanInfo; -import javax.management.modelmbean.ModelMBeanInfoSupport; import javax.management.modelmbean.ModelMBeanNotificationInfo; import javax.management.modelmbean.ModelMBeanOperationInfo; import org.jboss.logging.Logger; import org.jboss.mx.loading.LoaderRepository; +import org.jboss.mx.modelmbean.JBossModelMBeanInfoSupport; import org.jboss.mx.modelmbean.ModelMBeanConstants; import org.jboss.mx.modelmbean.RequiredModelMBeanInstantiator; import org.jboss.mx.notification.MBeanServerListenerRegistry; @@ -103,7 +102,7 @@ * @author <a href="mailto:ju...@jb...">Juha Lindfors</a>. * @author <a href="mailto:tr...@pr...">Trevor Squires</a>. * @author <a href="mailto:Adrian.Brock@HappeningTimes.com">Adrian Brock</a>. - * @version $Revision: 1.24.4.8 $ + * @version $Revision: 1.24.4.9 $ */ public class MBeanServerImpl implements MBeanServer, ServerConstants, ServiceConstants, ModelMBeanConstants @@ -137,6 +136,11 @@ */ private MBeanServerListenerRegistry listeners = new MBeanServerListenerRegistry(); + /** + * This server's class loader repository + */ + private ClassLoaderRepository classLoaderRepository; + // Static -------------------------------------------------------- /** @@ -168,6 +172,9 @@ else this.outer = outer; + // the very first thing to do is to create a class loader repository + this.classLoaderRepository = getClassLoaderRepository(); + // the very first thing to do is to create a registry instance this.registry = createRegistry(defaultDomain); @@ -198,14 +205,14 @@ // register the loader repository // FIXME: this should be a model mbean as well - String loaderClassMBeanName = LoaderRepository.getDefaultLoaderRepository().getClass().getName() + "MBean"; - ClassLoader cl = LoaderRepository.getDefaultLoaderRepository().getClass().getClassLoader(); + String loaderClassMBeanName = classLoaderRepository.getClass().getName() + "MBean"; + ClassLoader cl = classLoaderRepository.getClass().getClassLoader(); Class mbean = cl.loadClass(loaderClassMBeanName); //there must be a class with the MBean extension. ObjectName loaderName = new ObjectName(DEFAULT_LOADER_NAME); - registry.registerMBean(LoaderRepository.getDefaultLoaderRepository(), loaderName, valueMap); + registry.registerMBean(classLoaderRepository, loaderName, valueMap); } catch (MalformedObjectNameException e) @@ -673,7 +680,7 @@ try { // REVIEW: Should this be the beans TCL? - ClassLoader cl = registry.get(name).getResourceInstance().getClass().getClassLoader(); + ClassLoader cl = getClassLoaderFor(name); return new ObjectInputStreamWithClassLoader(new ByteArrayInputStream(data), cl); } catch (IOException e) @@ -690,7 +697,7 @@ try { // REVIEW: Should this be the beans TCL? - Class c = DefaultLoaderRepository.loadClass(className); + Class c = classLoaderRepository.loadClass(className); ClassLoader cl = c.getClassLoader(); return new ObjectInputStreamWithClassLoader(new ByteArrayInputStream(data), cl); } @@ -741,12 +748,35 @@ return (ClassLoader) cl; } - /** - * @todo implement this - */ public ClassLoaderRepository getClassLoaderRepository() { - throw new RuntimeException("NYI"); + // we don't need to synchronize, because this is the first thing we do in the constructor + if (classLoaderRepository == null) + { + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + String className = System.getProperty(LOADER_REPOSITORY_CLASS_PROPERTY, DEFAULT_LOADER_REPOSITORY_CLASS); + System.setProperty(LOADER_REPOSITORY_CLASS_PROPERTY, className); + + try + { + Class repository = cl.loadClass(className); + classLoaderRepository = (ClassLoaderRepository) repository.newInstance(); + } + catch (ClassNotFoundException e) + { + throw new Error("Cannot instantiate loader repository class: " + className); + } + catch (ClassCastException e) + { + throw new Error("Loader repository is not an instance of LoaderRepository: " + className); + } + catch (Exception e) + { + throw new Error("Error creating loader repository: " + e); + } + } + + return classLoaderRepository; } @@ -813,22 +843,28 @@ clazz = cl.loadClass(className); } else - clazz = DefaultLoaderRepository.loadClass(className); + clazz = classLoaderRepository.loadClass(className); Class[] sign = new Class[signature.length]; for (int i = 0; i < signature.length; ++i) { - try + if (LoaderRepository.getNativeClassForName(signature[i]) == null) { - if (cl != null) - sign[i] = cl.loadClass(signature[i]); - else - sign[i] = DefaultLoaderRepository.loadClass(signature[i]); + try + { + if (cl != null) + sign[i] = cl.loadClass(signature[i]); + else + sign[i] = classLoaderRepository.loadClass(signature[i]); + } + catch (ClassNotFoundException e) + { + throw new ReflectionException(e, "Constructor parameter class not found: " + signature[i]); + } } - catch (ClassNotFoundException e) + else { - // FIXME: should we delegate to DLR before throwing the exception? - throw new ReflectionException(e, "Constructor parameter class not found: " + signature[i]); + sign[i] = LoaderRepository.getNativeClassForName(signature[i]); } } Constructor constructor = clazz.getConstructor(sign); @@ -1322,7 +1358,7 @@ getInfo }; ModelMBeanNotificationInfo[] notifyInfo = null; - ModelMBeanInfoSupport info = new ModelMBeanInfoSupport + JBossModelMBeanInfoSupport info = new JBossModelMBeanInfoSupport ( RequiredModelMBeanInstantiator.getClassName(), "Managed Bean Registry", |