[jboss-cvs] JBossAS SVN: r104679 - in projects/profileservice/trunk: core and 13 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue May 11 08:40:34 EDT 2010


Author: emuckenhuber
Date: 2010-05-11 08:40:31 -0400 (Tue, 11 May 2010)
New Revision: 104679

Added:
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/BootstrapProfileDeploymentMetaData.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/KernelDeploymentBuilder.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/domain/XmlDomainMetaDataRepository.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenMetaDataRepositoryFactory.java
Removed:
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/domain/support/DomainMetaDataRepoSupport.java
Modified:
   projects/profileservice/trunk/core/pom.xml
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/AbstractProfileService.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/Hack.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/TypedProfileFactory.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/bootstrap/AbstractProfileServiceBootstrap.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/BootstrapDeployerPlugin.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/BootstrapProfileMetaData.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/BasicProfileMetaData.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/BasicSubProfileMetaData.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/domain/BasicDomainMetaDataVisitor.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/domain/RequiredProfiles.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/helpers/AbstractProfileKeyMetaData.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/helpers/AbstractProfileMetaData.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/plugin/PropertyProfileMetaData.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/AbstractMavenArtifactRepository.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenArtifactMetaData.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenArtifactReference.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/domain/support/AbstractDomainMetaDataVisitor.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/test/BasicProfileServiceUnitTestCase.java
   projects/profileservice/trunk/core/src/test/resources/system/profiles/core-profiles.xml
   projects/profileservice/trunk/plugins/src/main/java/org/jboss/profileservice/plugins/management/util/ManagedObjectProcessor.java
   projects/profileservice/trunk/pom.xml
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/ProfileDeployment.java
Log:
make checkComplete configurable; metadata helper classes; basic artifact assembly for kernel deployments.

Modified: projects/profileservice/trunk/core/pom.xml
===================================================================
--- projects/profileservice/trunk/core/pom.xml	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/pom.xml	2010-05-11 12:40:31 UTC (rev 104679)
@@ -20,6 +20,13 @@
 		</dependency>
 
 		<dependency>
+		<!--  TODO REMOVE ? -->
+			<groupId>org.jboss.cl</groupId>
+			<artifactId>jboss-classloading-vfs</artifactId>
+		</dependency>
+
+		<dependency>
+		<!--  FIXME REMOVE -->
 			<groupId>org.jboss.deployers</groupId>
 			<artifactId>jboss-deployers-vfs</artifactId>
 			<version>${version.org.jboss.deployers}</version>

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/AbstractProfileService.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/AbstractProfileService.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/AbstractProfileService.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -34,6 +34,7 @@
 import org.jboss.dependency.spi.DependencyItem;
 import org.jboss.deployers.spi.management.ManagementView;
 import org.jboss.deployers.spi.management.deploy.DeploymentManager;
+import org.jboss.profileservice.dependency.ProfileControllerContext;
 import org.jboss.profileservice.dependency.ProfileServiceController;
 import org.jboss.profileservice.spi.NoSuchProfileException;
 import org.jboss.profileservice.spi.Profile;
