[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