Package test.javax.management.loading

Source Code of test.javax.management.loading.ClassLoaderRepositoryTest

/*
* Copyright (C) The MX4J Contributors.
* All rights reserved.
*
* This software is distributed under the terms of the MX4J License version 1.0.
* See the terms of the MX4J License in the documentation provided with this software.
*/

package test.javax.management.loading;

import java.lang.reflect.Method;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.loading.ClassLoaderRepository;
import javax.management.loading.MLet;

import junit.framework.TestCase;

/**
* @version $Revision: 1.9 $
*/
public class ClassLoaderRepositoryTest extends TestCase
{
   public ClassLoaderRepositoryTest(String s)
   {
      super(s);
   }

   public void testSingleMBeanServer() throws Exception
   {
      MBeanServer server = MBeanServerFactory.newMBeanServer();
      ClassLoaderRepository clr = server.getClassLoaderRepository();
      Method method = clr.getClass().getDeclaredMethod("getSize", new Class[0]);
      method.setAccessible(true);
      Integer size = (Integer)method.invoke(clr, new Object[0]);
      int initial = size.intValue();

      ObjectName name1 = new ObjectName(":name=mlet1");
      ObjectName name2 = new ObjectName(":name=mlet2");

      MLet mlet1 = new MLet();
      server.registerMBean(mlet1, name1);

      // Check that the mlet was registered as classloader
      size = (Integer)method.invoke(clr, new Object[0]);
      if (size.intValue() != initial + 1) fail("ClassLoader not registered in ClassLoaderRepository");

      // Add another classloader
      MLet mlet2 = new MLet();
      server.registerMBean(mlet2, name2);

      size = (Integer)method.invoke(clr, new Object[0]);
      if (size.intValue() != initial + 2) fail("ClassLoader not registered in ClassLoaderRepository");
   }

   public void testMultipleMBeanServer() throws Exception
   {
      MBeanServer server1 = MBeanServerFactory.newMBeanServer("domain1");
      MBeanServer server2 = MBeanServerFactory.newMBeanServer("domain2");
      ClassLoaderRepository clr1 = server1.getClassLoaderRepository();
      ClassLoaderRepository clr2 = server2.getClassLoaderRepository();
      Method method = clr1.getClass().getDeclaredMethod("getSize", new Class[0]);
      method.setAccessible(true);
      Integer size1 = (Integer)method.invoke(clr1, new Object[0]);
      int initial1 = size1.intValue();
      Integer size2 = (Integer)method.invoke(clr2, new Object[0]);
      int initial2 = size2.intValue();

      ObjectName name1 = new ObjectName(":name=mlet1");
      ObjectName name2 = new ObjectName(":name=mlet2");

      MLet mlet1 = new MLet();
      server1.registerMBean(mlet1, name1);

      MLet mlet2 = new MLet();
      server2.registerMBean(mlet2, name2);

      // Check that the mlet was registered as classloader
      size1 = (Integer)method.invoke(clr1, new Object[0]);
      if (size1.intValue() != initial1 + 1) fail("ClassLoader not registered in ClassLoaderRepository");

      size2 = (Integer)method.invoke(clr2, new Object[0]);
      if (size2.intValue() != initial2 + 1) fail("ClassLoader not registered in ClassLoaderRepository");
   }

   public void testMultipleRegistrationOfSameClassLoader() throws Exception
   {
      MBeanServer server = MBeanServerFactory.newMBeanServer();
      ClassLoaderRepository clr = server.getClassLoaderRepository();
      Method method = clr.getClass().getDeclaredMethod("getSize", new Class[0]);
      method.setAccessible(true);
      Integer size = (Integer)method.invoke(clr, new Object[0]);
      int initial = size.intValue();

      ObjectName name1 = new ObjectName(":name=mlet1");
      ObjectName name2 = new ObjectName(":name=mlet2");

      MLet mlet1 = new MLet();
      server.registerMBean(mlet1, name1);
      server.registerMBean(mlet1, name2);

      // Check that the mlet was registered only once
      size = (Integer)method.invoke(clr, new Object[0]);
      if (size.intValue() != initial + 1) fail("Same ClassLoader was registered more than once");
   }
}
TOP

Related Classes of test.javax.management.loading.ClassLoaderRepositoryTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.