[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