[jboss-cvs] JBossAS SVN: r70187 - in projects/microcontainer/trunk: classloading/src/main/org/jboss/classloading/spi/dependency and 10 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Feb 27 12:05:59 EST 2008


Author: adrian at jboss.org
Date: 2008-02-27 12:05:59 -0500 (Wed, 27 Feb 2008)
New Revision: 70187

Added:
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/DynamicRequirement.xml
   projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/policy/DynamicClassLoaderPolicyFactory.java
   projects/microcontainer/trunk/classloading/src/resources/tests/org/jboss/test/classloading/metadata/xml/test/DynamicRequirement.xml
   projects/microcontainer/trunk/classloading/src/tests/org/jboss/test/classloading/dependency/test/DynamicPackageUnitTestCase.java
Modified:
   projects/microcontainer/trunk/classloading-vfs/src/resources/main/schema/jboss-classloader-1.0.xsd
   projects/microcontainer/trunk/classloading-vfs/src/resources/main/schema/jboss-classloading-1.0.xsd
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/test/VFSClassLoaderFactoryXMLUnitTestCase.java
   projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/plugins/metadata/DefaultClassLoadingMetaDataFactory.java
   projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/Domain.java
   projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/Module.java
   projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/RequirementDependencyItem.java
   projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/policy/ClassLoaderPolicyModule.java
   projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/metadata/ClassLoadingMetaDataFactory.java
   projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/metadata/Requirement.java
   projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/metadata/helpers/AbstractRequirement.java
   projects/microcontainer/trunk/classloading/src/tests/org/jboss/test/classloading/metadata/test/ClassLoadingMetaDataFactoryUnitTestCase.java
   projects/microcontainer/trunk/classloading/src/tests/org/jboss/test/classloading/metadata/xml/test/ClassLoadingMetaDataXmlUnitTestCase.java
Log:
[JBMICROCONT-241] - Add support for dynamic imports

Modified: projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/plugins/metadata/DefaultClassLoadingMetaDataFactory.java
===================================================================
--- projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/plugins/metadata/DefaultClassLoadingMetaDataFactory.java	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/plugins/metadata/DefaultClassLoadingMetaDataFactory.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -39,11 +39,12 @@
       return new ModuleCapability(name, version);
    }
 
-   public Requirement createRequireModule(String name, VersionRange versionRange, boolean optional, boolean reExport)
+   public Requirement createRequireModule(String name, VersionRange versionRange, boolean optional, boolean reExport, boolean dynamic)
    {
       ModuleRequirement result = new ModuleRequirement(name, versionRange);
       result.setOptional(optional);
       result.setReExport(reExport);
+      result.setDynamic(dynamic);
       return result;
    }
 
@@ -52,11 +53,12 @@
       return new PackageCapability(name, version);
    }
 
-   public Requirement createRequirePackage(String name, VersionRange versionRange, boolean optional, boolean reExport)
+   public Requirement createRequirePackage(String name, VersionRange versionRange, boolean optional, boolean reExport, boolean dynamic)
    {
       PackageRequirement result = new PackageRequirement(name, versionRange);
       result.setOptional(optional);
       result.setReExport(reExport);
+      result.setDynamic(dynamic);
       return result;
    }
 

Modified: projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/Domain.java
===================================================================
--- projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/Domain.java	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/Domain.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -112,8 +112,10 @@
     * @param name the context name
     * @return the module
     */
-   protected Module getModule(String name)
+   public Module getModule(String name)
    {
+      if (name == null)
+         throw new IllegalArgumentException("Null module name");
       return modulesByName.get(name);
    }
    

Modified: projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/Module.java
===================================================================
--- projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/Module.java	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/Module.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -285,8 +285,13 @@
          return null;
 
       List<DelegateLoader> result = new CopyOnWriteArrayList<DelegateLoader>();
+      List<DelegateLoader> dynamic = new CopyOnWriteArrayList<DelegateLoader>();
       Set<Module> visited = new HashSet<Module>();
-      addDelegates(this, result, visited, false);
+      addDelegates(this, result, dynamic, visited, false);
+      
+      // Make sure the dynamic delegates are last
+      result.addAll(dynamic);
+      
       return result;
    }
    
