[jboss-cvs] JBossAS SVN: r69858 - in projects/microcontainer/trunk/classloader/src: tests/org/jboss/test/classloader and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Feb 15 09:06:06 EST 2008


Author: adrian at jboss.org
Date: 2008-02-15 09:06:06 -0500 (Fri, 15 Feb 2008)
New Revision: 69858

Modified:
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderSystem.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/AbstractClassLoaderTest.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/system/test/ClassLoaderSystemUnitTestCase.java
Log:
Add some helper methods for registering a classloader policy and constructing the domain at the same time

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderSystem.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderSystem.java	2008-02-15 14:03:57 UTC (rev 69857)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderSystem.java	2008-02-15 14:06:06 UTC (rev 69858)
@@ -305,6 +305,82 @@
    {
       return registerClassLoaderPolicy(getDefaultDomain(), policy);
    }
+
+   /**
+    * Register a classloader policy, possibly constructing the domain with a BEFORE parent policy
+    * 
+    * @param domainName the domain name
+    * @param policy the classloader policy
+    * @return the policy
+    * @throws IllegalArgumentException for a null parameter
+    */
+   public ClassLoader registerClassLoaderPolicy(String domainName, ClassLoaderPolicy policy)
+   {
+      return registerClassLoaderPolicy(domainName, ParentPolicy.BEFORE, null, policy);
+   }
+
+   /**
+    * Register a classloader policy, possibly constructing the domain
+    * 
+    * @param domainName the domain name
+    * @param parentPolicy the parent policy
+    * @param policy the classloader policy
+    * @return the policy
+    * @throws IllegalArgumentException for a null parameter
+    */
+   public ClassLoader registerClassLoaderPolicy(String domainName, ParentPolicy parentPolicy, ClassLoaderPolicy policy)
+   {
+      return registerClassLoaderPolicy(domainName, parentPolicy, null, policy);
+   }
+
+   /**
+    * Register a classloader policy, possibly constructing the domain
+    * 
+    * @param domainName the domain name
+    * @param parentPolicy the parent policy
+    * @param parentDomainName the parent domain (can be null)
+    * @param policy the classloader policy
+    * @return the policy
+    * @throws IllegalArgumentException for a null parameter
+    * @throws IllegalStateException if the parent domain does not exist
+    */
+   public ClassLoader registerClassLoaderPolicy(String domainName, ParentPolicy parentPolicy, String parentDomainName, ClassLoaderPolicy policy)
+   {
+      if (domainName == null)
+         throw new IllegalArgumentException("Null domain name");
+      if (parentPolicy == null)
+         throw new IllegalArgumentException("Null parent policy");
+      if (policy == null)
+         throw new IllegalArgumentException("Null classloader policy");
+      
+      ClassLoaderDomain domain;
+      synchronized (this)
+      {
+         // See whether the domain already exists
+         domain = getDomain(domainName);
+         if (domain == null)
+         {
+            if (parentDomainName != null)
+            {
+               // See whether the parent domain exists
+               ClassLoaderDomain parentDomain = getDomain(parentDomainName);
+               if (parentDomain == null)
+                  throw new IllegalStateException("Parent domain: " + parentDomainName + "does not exist.");
+               
+               // Create the domain with a parent
+               domain = createAndRegisterDomain(domainName, parentPolicy, parentDomain);
+            }
+            else
+            {
+               // Create a domain without a parent
+               domain = createAndRegisterDomain(domainName, parentPolicy);
+            }
+         }
+      }
+      
+      // Register the classloader policy in the domain
+      return registerClassLoaderPolicy(domain, policy);
+   }
    
    /**
     * Register a policy with a domain

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/AbstractClassLoaderTest.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/AbstractClassLoaderTest.java	2008-02-15 14:03:57 UTC (rev 69857)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/AbstractClassLoaderTest.java	2008-02-15 14:06:06 UTC (rev 69858)
@@ -107,7 +107,7 @@
    
    protected ClassLoader createAndRegisterMockClassLoader(ClassLoaderSystem system, String name)
    {
-      return MockClassLoaderHelper.createAndRegisterMockClassLoader(system, null, name);
+      return MockClassLoaderHelper.createAndRegisterMockClassLoader(system, (ClassLoaderDomain) null, name);
    }
    
    protected ClassLoader createAndRegisterMockClassLoader(ClassLoaderSystem system, ClassLoaderDomain domain)
@@ -115,6 +115,21 @@
       return createAndRegisterMockClassLoader(system, domain, "mock");
    }
    
+   protected ClassLoader createAndRegisterMockClassLoader(ClassLoaderSystem system, String domainName, String name)
+   {
+      return MockClassLoaderHelper.createAndRegisterMockClassLoader(system, domainName, name);
+   }
+   
+   protected ClassLoader createAndRegisterMockClassLoader(ClassLoaderSystem system, String domainName, ParentPolicy parentPolicy, String name)
+   {
+      return MockClassLoaderHelper.createAndRegisterMockClassLoader(system, domainName, parentPolicy, name);
+   }
+   
+   protected ClassLoader createAndRegisterMockClassLoader(ClassLoaderSystem system, String domainName, ParentPolicy parentPolicy, String parentDomainName, String name)
+   {
+      return MockClassLoaderHelper.createAndRegisterMockClassLoader(system, domainName, parentPolicy, parentDomainName, name);
+   }
+   
    protected ClassLoader createAndRegisterMockClassLoader(ClassLoaderSystem system, ClassLoaderDomain domain, String name)
    {
       return MockClassLoaderHelper.createAndRegisterMockClassLoader(system, domain, name);

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/system/test/ClassLoaderSystemUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/system/test/ClassLoaderSystemUnitTestCase.java	2008-02-15 14:03:57 UTC (rev 69857)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/system/test/ClassLoaderSystemUnitTestCase.java	2008-02-15 14:06:06 UTC (rev 69858)
@@ -29,6 +29,7 @@
 
 import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloader.spi.ParentPolicy;
 import org.jboss.classloader.test.support.MockClassLoaderHelper;
 import org.jboss.classloader.test.support.MockClassLoaderPolicy;
 import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
@@ -340,6 +341,94 @@
       assertEquals(expected, domain.added);
       assertEmpty(domain.removed);
    }
+   
+   public void testRegisterClassLoaderConstructDomain() throws Exception
+   {
+      MockClassLoaderSystem system = createMockClassLoaderSystem();
+      ClassLoader cl1 = createAndRegisterMockClassLoader(system, "test", "mock");
+      MockClassLoaderDomain domain = (MockClassLoaderDomain) system.getDomain("test");
+      assertEquals(ParentPolicy.BEFORE, domain.getParentPolicy());
+      assertFalse(domain.getParent() instanceof ClassLoaderDomain);
+      
+      List<ClassLoader> expected = new ArrayList<ClassLoader>();
+      expected.add(cl1);
+      
+      assertEquals(expected, domain.added);
+      assertEmpty(domain.removed);
+   }
+   
+   public void testRegisterClassLoaderConstructDomainWithoutParentDomain() throws Exception
+   {
+      MockClassLoaderSystem system = createMockClassLoaderSystem();
+      ClassLoader cl1 = createAndRegisterMockClassLoader(system, "test", ParentPolicy.AFTER, "mock");
+      MockClassLoaderDomain domain = (MockClassLoaderDomain) system.getDomain("test");
+      assertEquals(ParentPolicy.AFTER, domain.getParentPolicy());
+      assertFalse(domain.getParent() instanceof ClassLoaderDomain);
+      
+      List<ClassLoader> expected = new ArrayList<ClassLoader>();
+      expected.add(cl1);
+      
+      assertEquals(expected, domain.added);
+      assertEmpty(domain.removed);
+   }
+   
+   public void testRegisterClassLoaderConstructDomainWithParentDomain() throws Exception
+   {
+      MockClassLoaderSystem system = createMockClassLoaderSystem();
+      ClassLoader cl1 = createAndRegisterMockClassLoader(system, "test", ParentPolicy.AFTER, ClassLoaderSystem.DEFAULT_DOMAIN_NAME, "mock");
+      MockClassLoaderDomain domain = (MockClassLoaderDomain) system.getDomain("test");
+      MockClassLoaderDomain parent = (MockClassLoaderDomain) system.getDomain(ClassLoaderSystem.DEFAULT_DOMAIN_NAME);
+      assertEquals(ParentPolicy.AFTER, domain.getParentPolicy());
+      assertEquals(parent, domain.getParent());
+      
+      List<ClassLoader> expected = new ArrayList<ClassLoader>();
+      expected.add(cl1);
+      
+      assertEquals(expected, domain.added);
+      assertEmpty(domain.removed);
+   }
+   
+   public void testRegisterClassLoaderConstructDomainWithParentDomainAlreadyExists() throws Exception
+   {
+      MockClassLoaderSystem system = createMockClassLoaderSystem();
+      MockClassLoaderDomain domain = new MockClassLoaderDomain("test");
+      system.registerDomain(domain);
+      ClassLoader cl1 = createAndRegisterMockClassLoader(system, "test", ParentPolicy.AFTER, ClassLoaderSystem.DEFAULT_DOMAIN_NAME, "mock");
+      
+      List<ClassLoader> expected = new ArrayList<ClassLoader>();
+      expected.add(cl1);
+      
+      assertEquals(expected, domain.added);
+      assertEmpty(domain.removed);
+   }
+   
+   public void testRegisterClassLoaderConstructDomainWithParentPolicyAlreadyExists() throws Exception
+   {
+      MockClassLoaderSystem system = createMockClassLoaderSystem();
+      MockClassLoaderDomain domain = new MockClassLoaderDomain("test");
+      system.registerDomain(domain);
+      ClassLoader cl1 = createAndRegisterMockClassLoader(system, "test", ParentPolicy.AFTER, "mock");
+      
+      List<ClassLoader> expected = new ArrayList<ClassLoader>();
+      expected.add(cl1);
+      
+      assertEquals(expected, domain.added);
+      assertEmpty(domain.removed);
+   }
+   
+   public void testRegisterClassLoaderConstructDomainAlreadyExists() throws Exception
+   {
+      MockClassLoaderSystem system = createMockClassLoaderSystem();
+      MockClassLoaderDomain domain = new MockClassLoaderDomain("test");
+      system.registerDomain(domain);
+      ClassLoader cl1 = createAndRegisterMockClassLoader(system, "test", "mock");
+      
+      List<ClassLoader> expected = new ArrayList<ClassLoader>();
+      expected.add(cl1);
+      
+      assertEquals(expected, domain.added);
+      assertEmpty(domain.removed);
+   }
 
    public void testRegisterNullClassLoaderPolicyDefaultDomain()
    {
@@ -377,7 +466,7 @@
       MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
       try
       {
-         system.registerClassLoaderPolicy(null, policy);
+         system.registerClassLoaderPolicy((ClassLoaderDomain) null, policy);
          fail("Should not be here!");
       }
       catch (Exception e)
@@ -473,6 +562,80 @@
          checkThrowable(IllegalStateException.class, e);
       }
    }
+
+   public void testRegisterClassLoaderPolicyAndConstructDomainNoParentDomain()
+   {
+      MockClassLoaderSystem system = createMockClassLoaderSystem();
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
+      try
+      {
+         system.registerClassLoaderPolicy("test", ParentPolicy.BEFORE, "DOESNOTEXIST", policy);
+         fail("Should not be here!");
+      }
+      catch (Exception e)
+      {
+         checkThrowable(IllegalStateException.class, e);
+      }
+      assertFalse(system.isRegistered("test"));
+   }
+
+   public void testRegisterClassLoaderPolicyAndConstructDomainNoParentPolicy()
+   {
+      MockClassLoaderSystem system = createMockClassLoaderSystem();
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
+      try
+      {
+         system.registerClassLoaderPolicy("test", null, ClassLoaderSystem.DEFAULT_DOMAIN_NAME, policy);
+         fail("Should not be here!");
+      }
+      catch (Exception e)
+      {
+         checkThrowable(IllegalArgumentException.class, e);
+      }
+      try
+      {
+         system.registerClassLoaderPolicy("test", null, policy);
+         fail("Should not be here!");
+      }
+      catch (Exception e)
+      {
+         checkThrowable(IllegalArgumentException.class, e);
+      }
+      assertFalse(system.isRegistered("test"));
+   }
+
+   public void testRegisterClassLoaderPolicyAndConstructDomainNoDomainName()
+   {
+      MockClassLoaderSystem system = createMockClassLoaderSystem();
+      MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
+      try
+      {
+         system.registerClassLoaderPolicy(null, ParentPolicy.BEFORE, ClassLoaderSystem.DEFAULT_DOMAIN_NAME, policy);
+         fail("Should not be here!");
+      }
+      catch (Exception e)
+      {
+         checkThrowable(IllegalArgumentException.class, e);
+      }
+      try
+      {
+         system.registerClassLoaderPolicy(null, ParentPolicy.BEFORE, policy);
+         fail("Should not be here!");
+      }
+      catch (Exception e)
+      {
+         checkThrowable(IllegalArgumentException.class, e);
+      }
+      try
+      {
+         system.registerClassLoaderPolicy((String) null, policy);
+         fail("Should not be here!");
+      }
+      catch (Exception e)
+      {
+         checkThrowable(IllegalArgumentException.class, e);
+      }
+   }
    
    public void testUnregisterClassLoaderDefaultDomain() throws Exception
    {




More information about the jboss-cvs-commits mailing list