@@ -258,16 +259,20 @@
     */
    protected void internalValidateContext(ControllerContext ctx, Set<String> errors, Map<Object, String> incomplete)
    {
+      Object name = ctx.getName();
+      if(ctx instanceof ProfileControllerContext)
+      {
+         name = ProfileControllerContext.class.cast(ctx).getProfileKey();
+      }
       if (ctx.getState().equals(ControllerState.ERROR))
       {
          JBossStringBuilder builder = new JBossStringBuilder();
-         builder.append("Profile: ").append(ctx.getName());
+         builder.append("Profile: ").append(name);
          builder.append(" in error due to ").append(ctx.getError()); 
          errors.add(builder.toString());
       }
       else
       {
-         Object name = ctx.getName();
          if(incomplete.containsKey(name))
             return;
          

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/Hack.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/Hack.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/Hack.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -28,6 +28,8 @@
 public class Hack
 {
 
+   public static String DISABLE_COMPLETE_CHECK = "disable.complete.check";
+   
    static volatile boolean checkHack = false;
    
    public static boolean ignoreHack()

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/TypedProfileFactory.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/TypedProfileFactory.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/TypedProfileFactory.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -21,10 +21,13 @@
  */ 
 package org.jboss.profileservice;
 
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.jboss.profileservice.profile.NoopProfile;
+import org.jboss.profileservice.profile.metadata.domain.RequiredProfiles;
 import org.jboss.profileservice.profile.metadata.plugin.EmptyProfileMetaData;
 import org.jboss.profileservice.spi.Profile;
 import org.jboss.profileservice.spi.ProfileFactory;
@@ -40,13 +43,19 @@
  */
 public class TypedProfileFactory implements ProfileFactory<ProfileMetaData, Profile>
 {
+   
+   /** The types we create locally. */
+   private static final Set<String> TYPES = new HashSet<String>();
 
-   /** The type we create locally. */
-   private static final String typeName = EmptyProfileMetaData.class.getName();
-   
    /** The profile factories. */
    private Map<String, ProfileFactory<ProfileMetaData, Profile>> factories = new ConcurrentHashMap<String, ProfileFactory<ProfileMetaData, Profile>>();
 
+   static
+   {
+      TYPES.add(EmptyProfileMetaData.class.getName());
+      TYPES.add(RequiredProfiles.class.getName());
+   }
+   
    public TypedProfileFactory()
    {
       super();
@@ -54,7 +63,7 @@
    
    public String[] getTypes()
    {
-      return new String[] { typeName };
+      return TYPES.toArray(new String[TYPES.size()]);
    }
 
    /**
@@ -71,9 +80,9 @@
          throw new IllegalArgumentException("Null profile meta data");
       }
       String profileType = metaData.getClass().getName();
-      if(typeName.equals(profileType))
+      if(TYPES.contains(profileType))
       {
-         return createNoopProfile(key, metaData);
+         return createNoopProfile(key, metaData);         
       }
       return delegateCreate(profileType, key, metaData);
    }
@@ -84,6 +93,10 @@
    public void destroyProfile(ProfileMetaData metaData, Profile profile)
    {
       String profileType = metaData.getClass().getName();
+      if(TYPES.contains(profileType))
+      {
+         return;
+      }
       ProfileFactory<ProfileMetaData, Profile> factory = this.factories.get(profileType);
       if(factory != null && factory != this)
       {

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/bootstrap/AbstractProfileServiceBootstrap.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/bootstrap/AbstractProfileServiceBootstrap.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/bootstrap/AbstractProfileServiceBootstrap.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -22,7 +22,6 @@
 package org.jboss.profileservice.bootstrap;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 
 import org.jboss.kernel.Kernel;
@@ -30,7 +29,6 @@
 import org.jboss.profileservice.config.ProfileServiceConfig;
 import org.jboss.profileservice.domain.AbstractDomainMetaData;
 import org.jboss.profileservice.domain.spi.DomainMetaData;
-import org.jboss.profileservice.domain.spi.DomainMetaDataFragment;
 import org.jboss.profileservice.profile.metadata.domain.BasicDomainMetaDataVisitor;
 import org.jboss.profileservice.resolver.BasicResolverFactory;
 import org.jboss.profileservice.spi.NoSuchProfileException;
@@ -49,7 +47,7 @@
 {
 
    /** The logger. */
-   protected static final Logger log = Logger.getLogger("org.jboss.profileservice.bootstrap");
+   protected static final Logger log = Logger.getLogger("ProfileServiceBootstrap");
    
    /** The jboss kernel. */
    private final Kernel kernel;
@@ -85,14 +83,9 @@
    {
       ProfileRequirementResolver resolver = createResolver(domainMetaData);
       BasicDomainMetaDataVisitor visitor = new BasicDomainMetaDataVisitor(resolver, getMetaDataRegistry());
-      Collection<DomainMetaDataFragment> features = domainMetaData.getFragments();
-      if(features != null && features.isEmpty() == false)
-      {
-         for(DomainMetaDataFragment node : domainMetaData.getFragments())
-         {
-            visitor.visit(node);
-         }
-      }
+      // visit the domain meta data
+      domainMetaData.visit(visitor);
+      // Resolve & activate
       resolver.resolve();
       resolver.deploy();
    }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/BootstrapDeployerPlugin.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/BootstrapDeployerPlugin.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/BootstrapDeployerPlugin.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -31,7 +31,7 @@
 import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.kernel.Kernel;
-import org.jboss.kernel.plugins.deployment.xml.BasicXMLDeployer;
+import org.jboss.kernel.plugins.deployment.BasicKernelDeployer;
 import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.deployment.KernelDeployment;
 import org.jboss.kernel.spi.metadata.KernelMetaDataRepository;
@@ -41,6 +41,7 @@
 import org.jboss.managed.plugins.ManagedDeploymentImpl;
 import org.jboss.managed.plugins.factory.ManagedObjectFactoryBuilder;
 import org.jboss.metadata.spi.MetaData;
+import org.jboss.profileservice.deployment.DeploymentBuilder;
 import org.jboss.profileservice.deployment.ProfileDeployerPlugin;
 import org.jboss.profileservice.spi.ProfileDeployment;
 import org.jboss.profileservice.spi.ProfileKey;
@@ -57,15 +58,18 @@
 
    /** The managed object factory. */
    private final static ManagedObjectFactory managedObjectFactory = ManagedObjectFactoryBuilder.create();
-   
+
    /** The kernel. */
    private final Kernel kernel;
    
    /** The deployer. */
-   private final BasicXMLDeployer deployer;
+   private final BasicKernelDeployer deployer;
 
    /** Shutdown. */
    private volatile boolean shutdown = false;
+
+   /** The deployment builder. */
+   private DeploymentBuilder<KernelDeployment> deploymentBuilder = new KernelDeploymentBuilder();
    
    /** The deployments. */
    private final Map<String, KernelDeployment> deployments = new ConcurrentHashMap<String, KernelDeployment>();
@@ -77,9 +81,19 @@
          throw new IllegalArgumentException("null kernel");
       }
       this.kernel = kernel;
-      this.deployer = new BasicXMLDeployer(kernel);
+      this.deployer = new BasicKernelDeployer(kernel);
    }
    
+   public DeploymentBuilder<KernelDeployment> getDeploymentBuilder()
+   {
+      return deploymentBuilder;
+   }
+   
+   public void setDeploymentBuilder(DeploymentBuilder<KernelDeployment> deploymentBuilder)
+   {
+      this.deploymentBuilder = deploymentBuilder;
+   }
+   
    @Override
    public void addDeployment(ProfileKey key, ProfileDeployment deployment) throws Exception
    {
@@ -90,11 +104,12 @@
          {
             throw new FileNotFoundException(deployment.getRoot().getPathName());
          }
-         // Deploy
-         // TODO update management changes before deploying
-         KernelDeployment result = this.deployer.deploy(deployment.getRoot().toURL());
+         // Create
+         KernelDeployment result = createKernelDeployment(deployment);
          // Add to the deployments
          this.deployments.put(deployment.getName(), result);
+         // Deploy
+         this.deployer.deploy(result);
       }
       catch(Exception e)
       {
@@ -168,11 +183,11 @@
    {
       if(deployment == null)
          throw new IllegalArgumentException("null deployment");
-      
-      if(this.deployments.containsKey(deployment.getName()))
+
+      KernelDeployment kernelDeployment = this.deployments.remove(deployment.getName());
+      if(kernelDeployment != null)
       {
-         this.deployments.remove(deployment.getName());
-         this.deployer.undeploy(deployment.getRoot().toURL());
+         this.deployer.undeploy(kernelDeployment);         
       }
    }
    
@@ -218,12 +233,24 @@
    }
    
    /**
+    * Create the kernel deployment.
+    * 
+    * @param profileDeployment the profile deployment
+    * @return the kernel deployment
+    * @throws Exception for any error
+    */
+   protected KernelDeployment createKernelDeployment(final ProfileDeployment profileDeployment) throws Exception
+   {
+      return this.deploymentBuilder.createDeployment(profileDeployment);
+   }
+   
+   /**
     * Create a managed deployment based on the KernelDeployment
     * 
     * @param kernelDeployment the kernel deployment
     * @return the managed deployment
     */
-   ManagedDeployment createManagedDeployment(KernelDeployment kernelDeployment)
+   protected ManagedDeployment createManagedDeployment(KernelDeployment kernelDeployment)
    {
       Map<String, ManagedObject> managedObjects = new HashMap<String, ManagedObject>();
       Collection<BeanMetaDataFactory> beanFactories = kernelDeployment.getBeanFactories();

Added: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/BootstrapProfileDeploymentMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/BootstrapProfileDeploymentMetaData.java	                        (rev 0)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/BootstrapProfileDeploymentMetaData.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -0,0 +1,148 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2010, Red Hat 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.profileservice.profile.bootstrap;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
+import org.jboss.classloading.spi.metadata.ExportAll;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.profileservice.profile.metadata.helpers.AbstractProfileCapability;
+import org.jboss.profileservice.spi.VirtualDeploymentRepository;
+import org.jboss.profileservice.spi.dependency.ProfileCapability;
+import org.jboss.profileservice.spi.dependency.ProfileRequirement;
+import org.jboss.profileservice.spi.deployment.MetaDataAttachmentHolder;
+import org.jboss.profileservice.spi.deployment.MetaDataAttachmentVisitor;
+import org.jboss.profileservice.spi.metadata.ProfileDeploymentMetaData;
+import org.jboss.profileservice.spi.metadata.ProfileMetaDataVisitor;
+import org.jboss.profileservice.spi.repository.ArtifactRepository;
+import org.jboss.profileservice.spi.virtual.VirtualArtifactMetaData;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
+import org.jboss.profileservice.virtual.deployment.AbstractVirtualFileArtifact;
+import org.jboss.profileservice.virtual.deployment.VirtualMavenArtifactMetaData;
+import org.jboss.vfs.VirtualFile;
+
+/**
+ * The bootstrap deployment. The bootstrap deployment creates it's {@code ClassLoadingMetaData}  
+ * based on it's virtual deployment artifacts. 
+ * 
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+ at XmlType(propOrder = {"name", "artifact", "artifacts" })
+public class BootstrapProfileDeploymentMetaData extends AbstractProfileCapability 
+   implements ProfileDeploymentMetaData, MetaDataAttachmentHolder
+{
+
+   /** The serialVersionUID */
+   private static final long serialVersionUID = -4689990538934087617L;
+
+   /** The artifact id. */
+   private VirtualArtifactMetaData artifact;
+   
+   /** The artifacts. */
+   private List<VirtualArtifactMetaData> artifacts;
+
+   @XmlElement(name = "meta-inf", type = AbstractVirtualFileArtifact.class)
+   public VirtualArtifactMetaData getArtifact()
+   {
+      return artifact;
+   }
+
+   public void setArtifact(VirtualArtifactMetaData artifact)
+   {
+      this.artifact = artifact;
+   }
+   
+   @XmlElement(name = "artifact", type = VirtualMavenArtifactMetaData.class)
+   public List<VirtualArtifactMetaData> getArtifacts()
+   {
+      return artifacts;
+   }
+
+   public void setArtifacts(List<VirtualArtifactMetaData> artifacts)
+   {
+      this.artifacts = artifacts;
+   }
+   
+   @XmlTransient
+   public List<VirtualDeploymentMetaData> getChildren()
+   {
+      return Collections.emptyList();
+   }
+
+   @XmlTransient
+   public boolean isConsistent(ProfileCapability other)
+   {
+      return true;
+   }
+
+   @XmlTransient
+   public boolean resolves(ProfileRequirement requirement)
+   {
+      return false;
+   }
+
+   public void visit(ProfileMetaDataVisitor visitor)
+   {
+      //
+   }
+
+   public void visit(final MetaDataAttachmentVisitor visitor)
+   {
+      if(this.artifacts != null && this.artifacts.isEmpty() == false)
+      {
+         if(visitor instanceof VirtualDeploymentRepository)
+         {
+            final List<String> roots = new ArrayList<String>();
+            final VirtualDeploymentRepository delegate = VirtualDeploymentRepository.class.cast(visitor);
+            for(final VirtualArtifactMetaData artifact : this.artifacts)
+            {
+               try
+               {
+                  final ArtifactRepository<VirtualArtifactMetaData> artifactRepository = delegate.resolveArtifactRepository(artifact);
+                  final VirtualFile vf = artifactRepository.getOriginalFile(artifact);
+                  roots.add(vf.toURI().toString());
+               }
+               catch(Exception e)
+               {
+                  throw new RuntimeException("failed to resolve artifact: " + artifact, e); 
+               }
+            }
+            final VFSClassLoaderFactory classloaderFactory = new VFSClassLoaderFactory();
+            classloaderFactory.setName(getName());
+            classloaderFactory.setExportAll(ExportAll.NON_EMPTY);
+            classloaderFactory.setImportAll(true);
+            classloaderFactory.setRoots(roots);
+            // Add as predetermined attachment
+            visitor.getPredeterminedAttachments().putAttachment(ClassLoadingMetaData.class.getName(), classloaderFactory);
+         }
+      }
+   }
+   
+}
\ No newline at end of file

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/BootstrapProfileMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/BootstrapProfileMetaData.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/BootstrapProfileMetaData.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -32,7 +32,6 @@
 
 import org.jboss.profileservice.domain.spi.DomainMetaDataFragment;
 import org.jboss.profileservice.domain.spi.DomainMetaDataFragmentVisitor;
-import org.jboss.profileservice.profile.metadata.BasicProfileDeploymentMetaData;
 import org.jboss.profileservice.profile.metadata.BasicSubProfileMetaData;
 import org.jboss.profileservice.profile.metadata.CommonProfileNameSpaces;
 import org.jboss.profileservice.profile.metadata.FeatureCapability;
@@ -89,7 +88,7 @@
       return super.getFeatures();
    }
    
-   @XmlElement(name = "deployment", type = BasicProfileDeploymentMetaData.class)
+   @XmlElement(name = "virtual-deployment", type = BootstrapProfileDeploymentMetaData.class)
    public void setDeployments(List<ProfileDeploymentMetaData> deployments)
    {
       this.deployments = deployments;

Added: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/KernelDeploymentBuilder.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/KernelDeploymentBuilder.java	                        (rev 0)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/bootstrap/KernelDeploymentBuilder.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -0,0 +1,106 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2010, Red Hat 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.profileservice.profile.bootstrap;
+
+import java.net.URL;
+
+import org.jboss.beans.metadata.plugins.AbstractClassLoaderMetaData;
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.profileservice.deployment.DeploymentBuilder;
+import org.jboss.profileservice.spi.ProfileDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
+import org.jboss.xb.binding.Unmarshaller;
+import org.jboss.xb.binding.UnmarshallerFactory;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.SingletonSchemaResolverFactory;
+
+/**
+ * The {@code KernelDeploymentBuilder}. This creates a {@code KernelDeployment} based
+ * on the root ({@code VirtualFile}) of the {@code ProfileDeployment}. In case the 
+ * {@code ProfileDeployment} has a predetermined {@code ClassloadingMetaData} attached,
+ * the one of the {@code KernelDeployment} will be overridden.
+ * 
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class KernelDeploymentBuilder implements DeploymentBuilder<KernelDeployment>
+{
+
+   /** The attachment name. */
+   private static final String ATTACHMENT_NAME = ClassLoadingMetaData.class.getName();
+   
+   /** Unmarshaller factory */
+   private static final UnmarshallerFactory factory = UnmarshallerFactory.newInstance();
+
+   /** The resolver */
+   private static final SchemaBindingResolver resolver = SingletonSchemaResolverFactory.getInstance().getSchemaBindingResolver();
+   
+   /**
+    * {@inheritDoc}
+    */
+   public KernelDeployment createDeployment(ProfileDeployment profileDeployment) throws Exception
+   {
+      final URL url = profileDeployment.getRoot().toURL();
+      if (url == null)
+         throw new IllegalArgumentException("Null url");
+
+      // Unmarshal
+      Unmarshaller unmarshaller = factory.newUnmarshaller();
+      KernelDeployment deployment = (KernelDeployment) unmarshaller.unmarshal(url.toString(), resolver);
+      if (deployment == null)
+         throw new RuntimeException("The xml " + url + " is not well formed!");
+      deployment.setName(profileDeployment.getName());
+      
+      // Process the predetermined classloading meta data
+      if(profileDeployment.getPredeterminedAttachments().hasAttachment(ATTACHMENT_NAME))
+      {
+         if(deployment instanceof AbstractKernelDeployment)
+         {
+            processClassloadingMetaData(AbstractKernelDeployment.class.cast(deployment), profileDeployment);
+         }     
+      }
+      return deployment;
+   }
+   
+   /**
+    * Process the predetermined classloading meta data.
+    * 
+    * @param deployment the abstract kernel deployment
+    * @param profileDeployment the profile deployment
+    */
+   protected void processClassloadingMetaData(AbstractKernelDeployment deployment, ProfileDeployment profileDeployment)
+   {
+      VirtualDeploymentMetaData deploymentMetaData = profileDeployment.getDeploymentInfo().getMetaData();
+      VFSClassLoaderFactory clmd = profileDeployment.getPredeterminedAttachments().getAttachment(ATTACHMENT_NAME, VFSClassLoaderFactory.class);
+      // 
+      String virtualDeploymentName = deploymentMetaData.getName() + ":" + clmd.getVersion().toString();
+      AbstractClassLoaderMetaData classLoader = new AbstractClassLoaderMetaData(new AbstractInjectionValueMetaData(virtualDeploymentName));
+      deployment.getBeanFactories().add(clmd);
+      deployment.setClassLoader(classLoader);
+   }
+   
+}
+

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/BasicProfileMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/BasicProfileMetaData.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/BasicProfileMetaData.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -30,6 +30,7 @@
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
+import org.jboss.profileservice.Hack;
 import org.jboss.profileservice.domain.spi.DomainMetaDataFragment;
 import org.jboss.profileservice.domain.spi.DomainMetaDataFragmentVisitor;
 import org.jboss.profileservice.profile.metadata.helpers.AbstractProfileMetaData;
@@ -54,8 +55,10 @@
 public class BasicProfileMetaData extends AbstractProfileMetaData implements ProfileMetaData, DomainMetaDataFragment
 {
 
-   /** Requirement on the bootstrap. */
-   private static FeatureRequirement BOOTSTRAP = new FeatureRequirement(CommonProfileNameSpaces.BOOTSTRAP_PROFILE_NAMESPACE);
+   /** Requirement on our namespace. */
+   private static FeatureRequirement REQUIREMENT = new FeatureRequirement(CommonProfileNameSpaces.PROFILE_NAMESPACE);
+
+   private static final boolean disableComplete = Boolean.getBoolean(System.getProperty(Hack.DISABLE_COMPLETE_CHECK, "false"));
    
    /** enable on demand. */
    private boolean onDemand;
@@ -82,7 +85,7 @@
    // FIXME 
    public boolean isCheckComplete()
    {
-      return false;
+      return disableComplete == false;
    }
    
    @Override
@@ -154,7 +157,7 @@
    public void visit(ProfileMetaDataVisitor visitor)
    {
       super.visit(visitor);
-      visitor.addRequirement(BOOTSTRAP);
+      visitor.addRequirement(REQUIREMENT);
       if(aliases != null && aliases.isEmpty() == false)
       {
          for(String alias : aliases)

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/BasicSubProfileMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/BasicSubProfileMetaData.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/BasicSubProfileMetaData.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -48,6 +48,12 @@
    {
       super(name);
    }
+
+   public BasicSubProfileMetaData(String name, DependencyMode mode)
+   {
+      super(name);
+      this.mode = mode;
+   }
    
    @Override
    @XmlAttribute(name = "name")

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/domain/BasicDomainMetaDataVisitor.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/domain/BasicDomainMetaDataVisitor.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/domain/BasicDomainMetaDataVisitor.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -21,10 +21,15 @@
 */
 package org.jboss.profileservice.profile.metadata.domain;
 
+import java.util.Stack;
+
+import org.jboss.profileservice.dependency.ProfileDependencyContext;
 import org.jboss.profileservice.dependency.ProfileMetaDataRegistry;
 import org.jboss.profileservice.domain.spi.DomainMetaDataFragment;
 import org.jboss.profileservice.domain.spi.DomainMetaDataFragmentVisitor;
+import org.jboss.profileservice.profile.metadata.BasicSubProfileMetaData;
 import org.jboss.profileservice.profile.metadata.domain.RequiredProfiles.ResolveRequirement;
+import org.jboss.profileservice.spi.dependency.DependencyMode;
 import org.jboss.profileservice.spi.dependency.ProfileCapability;
 import org.jboss.profileservice.spi.dependency.ProfileRequirement;
 import org.jboss.profileservice.spi.dependency.ProfileRequirementResolver;
@@ -46,6 +51,9 @@
    /** The profile meta data registry. */
    private final ProfileMetaDataRegistry registry;
    
+   /** Implicit dependencies. */
+   private Stack<String> stack = new Stack<String>();
+   
    public BasicDomainMetaDataVisitor(ProfileRequirementResolver resolver, ProfileMetaDataRegistry registry)
    {
       this.resolver = resolver;
@@ -55,9 +63,28 @@
    @Override
    public void addProfileMetaData(ProfileMetaData metaData)
    {
+      final String profileName = metaData.getName();
+      if(profileName == null)
+      {
+         throw new IllegalArgumentException("null profile name");
+      }
+      // Add a domain meta data requirement
       addRequirement(new ResolveRequirement(metaData.getName()));
       registry.registerProfileMetaData(metaData);
+      
+      // Also extract all requirements of the included nodes
       visit(metaData);
+
+      // In case the context does not have dependencies by itself
+      // create a implicit one
+      if(stack.empty() == false)
+      {
+         String previous = stack.pop();
+         ProfileDependencyContext ctx = registry.getContext(profileName);
+         ProfileRequirement requirement = new BasicSubProfileMetaData(previous, DependencyMode.OPTIONAL);
+         ctx.addRequirement(requirement);
+      }
+      stack.push(profileName);
    }
 
    public void addAlias(String name)

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/domain/RequiredProfiles.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/domain/RequiredProfiles.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/domain/RequiredProfiles.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -58,6 +58,14 @@
 public class RequiredProfiles extends AbstractProfileMetaData implements DomainMetaDataFragment
 {
 
+   /** static profile name. */
+   private static final String REQUIRED_NAME = "jboss:profile=required-profiles";
+   
+   public RequiredProfiles()
+   {
+      super(REQUIRED_NAME);
+   }
+   
    @Override
    public List<? extends ProfileDeploymentMetaData> getDeployments()
    {

Added: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/domain/XmlDomainMetaDataRepository.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/domain/XmlDomainMetaDataRepository.java	                        (rev 0)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/domain/XmlDomainMetaDataRepository.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -0,0 +1,104 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2010, Red Hat 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.profileservice.profile.metadata.domain;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import org.jboss.profileservice.domain.AbstractDomainMetaData;
+import org.jboss.profileservice.domain.spi.DomainMetaData;
+import org.jboss.profileservice.domain.spi.DomainMetaDataRepository;
+import org.jboss.profileservice.profile.bootstrap.BootstrapProfileMetaData;
+import org.jboss.profileservice.profile.metadata.BasicProfileMetaData;
+import org.jboss.profileservice.profile.metadata.CommonProfileNameSpaces;
+import org.jboss.profileservice.profile.metadata.plugin.FarmingProfileMetaData;
+import org.jboss.profileservice.profile.metadata.plugin.HotDeploymentProfileMetaData;
+import org.jboss.profileservice.profile.metadata.plugin.PropertyProfileMetaData;
+import org.jboss.xb.binding.Unmarshaller;
+import org.jboss.xb.binding.UnmarshallerFactory;
+import org.jboss.xb.binding.resolver.MutableSchemaResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.SingletonSchemaResolverFactory;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class XmlDomainMetaDataRepository implements DomainMetaDataRepository
+{
+
+   /** The schema resolver. */
+   private static final MutableSchemaResolver resolver = SingletonSchemaResolverFactory.getInstance().getSchemaBindingResolver();
+   
+   static
+   {
+      addSchemaBinding(DomainMetaData.DOMAIN_NAMESPACE, AbstractDomainMetaData.class);
+      // initialize the schema binding     
+      addSchemaBinding(CommonProfileNameSpaces.BOOTSTRAP_PROFILE_NAMESPACE, BootstrapProfileMetaData.class);
+      addSchemaBinding(CommonProfileNameSpaces.PROFILE_NAMESPACE, BasicProfileMetaData.class);
+      addSchemaBinding(CommonProfileNameSpaces.REQUIRED_PROFILE_NAMESPACE, RequiredProfiles.class);
+      addSchemaBinding(CommonProfileNameSpaces.HOTDEPLOY_PROFILE_NAMESPACE, HotDeploymentProfileMetaData.class);
+      addSchemaBinding(CommonProfileNameSpaces.IMMUTABLE_PROFILE_NAMESPACE, PropertyProfileMetaData.class);
+      addSchemaBinding(CommonProfileNameSpaces.FARMING_PROFILE_NAMESPACE, FarmingProfileMetaData.class);
+   }
+   
+   protected static void addSchemaBinding(String nsUri, Class<?> clazz)
+   {
+      resolver.mapURIToClass(nsUri, clazz);
+   }
+   
+   private final URL url;
+   
+   public XmlDomainMetaDataRepository(URL url)
+   {
+      this.url = url;
+   }
+   
+   public DomainMetaData getDomainMetaData() 
+   {
+      try
+      {
+         InputStream is = url.openStream();
+         try
+         {
+            Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller(); 
+            return DomainMetaData.class.cast(unmarshaller.unmarshal(is, resolver));
+         }
+         finally
+         {
+            if(is != null) try
+            {
+               is.close();
+            }
+            catch(IOException ignore)
+            {
+               //
+            }
+         }
+      }
+      catch(Exception e)
+      {
+         throw new RuntimeException("failed to parse " + url, e);
+      }
+   }
+}
+

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/helpers/AbstractProfileKeyMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/helpers/AbstractProfileKeyMetaData.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/helpers/AbstractProfileKeyMetaData.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -73,7 +73,7 @@
          return false;
       
       AbstractProfileKeyMetaData other = AbstractProfileKeyMetaData.class.cast(obj);
-      return equals(name, other.name);
+      return equals(getName(), other.getName());
    }
    
    @Override

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/helpers/AbstractProfileMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/helpers/AbstractProfileMetaData.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/helpers/AbstractProfileMetaData.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -45,6 +45,11 @@
       super();
    }
    
+   public AbstractProfileMetaData(String name)
+   {
+      super(name);
+   }
+   
    public List<ProfileMetaDataVisitorNode> getFeatures()
    {
       return features;

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/plugin/PropertyProfileMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/plugin/PropertyProfileMetaData.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/plugin/PropertyProfileMetaData.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -56,8 +56,8 @@
 public class PropertyProfileMetaData extends AbstractProfileMetaData implements DomainMetaDataFragment
 {
 
-   /** Requirement on the bootstrap. */
-   private static FeatureRequirement BOOTSTRAP = new FeatureRequirement(CommonProfileNameSpaces.BOOTSTRAP_PROFILE_NAMESPACE);
+   /** Requirement on our namespace. */
+   private static FeatureRequirement REQUIREMENT = new FeatureRequirement(CommonProfileNameSpaces.IMMUTABLE_PROFILE_NAMESPACE);
    
    /** The source. */
    private PropertyProfileSourceMetaData source;
@@ -114,7 +114,7 @@
    public void visit(ProfileMetaDataVisitor visitor)
    {
       super.visit(visitor);
-      visitor.addRequirement(BOOTSTRAP);
+      visitor.addRequirement(REQUIREMENT);
    }
    
    public void visit(DomainMetaDataFragmentVisitor visitor)

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/AbstractMavenArtifactRepository.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/AbstractMavenArtifactRepository.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/AbstractMavenArtifactRepository.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -73,9 +73,9 @@
    {
       StringBuilder builder = new StringBuilder();
       builder.append(artifact.getArtifactId());
+      builder.append(ARTIFACT_SEPARATOR).append(artifact.getVersion().toString());
       if(artifact.getClassifier() != null)
          builder.append(ARTIFACT_SEPARATOR).append(artifact.getClassifier());
-      builder.append(ARTIFACT_SEPARATOR).append(artifact.getVersion().toString());
       builder.append(GROUP_SEPARATOR).append(artifact.getPackagingType());
       return builder.toString();
    }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenArtifactMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenArtifactMetaData.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenArtifactMetaData.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -24,15 +24,13 @@
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlTransient;
 
-import org.jboss.profileservice.version.helpers.VersionSupport;
-
 /**
  * The maven artifact meta data.
  * 
  * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
  * @version $Revision$
  */
-public class MavenArtifactMetaData extends VersionSupport implements MavenArtifactId
+public class MavenArtifactMetaData implements MavenArtifactId
 {
 
    /** The serialVersionUID */
@@ -50,6 +48,9 @@
    /** The classifier. */
    private String classifier;
    
+   /** The version. */
+   private String version;
+   
    /** The packaging type. */
    private String packagingType;
    
@@ -126,6 +127,27 @@
    }
 
    /**
+    * Get the version.
+    * 
+    * @param version the version
+    */
+   public void setVersion(String version)
+   {
+      this.version = version;
+   }
+   
+   /**
+    * Set the version.
+    * 
+    * @return the version
+    */
+   @XmlAttribute(name = "version")
+   public String getVersion()
+   {
+      return version;
+   }
+   
+   /**
     * Get the classifier.
     * 
     * @return the classifier
@@ -236,7 +258,6 @@
    {
       buffer.append("group=").append(getGroupId());
       buffer.append(", artifact=").append(getGroupId());
-      buffer.append(", version=").append(getVersion().toString());
    }
 
 }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenArtifactReference.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenArtifactReference.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenArtifactReference.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -24,15 +24,13 @@
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlTransient;
 
-import org.jboss.profileservice.version.helpers.VersionRangeSupport;
-
 /**
  * A reference to a MavenArtifact.
  * 
  * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
  * @version $Revision$
  */
-public class MavenArtifactReference extends VersionRangeSupport implements MavenArtifactId
+public class MavenArtifactReference implements MavenArtifactId
 {
 
    /** The serialVersionUID */
@@ -232,7 +230,7 @@
       if(artifactEquals(other) == false)
          return false;
       
-      return getVersionRange().isInRange(other.getVersion());
+      return true;
       
    }
    
@@ -260,7 +258,6 @@
          buffer.append(", classifier=").append(getClassifier());
       if(getPackagingType() != null)
          buffer.append(", packaging=").append(getPackagingType());
-      buffer.append(", version=").append(getVersionRange().toString());
    }
    
 }

Added: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenMetaDataRepositoryFactory.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenMetaDataRepositoryFactory.java	                        (rev 0)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenMetaDataRepositoryFactory.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -0,0 +1,56 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2010, Red Hat 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.profileservice.repository.artifact.maven;
+
+import java.io.InputStream;
+import java.net.URL;
+
+import org.jboss.xb.binding.Unmarshaller;
+import org.jboss.xb.binding.UnmarshallerFactory;
+import org.jboss.xb.builder.JBossXBBuilder;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class MavenMetaDataRepositoryFactory
+{
+
+   public static MavenArtifactRepositoryMetaData create(final URL url) throws Exception
+   {
+      InputStream is = url.openStream();
+      try
+      {
+         Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller();
+         return MavenArtifactRepositoryMetaData.class.cast(unmarshaller.unmarshal(is, JBossXBBuilder.build(MavenArtifactRepositoryMetaData.class)));
+      }
+      finally
+      {
+         if(is != null)
+         {
+            try { is.close(); } catch (Exception ignore) { }
+         }
+      }
+   }
+   
+}
+

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/domain/support/AbstractDomainMetaDataVisitor.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/domain/support/AbstractDomainMetaDataVisitor.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/domain/support/AbstractDomainMetaDataVisitor.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -29,9 +29,11 @@
 import org.jboss.profileservice.dependency.ProfileMetaDataRegistry;
 import org.jboss.profileservice.domain.spi.DomainMetaDataFragment;
 import org.jboss.profileservice.domain.spi.DomainMetaDataFragmentVisitor;
+import org.jboss.profileservice.profile.metadata.BasicSubProfileMetaData;
 import org.jboss.profileservice.profile.metadata.domain.RequiredProfiles.ResolveRequirement;
 import org.jboss.profileservice.profile.metadata.plugin.EmptyProfileMetaData;
 import org.jboss.profileservice.spi.ProfileKey;
+import org.jboss.profileservice.spi.dependency.DependencyMode;
 import org.jboss.profileservice.spi.dependency.ProfileCapability;
 import org.jboss.profileservice.spi.dependency.ProfileRequirement;
 import org.jboss.profileservice.spi.metadata.ProfileFeatureMetaData;
@@ -53,7 +55,7 @@
    
    private ProfileMetaDataRegistry registry;
    
-   /** The namespace stack. */
+   /** Implicit dependencies. */
    private Stack<String> stack = new Stack<String>();
    
    public AbstractDomainMetaDataVisitor(ProfileMetaDataRegistry domain)
@@ -75,13 +77,33 @@
    @Override
    public void addProfileMetaData(ProfileMetaData metaData)
    {
-      if(metaData.getName() != null && metaData.getName().equals("test") == false)
+      final String profileName = metaData.getName();
+      if(profileName == null)
       {
-         addRequirement(new ResolveRequirement(metaData.getName()));
-         registry.registerProfileMetaData(metaData);
+         throw new IllegalArgumentException("null profile name");
       }
+      if(metaData.getName().equals("test"))
+      {
+         return;
+      }
+      // Add a domain meta data requirement
+      addRequirement(new ResolveRequirement(metaData.getName()));
+      registry.registerProfileMetaData(metaData);
+      
+      // Also extract all requirements of the included nodes
       visit(metaData);
-      log.debug(stack.peek() + " " + metaData.getName());
+
+      // In case the context does not have dependencies by itself
+      // create a implicit one
+      if(stack.empty() == false)
+      {
+         String previous = stack.pop();
+         ProfileDependencyContext ctx = registry.getContext(profileName);        
+         ProfileRequirement requirement = new BasicSubProfileMetaData(previous, DependencyMode.OPTIONAL);
+         ctx.addRequirement(requirement);
+         log.info("setting implicit dependency from (" + profileName +") to ("+previous +")");
+      }
+      stack.push(profileName);
    }
 
    @Override
@@ -118,15 +140,7 @@
    @Override
    public void visit(DomainMetaDataFragment node)
    {
-      stack.push(node.getNameSpace());
-      try
-      {
-         node.visit(this);
-      }
-      finally
-      {
-         stack.pop();
-      }
+      node.visit(this);
    }
    
    @Override

Deleted: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/domain/support/DomainMetaDataRepoSupport.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/domain/support/DomainMetaDataRepoSupport.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/domain/support/DomainMetaDataRepoSupport.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -1,90 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2009, 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.test.profileservice.domain.support;
-
-import java.net.URL;
-
-import org.jboss.profileservice.domain.AbstractDomainMetaData;
-import org.jboss.profileservice.domain.spi.DomainMetaData;
-import org.jboss.profileservice.domain.spi.DomainMetaDataRepository;
-import org.jboss.profileservice.profile.bootstrap.BootstrapProfileMetaData;
-import org.jboss.profileservice.profile.metadata.BasicProfileMetaData;
-import org.jboss.profileservice.profile.metadata.CommonProfileNameSpaces;
-import org.jboss.profileservice.profile.metadata.domain.RequiredProfiles;
-import org.jboss.profileservice.profile.metadata.plugin.FarmingProfileMetaData;
-import org.jboss.profileservice.profile.metadata.plugin.HotDeploymentProfileMetaData;
-import org.jboss.profileservice.profile.metadata.plugin.PropertyProfileMetaData;
-import org.jboss.xb.binding.Unmarshaller;
-import org.jboss.xb.binding.UnmarshallerFactory;
-import org.jboss.xb.binding.resolver.MutableSchemaResolver;
-import org.jboss.xb.binding.sunday.unmarshalling.SingletonSchemaResolverFactory;
-
-/**
- * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
- * @version $Revision$
- */
-public class DomainMetaDataRepoSupport implements DomainMetaDataRepository
-{
-
-   /** The schema resolver. */
-   private static final MutableSchemaResolver resolver = SingletonSchemaResolverFactory.getInstance().getSchemaBindingResolver();
-   
-   static
-   {
-      addSchemaBinding(DomainMetaData.DOMAIN_NAMESPACE, AbstractDomainMetaData.class);
-      // initialize the schema binding     
-      addSchemaBinding(CommonProfileNameSpaces.BOOTSTRAP_PROFILE_NAMESPACE, BootstrapProfileMetaData.class);
-      addSchemaBinding(CommonProfileNameSpaces.PROFILE_NAMESPACE, BasicProfileMetaData.class);
-      addSchemaBinding(CommonProfileNameSpaces.REQUIRED_PROFILE_NAMESPACE, RequiredProfiles.class);
-      addSchemaBinding(CommonProfileNameSpaces.HOTDEPLOY_PROFILE_NAMESPACE, HotDeploymentProfileMetaData.class);
-      addSchemaBinding(CommonProfileNameSpaces.IMMUTABLE_PROFILE_NAMESPACE, PropertyProfileMetaData.class);
-      addSchemaBinding(CommonProfileNameSpaces.FARMING_PROFILE_NAMESPACE, FarmingProfileMetaData.class);
-   }
-   
-   protected static void addSchemaBinding(String nsUri, Class<?> clazz)
-   {
-      resolver.mapURIToClass(nsUri, clazz);
-   }
-   
-   private final URL url;
-   
-   public DomainMetaDataRepoSupport(URL url)
-   {
-      this.url = url;
-   }
-   
-   @Override
-   public DomainMetaData getDomainMetaData() 
-   {
-      try
-      {
-         Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller(); 
-         return DomainMetaData.class.cast(unmarshaller.unmarshal(url.openStream(), resolver));
-      }
-      catch(Exception e)
-      {
-         throw new RuntimeException("failed to parse " + url, e);
-      }
-   }
-   
-}
-

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/test/BasicProfileServiceUnitTestCase.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/test/BasicProfileServiceUnitTestCase.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/test/BasicProfileServiceUnitTestCase.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -31,15 +31,14 @@
 import org.jboss.profileservice.dependency.ProfileDependencyContext;
 import org.jboss.profileservice.dependency.ProfileMetaDataRegistry;
 import org.jboss.profileservice.deployment.hotdeploy.HDScannerFactory;
-import org.jboss.profileservice.domain.spi.DomainMetaDataFragment;
 import org.jboss.profileservice.domain.spi.DomainMetaData;
 import org.jboss.profileservice.metadata.ProfilesMetaDataFactory;
+import org.jboss.profileservice.profile.metadata.domain.XmlDomainMetaDataRepository;
 import org.jboss.profileservice.resolver.AbstractRequirementResolver;
 import org.jboss.profileservice.spi.ProfileKey;
 import org.jboss.profileservice.spi.ProfileService;
 import org.jboss.profileservice.spi.metadata.ProfileMetaData;
 import org.jboss.test.profileservice.domain.support.AbstractDomainMetaDataVisitor;
-import org.jboss.test.profileservice.domain.support.DomainMetaDataRepoSupport;
 import org.jboss.test.profileservice.support.MainDeployerPlugin;
 
 /**
@@ -66,7 +65,7 @@
       metaDataFactory.parse(profiles);
     
       URL domainMetaData = findResource("metadata/domain/domain1.xml");
-      DomainMetaDataRepoSupport support = new DomainMetaDataRepoSupport(domainMetaData);
+      XmlDomainMetaDataRepository support = new XmlDomainMetaDataRepository(domainMetaData);
       DomainMetaData metaData = support.getDomainMetaData();
       assertNotNull(metaData);
 
@@ -81,10 +80,7 @@
          domain.registerProfileMetaData(md);
       }
       AbstractDomainMetaDataVisitor visitor = new AbstractDomainMetaDataVisitor(domain);
-      for(DomainMetaDataFragment node : metaData.getFragments())
-      {
-         visitor.visit(node);
-      }
+      metaData.visit(visitor);
       
       AbstractRequirementResolver resolver = new AbstractRequirementResolver(domain);
       resolver.resolve(visitor.getCtx());

Modified: projects/profileservice/trunk/core/src/test/resources/system/profiles/core-profiles.xml
===================================================================
--- projects/profileservice/trunk/core/src/test/resources/system/profiles/core-profiles.xml	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/core/src/test/resources/system/profiles/core-profiles.xml	2010-05-11 12:40:31 UTC (rev 104679)
@@ -15,18 +15,17 @@
 			of the repository root to easier group files.  
 		 -->
 		<file-repository group="bootstrap" />
-		<!-- 
-			<deployment name="aop.xml" />
-		 -->
-		<deployment name="classloader.xml" />
-		<deployment name="deployers.xml" />
-		<deployment name="profile.xml" />
-		<!-- 
-		<deployment name="jmx.xml" />
-		<deployment name="logging.xml" />
-		<deployment name="vfs.xml" />
-		 -->
-		<management namespace="urn:jboss:profileservice:boostrap:1.0" />
+		<virtual-deployment name="classloader">
+			<meta-inf path="classloader.xml" />
+		</virtual-deployment>
+		<virtual-deployment name="deployers">
+			<meta-inf path="deployers.xml" />
+		</virtual-deployment>
+		<virtual-deployment name="profile">
+			<meta-inf path="profile.xml" />
+		</virtual-deployment>
+		<management namespace="urn:jboss:profileservice:profile:1.0" />
+		<management namespace="urn:jboss:profileservice:profile:static:1.0" />
 	</bootstrap>
 
 	<!--

Modified: projects/profileservice/trunk/plugins/src/main/java/org/jboss/profileservice/plugins/management/util/ManagedObjectProcessor.java
===================================================================
--- projects/profileservice/trunk/plugins/src/main/java/org/jboss/profileservice/plugins/management/util/ManagedObjectProcessor.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/plugins/src/main/java/org/jboss/profileservice/plugins/management/util/ManagedObjectProcessor.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -227,7 +227,7 @@
          MetaType propType = prop.getMetaType();
          if (propType == AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE)
          {
-            processGenericValue ((GenericValue)prop.getValue(), md, context);
+            processGenericValue (GenericValue.class.cast(prop.getValue()), md, context);
          }
          else if (propType.isArray())
          {
@@ -239,7 +239,7 @@
                int length = avalue != null ? avalue.getLength() : 0;
                for(int n = 0; n < length; n ++)
                {
-                  processGenericValue((GenericValue) avalue.getValue(n), md, context);
+                  processGenericValue(GenericValue.class.cast(avalue.getValue(n)), md, context);
                }
             }
          }
@@ -255,7 +255,7 @@
                   MetaValue[] elements = avalue.getElements();
                   for(int n = 0; n < avalue.getSize(); n ++)
                   {
-                     processGenericValue((GenericValue) elements[n], md, context);
+                     processGenericValue(GenericValue.class.cast(elements[n]), md, context);
                   }
                }
             }
@@ -315,7 +315,7 @@
       // TODO: a null is probably an error condition
       if (genericValue != null)
       {
-         ManagedObject propMO = (ManagedObject) genericValue.getValue();
+         ManagedObject propMO = ManagedObject.class.cast(genericValue.getValue());
          // TODO: a null is probably an error condition
          if (propMO != null)
          {

Modified: projects/profileservice/trunk/pom.xml
===================================================================
--- projects/profileservice/trunk/pom.xml	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/pom.xml	2010-05-11 12:40:31 UTC (rev 104679)
@@ -42,6 +42,7 @@
 
 		<version.junit>3.8.2</version.junit>
 		<version.org.jboss.common.core>2.2.17.GA</version.org.jboss.common.core>
+		<version.org.jboss.classloading>2.2.0.Alpha4</version.org.jboss.classloading>
 		<version.org.jboss.deployers>2.2.0.Alpha4</version.org.jboss.deployers>
 		<version.org.jboss.jbossxb>2.0.2.Beta7</version.org.jboss.jbossxb>
 		<version.org.jboss.logging>2.2.0.CR1</version.org.jboss.logging>
@@ -195,6 +196,22 @@
 			</dependency>
 
 			<dependency>
+				<groupId>org.jboss.cl</groupId>
+				<artifactId>jboss-classloading-vfs</artifactId>
+				<version>${version.org.jboss.classloading}</version>
+				<exclusions>
+					<exclusion>
+						<groupId>org.jboss.logging</groupId>
+						<artifactId>jboss-logging-spi</artifactId>
+					</exclusion>
+					<exclusion>
+						<groupId>org.jboss.logging</groupId>
+						<artifactId>jboss-logging-log4j</artifactId>
+					</exclusion>
+				</exclusions>
+			</dependency>
+
+			<dependency>
 				<groupId>org.jboss.man</groupId>
 				<artifactId>jboss-managed</artifactId>
 				<version>${version.org.jboss.man}</version>

Modified: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/ProfileDeployment.java
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/ProfileDeployment.java	2010-05-11 12:36:05 UTC (rev 104678)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/ProfileDeployment.java	2010-05-11 12:40:31 UTC (rev 104679)
@@ -67,6 +67,7 @@
 
    /**
     * Get the predetermined attachments.
+    * {@see Deployment#getPredeterminedManagedObjects()}
     * 
     * @return the predetermined attachments
     */




More information about the jboss-cvs-commits mailing list