@@ -305,10 +310,11 @@
     * 
     * @param module the module to add delegates from
     * @param delegates the current list of delegates
+    * @param dynamic the dynamic delegates
     * @param visited the visited modules
     * @param reExport whether to only add re-exports
     */
-   protected void addDelegates(Module module, List<DelegateLoader> delegates, Set<Module> visited, boolean reExport)
+   protected void addDelegates(Module module, List<DelegateLoader> delegates, List<DelegateLoader> dynamic, Set<Module> visited, boolean reExport)
    {
       // Check whether we already did this module
       if (visited.contains(module))
@@ -329,6 +335,15 @@
             // Sanity checks
             if (item.isResolved() == false)
                throw new IllegalStateException("Item not resolved: " + item);
+            
+            // Dynamic requirement, create it lazily
+            if (requirement.isDynamic())
+            {
+               DelegateLoader delegate = createLazyDelegateLoader(checkDomain(), item);
+               dynamic.add(delegate);
+               continue;
+            }
+
             String name = (String) item.getIDependOn();
             if (name == null)
             {
@@ -348,7 +363,7 @@
 
             // Check for re-export by the module
             if (requirement.wantReExports())
-               addDelegates(iDependOnModule, delegates, visited, true);
+               addDelegates(iDependOnModule, delegates, dynamic, visited, true);
             
             // We want a module's re-exports (i.e. part of its imports) before the module itself
             if (delegate != null)
@@ -356,8 +371,17 @@
          }
       }
    }
-   
+
    /**
+    * Create a lazy delegate loader
+    * 
+    * @param domain the domain
+    * @param item the dependency item
+    * @return the delegate loader
+    */
+   public abstract DelegateLoader createLazyDelegateLoader(Domain domain, RequirementDependencyItem item);
+
+   /**
     * Get the delegate loader
     * 
     * @param requiringModule the requiring module
@@ -511,6 +535,16 @@
    }
 
    /**
+    * Get the controller context.
+    * 
+    * @return the controller context.
+    */
+   protected ControllerContext getControllerContext()
+   {
+      return context;
+   }
+
+   /**
     * Set the controller context
     * 
     * @param context the context

Modified: projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/RequirementDependencyItem.java
===================================================================
--- projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/RequirementDependencyItem.java	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/RequirementDependencyItem.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -102,7 +102,7 @@
       else
       {
          // Optional requirement
-         if (requirement.isOptional())
+         if (requirement.isOptional() || requirement.isDynamic())
             setResolved(true);
       }
       return isResolved();

Modified: projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/policy/ClassLoaderPolicyModule.java
===================================================================
--- projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/policy/ClassLoaderPolicyModule.java	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/policy/ClassLoaderPolicyModule.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -27,10 +27,15 @@
 import org.jboss.classloader.spi.DelegateLoader;
 import org.jboss.classloader.spi.Loader;
 import org.jboss.classloader.spi.ParentPolicy;
+import org.jboss.classloader.spi.filter.LazyFilteredDelegateLoader;
+import org.jboss.classloading.spi.dependency.Domain;
 import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classloading.spi.dependency.RequirementDependencyItem;
 import org.jboss.classloading.spi.dependency.helpers.ClassLoadingMetaDataModule;
 import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
 import org.jboss.classloading.spi.metadata.Requirement;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
 
 /**
  * ClassLoaderPolicyModule.
@@ -145,6 +150,18 @@
    protected abstract ClassLoaderPolicy determinePolicy();
    
    @Override
+   public DelegateLoader createLazyDelegateLoader(Domain domain, RequirementDependencyItem item)
+   {
+      ControllerContext context = getControllerContext();
+      if (context == null)
+         throw new IllegalStateException("No controller context");
+      Controller controller = context.getController();
+         
+      DynamicClassLoaderPolicyFactory factory = new DynamicClassLoaderPolicyFactory(controller, domain, item);
+      return new LazyFilteredDelegateLoader(factory);
+   }
+
+   @Override
    public DelegateLoader getDelegateLoader(Module requiringModule, Requirement requirement)
    {
       return getPolicy().getExported();

Added: projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/policy/DynamicClassLoaderPolicyFactory.java
===================================================================
--- projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/policy/DynamicClassLoaderPolicyFactory.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/policy/DynamicClassLoaderPolicyFactory.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -0,0 +1,91 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2007, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.classloading.spi.dependency.policy;
+
+import org.jboss.classloader.spi.ClassLoaderPolicy;
+import org.jboss.classloader.spi.ClassLoaderPolicyFactory;
+import org.jboss.classloading.spi.dependency.Domain;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classloading.spi.dependency.RequirementDependencyItem;
+import org.jboss.dependency.spi.Controller;
+
+/**
+ * DynamicClassLoaderPolicyFactory.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class DynamicClassLoaderPolicyFactory implements ClassLoaderPolicyFactory
+{
+   /** The controller */
+   private Controller controller;
+
+   /** The domain */
+   private Domain domain;
+   
+   /** The requirement dependency item */
+   private RequirementDependencyItem item;
+
+   /**
+    * Create a new DynamicClassLoaderPolicyFactory.
+    * 
+    * @param controller the controller
+    * @param domain the domain
+    * @param item the item
+    */
+   public DynamicClassLoaderPolicyFactory(Controller controller, Domain domain, RequirementDependencyItem item)
+   {
+      if (controller == null)
+         throw new IllegalArgumentException("Null controller");
+      if (domain == null)
+         throw new IllegalArgumentException("Null domain");
+      if (item == null)
+         throw new IllegalArgumentException("Null item");
+      this.controller = controller;
+      this.domain = domain;
+      this.item = item;
+   }
+
+   public ClassLoaderPolicy createClassLoaderPolicy()
+   {
+      // Still undetermined
+      String name = (String) item.getIDependOn();
+      if (name == null)
+      {
+         // Try to resolve
+         item.resolve(controller);
+         name = (String) item.getIDependOn();
+         if (name == null)
+            return null;
+      }
+
+      Module iDependOnModule = domain.getModule(name);
+      if (iDependOnModule == null)
+         throw new IllegalStateException("Module not found with name: " + name);
+
+      // Get the policy for the module
+      if (iDependOnModule instanceof ClassLoaderPolicyModule == false)
+         throw new IllegalStateException("Unable to determine ClassLoaderPolicy from module: " + iDependOnModule);
+      ClassLoaderPolicyModule classLoaderPolicyModule = (ClassLoaderPolicyModule) iDependOnModule;
+      return classLoaderPolicyModule.getPolicy();
+   }
+}

Modified: projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/metadata/ClassLoadingMetaDataFactory.java
===================================================================
--- projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/metadata/ClassLoadingMetaDataFactory.java	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/metadata/ClassLoadingMetaDataFactory.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -85,7 +85,7 @@
     */
    public Requirement createRequireModule(String name, VersionRange versionRange)
    {
-      return createRequireModule(name, versionRange, false, false);
+      return createRequireModule(name, versionRange, false, false, false);
    }
 
    /**
@@ -95,10 +95,11 @@
     * @param versionRange the version range
     * @param optional whether the requirement is optional
     * @param reExport whether the requirement is a re-export
+    * @param dynamic whether the requirement is dynamic
     * @return the module requirement
     * @throws IllegalArgumentException for a null name
     */
-   public abstract Requirement createRequireModule(String name, VersionRange versionRange, boolean optional, boolean reExport);
+   public abstract Requirement createRequireModule(String name, VersionRange versionRange, boolean optional, boolean reExport, boolean dynamic);
 
    /**
     * Create a new re-export module requirement with no version constraint
@@ -136,7 +137,7 @@
     */
    public Requirement createReExportModule(String name, VersionRange versionRange, boolean optional)
    {
-      return createRequireModule(name, versionRange, optional, true);
+      return createRequireModule(name, versionRange, optional, true, false);
    }
 
    /**
@@ -183,7 +184,7 @@
     */
    public Requirement createRequirePackage(String name, VersionRange versionRange)
    {
-      return createRequirePackage(name, versionRange, false, false);
+      return createRequirePackage(name, versionRange, false, false, false);
    }
 
    /**
@@ -193,10 +194,11 @@
     * @param versionRange the version range
     * @param optional whether the requirement is optional
     * @param reExport whether the requirement is a re-export
+    * @param dynamic whether the requirement is dynamic
     * @return the package requirement
     * @throws IllegalArgumentException for a null name
     */
-   public abstract Requirement createRequirePackage(String name, VersionRange versionRange, boolean optional, boolean reExport);
+   public abstract Requirement createRequirePackage(String name, VersionRange versionRange, boolean optional, boolean reExport, boolean dynamic);
 
    /**
     * Create a new re-export package requirement with no version constraint
@@ -234,7 +236,7 @@
     */
    public Requirement createReExportPackage(String name, VersionRange versionRange, boolean optional)
    {
-      return createRequirePackage(name, versionRange, optional, true);
+      return createRequirePackage(name, versionRange, optional, true, false);
    }
 
    /**

Modified: projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/metadata/Requirement.java
===================================================================
--- projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/metadata/Requirement.java	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/metadata/Requirement.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -51,4 +51,11 @@
     * @return true if the requirement is optional
     */
    boolean isOptional();
+   
+   /**
+    * Whether the requirement is dynamic
+    * 
+    * @return true if the requirement is dynamic
+    */
+   boolean isDynamic();
 }

Modified: projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/metadata/helpers/AbstractRequirement.java
===================================================================
--- projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/metadata/helpers/AbstractRequirement.java	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading/src/main/org/jboss/classloading/spi/metadata/helpers/AbstractRequirement.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -41,6 +41,9 @@
    /** Whether the requirement is optional */
    private boolean optional = false;
 
+   /** Whether the requirement is dynamic */
+   private boolean dynamic = false;
+
    /** Whether to re-export */
    private boolean reExport = false;
    
@@ -90,6 +93,22 @@
       this.optional = optional;
    }
 
+   public boolean isDynamic()
+   {
+      return dynamic;
+   }
+
+   /**
+    * Set the dynamic.
+    * 
+    * @param dynamic the dynamic.
+    */
+   @XmlAttribute(name="dynamic")
+   public void setDynamic(boolean dynamic)
+   {
+      this.dynamic = dynamic;
+   }
+
    public boolean wantReExports()
    {
       return false;

Added: projects/microcontainer/trunk/classloading/src/resources/tests/org/jboss/test/classloading/metadata/xml/test/DynamicRequirement.xml
===================================================================
--- projects/microcontainer/trunk/classloading/src/resources/tests/org/jboss/test/classloading/metadata/xml/test/DynamicRequirement.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading/src/resources/tests/org/jboss/test/classloading/metadata/xml/test/DynamicRequirement.xml	2008-02-27 17:05:59 UTC (rev 70187)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloading xmlns="urn:jboss:classloading:1.0"
+              name="test">
+   <requirements>
+      <module name="test1" from="1.0.0" dynamic="true"/>
+      <package name="test1" from="1.0.0" dynamic="true"/>
+   </requirements>
+</classloading>

Added: projects/microcontainer/trunk/classloading/src/tests/org/jboss/test/classloading/dependency/test/DynamicPackageUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading/src/tests/org/jboss/test/classloading/dependency/test/DynamicPackageUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading/src/tests/org/jboss/test/classloading/dependency/test/DynamicPackageUnitTestCase.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -0,0 +1,83 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloading.dependency.test;
+
+import junit.framework.Test;
+
+import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.test.classloading.dependency.support.a.A;
+
+/**
+ * ReExportPackageUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class DynamicPackageUnitTestCase extends AbstractMockClassLoaderUnitTest
+{
+   public static Test suite()
+   {
+      return suite(DynamicPackageUnitTestCase.class);
+   }
+
+   public DynamicPackageUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testDynamicPackage() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      
+      MockClassLoadingMetaData a1 = new MockClassLoadingMetaData("a1");
+      a1.getRequirements().addRequirement(factory.createRequirePackage(A.class.getPackage().getName(), null, false, false, true));
+      KernelControllerContext contextA1 = install(a1);
+      try
+      {
+         ClassLoader clA1 = assertClassLoader(contextA1);
+         assertLoadClassFail(A.class, clA1);
+
+         MockClassLoadingMetaData a2 = new MockClassLoadingMetaData("a2");
+         a2.setPathsAndPackageNames(A.class);
+         KernelControllerContext contextA2 = install(a2);
+         try
+         {
+            ClassLoader clA2 = assertClassLoader(contextA2);
+            assertLoadClass(A.class, clA2);
+            enableTrace("org.jboss.classloader");
+            assertLoadClass(A.class, clA1, clA2);
+         }
+         finally
+         {
+            uninstall(contextA2);
+         }
+         assertNoClassLoader(contextA2);
+      }
+      finally
+      {
+         uninstall(contextA1);
+      }
+      assertNoClassLoader(contextA1);
+   }
+}

Modified: projects/microcontainer/trunk/classloading/src/tests/org/jboss/test/classloading/metadata/test/ClassLoadingMetaDataFactoryUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading/src/tests/org/jboss/test/classloading/metadata/test/ClassLoadingMetaDataFactoryUnitTestCase.java	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading/src/tests/org/jboss/test/classloading/metadata/test/ClassLoadingMetaDataFactoryUnitTestCase.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -95,14 +95,15 @@
       assertEquals(new ModuleRequirement("test", range), test);
    }
    
-   public void testCreateRequireModuleVersionedOptionalReExport() throws Exception
+   public void testCreateRequireModuleVersionedOptionalReExportDynamic() throws Exception
    {
       ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
       VersionRange range = new VersionRange("1.0.0", "2.0.0");
-      Requirement test = factory.createRequireModule("test", range, true, true);
+      Requirement test = factory.createRequireModule("test", range, true, true, true);
       ModuleRequirement expected = new ModuleRequirement("test", range);
       expected.setOptional(true);
       expected.setReExport(true);
+      expected.setDynamic(true);
       assertEquals(expected, test);
    }
    
@@ -151,14 +152,15 @@
       assertEquals(new PackageRequirement("test", range), test);
    }
    
-   public void testCreateRequirePackageVersionedOptionalReExport() throws Exception
+   public void testCreateRequirePackageVersionedOptionalReExportDynamic() throws Exception
    {
       ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
       VersionRange range = new VersionRange("1.0.0", "2.0.0");
-      Requirement test = factory.createRequirePackage("test", range, true, true);
+      Requirement test = factory.createRequirePackage("test", range, true, true, true);
       PackageRequirement expected = new PackageRequirement("test", range);
       expected.setOptional(true);
       expected.setReExport(true);
+      expected.setDynamic(true);
       assertEquals(expected, test);
    }
    

Modified: projects/microcontainer/trunk/classloading/src/tests/org/jboss/test/classloading/metadata/xml/test/ClassLoadingMetaDataXmlUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading/src/tests/org/jboss/test/classloading/metadata/xml/test/ClassLoadingMetaDataXmlUnitTestCase.java	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading/src/tests/org/jboss/test/classloading/metadata/xml/test/ClassLoadingMetaDataXmlUnitTestCase.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -283,10 +283,18 @@
    {
       ClassLoadingMetaData result = unmarshal(TestRequirement.class);
       ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
-      assertRequirements(result, factory.createRequireModule("test1", new VersionRange("1.0.0"), true, false), 
-                                 factory.createRequirePackage("test1", new VersionRange("1.0.0"), true, false));
+      assertRequirements(result, factory.createRequireModule("test1", new VersionRange("1.0.0"), true, false, false), 
+                                 factory.createRequirePackage("test1", new VersionRange("1.0.0"), true, false, false));
    }
 
+   public void testDynamicRequirement() throws Exception
+   {
+      ClassLoadingMetaData result = unmarshal(TestRequirement.class);
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createRequireModule("test1", new VersionRange("1.0.0"), false, false, true), 
+                                 factory.createRequirePackage("test1", new VersionRange("1.0.0"), false, false, true));
+   }
+
    public void testReExportRequirement() throws Exception
    {
       ClassLoadingMetaData result = unmarshal(TestRequirement.class);

Modified: projects/microcontainer/trunk/classloading-vfs/src/resources/main/schema/jboss-classloader-1.0.xsd
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/main/schema/jboss-classloader-1.0.xsd	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/main/schema/jboss-classloader-1.0.xsd	2008-02-27 17:05:59 UTC (rev 70187)
@@ -339,6 +339,16 @@
             </xsd:documentation>
          </xsd:annotation>
       </xsd:attribute>
+      <xsd:attribute name="dynamic" type="xsd:boolean" optional="true">
+         <xsd:annotation>
+            <xsd:documentation>
+               <![CDATA[
+               Whether this requirement is a dynamic import that can
+               be resolved at runtime.
+               ]]>
+            </xsd:documentation>
+         </xsd:annotation>
+      </xsd:attribute>
       <xsd:attribute name="optional" type="xsd:boolean" optional="true">
          <xsd:annotation>
             <xsd:documentation>
@@ -371,4 +381,4 @@
          </xsd:documentation>
       </xsd:annotation>
    </xsd:simpleType>
-</xsd:schema>
\ No newline at end of file
+</xsd:schema>

Modified: projects/microcontainer/trunk/classloading-vfs/src/resources/main/schema/jboss-classloading-1.0.xsd
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/main/schema/jboss-classloading-1.0.xsd	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/main/schema/jboss-classloading-1.0.xsd	2008-02-27 17:05:59 UTC (rev 70187)
@@ -296,6 +296,16 @@
             </xsd:documentation>
          </xsd:annotation>
       </xsd:attribute>
+      <xsd:attribute name="dynamic" type="xsd:boolean" optional="true">
+         <xsd:annotation>
+            <xsd:documentation>
+               <![CDATA[
+               Whether this requirement is a dynamic import that can
+               be resolved at runtime.
+               ]]>
+            </xsd:documentation>
+         </xsd:annotation>
+      </xsd:attribute>
       <xsd:attribute name="optional" type="xsd:boolean" optional="true">
          <xsd:annotation>
             <xsd:documentation>
@@ -328,4 +338,4 @@
          </xsd:documentation>
       </xsd:annotation>
    </xsd:simpleType>
-</xsd:schema>
\ No newline at end of file
+</xsd:schema>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/DynamicRequirement.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/DynamicRequirement.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/DynamicRequirement.xml	2008-02-27 17:05:59 UTC (rev 70187)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <requirements>
+      <module name="test1" from="1.0.0" dynamic="true"/>
+      <package name="test1" from="1.0.0" dynamic="true"/>
+   </requirements>
+</classloader>

Modified: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/test/VFSClassLoaderFactoryXMLUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/test/VFSClassLoaderFactoryXMLUnitTestCase.java	2008-02-27 17:00:47 UTC (rev 70186)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/test/VFSClassLoaderFactoryXMLUnitTestCase.java	2008-02-27 17:05:59 UTC (rev 70187)
@@ -305,8 +305,8 @@
    {
       VFSClassLoaderFactory result = unmarshal(TestRequirement.class);
       ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
-      assertRequirements(result, factory.createRequireModule("test1", new VersionRange("1.0.0"), true, false), 
-                                 factory.createRequirePackage("test1", new VersionRange("1.0.0"), true, false));
+      assertRequirements(result, factory.createRequireModule("test1", new VersionRange("1.0.0"), true, false, false), 
+                                 factory.createRequirePackage("test1", new VersionRange("1.0.0"), true, false, false));
    }
 
    public void testReExportRequirement() throws Exception
@@ -317,6 +317,14 @@
                                  factory.createReExportPackage("test1", new VersionRange("1.0.0")));
    }
 
+   public void testDynamicRequirement() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal(TestRequirement.class);
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createRequireModule("test1", new VersionRange("1.0.0"), false, false, true), 
+                                 factory.createRequirePackage("test1", new VersionRange("1.0.0"), false, false, true));
+   }
+
    public void testUsesRequirement() throws Exception
    {
       VFSClassLoaderFactory result = unmarshal(TestRequirement.class);




More information about the jboss-cvs-commits mailing list