You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jb...@apache.org on 2006/08/08 04:27:20 UTC

svn commit: r429546 - in /incubator/tuscany/java/sca: core/src/main/java/org/apache/tuscany/core/bootstrap/ core/src/main/java/org/apache/tuscany/core/implementation/composite/ spi/src/main/java/org/apache/tuscany/spi/deployer/

Author: jboynes
Date: Mon Aug  7 19:27:19 2006
New Revision: 429546

URL: http://svn.apache.org/viewvc?rev=429546&view=rev
Log:
add loader to handle <dependency> elements
provide a CompositeClassLoader that allows URLs to be added
make composites use the extensible classloader

Added:
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/Dependency.java   (with props)
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/DependencyLoader.java   (with props)
    incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/CompositeClassLoader.java   (with props)
Modified:
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentTypeLoader.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeLoader.java

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java?rev=429546&r1=429545&r2=429546&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java Mon Aug  7 19:27:19 2006
@@ -187,7 +187,7 @@
         // register element loaders
         registerLoader(loaderRegistry, new ComponentLoader(loaderRegistry, propertyFactory));
         registerLoader(loaderRegistry, new ComponentTypeElementLoader(loaderRegistry));
-        registerLoader(loaderRegistry, new CompositeLoader(loaderRegistry));
+        registerLoader(loaderRegistry, new CompositeLoader(loaderRegistry, null));
         registerLoader(loaderRegistry, new IncludeLoader(loaderRegistry));
         registerLoader(loaderRegistry, new InterfaceJavaLoader(loaderRegistry));
         registerLoader(loaderRegistry, new PropertyLoader(loaderRegistry));

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentTypeLoader.java?rev=429546&r1=429545&r2=429546&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentTypeLoader.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentTypeLoader.java Mon Aug  7 19:27:19 2006
@@ -5,6 +5,7 @@
 import org.apache.tuscany.core.deployer.ChildDeploymentContext;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.deployer.CompositeClassLoader;
 import org.apache.tuscany.spi.extension.ComponentTypeLoaderExtension;
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
@@ -32,7 +33,7 @@
                      DeploymentContext deploymentContext)
         throws LoaderException {
         URL scdlLocation = implementation.getScdlLocation();
-        ClassLoader cl = implementation.getClassLoader();
+        ClassLoader cl = new CompositeClassLoader(implementation.getClassLoader());
         deploymentContext = new ChildDeploymentContext(deploymentContext, cl, scdlLocation);
         CompositeComponentType componentType = loadFromSidefile(parent, scdlLocation, deploymentContext);
         implementation.setComponentType(componentType);

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeLoader.java?rev=429546&r1=429545&r2=429546&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeLoader.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeLoader.java Mon Aug  7 19:27:19 2006
@@ -23,10 +23,11 @@
 import javax.xml.stream.XMLStreamReader;
 
 import static org.osoa.sca.Version.XML_NAMESPACE_1_0;
-import org.osoa.sca.annotations.Constructor;
 
+import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.deployer.CompositeClassLoader;
 import org.apache.tuscany.spi.extension.LoaderExtension;
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
@@ -38,7 +39,8 @@
 import org.apache.tuscany.spi.model.Property;
 import org.apache.tuscany.spi.model.ReferenceDefinition;
 import org.apache.tuscany.spi.model.ServiceDefinition;
-import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.services.artifact.Artifact;
+import org.apache.tuscany.spi.services.artifact.ArtifactRepository;
 
 /**
  * Loads a composite component definition from an XML-based assembly file
@@ -48,9 +50,12 @@
 public class CompositeLoader extends LoaderExtension<CompositeComponentType> {
     public static final QName COMPOSITE = new QName(XML_NAMESPACE_1_0, "composite");
 
-    @Constructor({"registry"})
-    public CompositeLoader(@Autowire LoaderRegistry registry) {
+    private final ArtifactRepository artifactRepository;
+
+    public CompositeLoader(@Autowire LoaderRegistry registry,
+                           @Autowire ArtifactRepository artifactRepository) {
         super(registry);
+        this.artifactRepository = artifactRepository;
     }
 
     public QName getXMLType() {
@@ -78,6 +83,18 @@
                         composite.add((ComponentDefinition<? extends Implementation<?>>) o);
                     } else if (o instanceof Include) {
                         composite.add((Include) o);
+                    } else if (o instanceof Dependency) {
+                        Artifact artifact = ((Dependency) o).getArtifact();
+                        if (artifactRepository != null) {
+                            artifactRepository.resolve(artifact);
+                        }
+                        if (artifact.getUrl() != null) {
+                            ClassLoader classLoader = deploymentContext.getClassLoader();
+                            if (classLoader instanceof CompositeClassLoader) {
+                                CompositeClassLoader ccl = (CompositeClassLoader) classLoader;
+                                ccl.addURL(artifact.getUrl());
+                            }
+                        }
                     }
                     reader.next();
                     break;

Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/Dependency.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/Dependency.java?rev=429546&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/Dependency.java (added)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/Dependency.java Mon Aug  7 19:27:19 2006
@@ -0,0 +1,37 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors as applicable
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tuscany.core.implementation.composite;
+
+import org.apache.tuscany.spi.services.artifact.Artifact;
+import org.apache.tuscany.spi.model.ModelObject;
+
+/**
+ * A model object that represents a dependency on an external artifact.
+ *
+ * @version $Rev$ $Date$
+ */
+public class Dependency extends ModelObject {
+    private Artifact artifact;
+
+    public Artifact getArtifact() {
+        return artifact;
+    }
+
+    public void setArtifact(Artifact artifact) {
+        this.artifact = artifact;
+    }
+}

Propchange: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/Dependency.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/Dependency.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/DependencyLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/DependencyLoader.java?rev=429546&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/DependencyLoader.java (added)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/DependencyLoader.java Mon Aug  7 19:27:19 2006
@@ -0,0 +1,78 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors as applicable
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tuscany.core.implementation.composite;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamConstants;
+
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.extension.LoaderExtension;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.services.artifact.Artifact;
+
+/**
+ * Loader for handling <dependency> elements.
+ *
+ * @version $Rev$ $Date$
+ */
+public class DependencyLoader extends LoaderExtension<Dependency> {
+    private static final String NS = "http://tuscany.apache.org/xmlns/1.0-SNAPSHOT";
+    private static final QName DEPENDENCY = new QName(NS, "dependency");
+    private static final QName GROUP = new QName(NS, "group");
+    private static final QName NAME = new QName(NS, "name");
+    private static final QName VERSION = new QName(NS, "version");
+    private static final QName CLASSIFIER = new QName(NS, "classifier");
+    private static final QName TYPE = new QName(NS, "type");
+
+    public DependencyLoader(LoaderRegistry registry) {
+        super(registry);
+    }
+
+    public QName getXMLType() {
+        return DEPENDENCY;
+    }
+
+    public Dependency load(CompositeComponent parent,
+                           XMLStreamReader reader,
+                           DeploymentContext deploymentContext)
+        throws XMLStreamException, LoaderException {
+
+        Artifact artifact = new Artifact();
+        while (reader.nextTag() == XMLStreamConstants.START_ELEMENT) {
+            QName name = reader.getName();
+            String text = reader.getElementText();
+            if (GROUP.equals(name)) {
+                artifact.setGroup(text);
+            } else if (NAME.equals(name)) {
+                artifact.setName(text);
+            } else if (VERSION.equals(name)) {
+                artifact.setVersion(text);
+            } else if (CLASSIFIER.equals(name)) {
+                artifact.setClassifier(text);
+            } else if (TYPE.equals(name)) {
+                artifact.setType(text);
+            }
+        }
+        Dependency dependency = new Dependency();
+        dependency.setArtifact(artifact);
+        return dependency;
+    }
+}

Propchange: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/DependencyLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/composite/DependencyLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/CompositeClassLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/CompositeClassLoader.java?rev=429546&view=auto
==============================================================================
--- incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/CompositeClassLoader.java (added)
+++ incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/CompositeClassLoader.java Mon Aug  7 19:27:19 2006
@@ -0,0 +1,50 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors as applicable
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tuscany.spi.deployer;
+
+import java.net.URLClassLoader;
+import java.net.URL;
+import java.net.URLStreamHandlerFactory;
+
+/**
+ * ClassLoader associated with a composite.
+ *
+ * @version $Rev$ $Date$
+ */
+public class CompositeClassLoader extends URLClassLoader  {
+    private static final URL[] NOURLS = {};
+    
+    public CompositeClassLoader(ClassLoader classLoader) {
+        super(NOURLS, classLoader);
+    }
+
+    public CompositeClassLoader(URL[] urls, ClassLoader classLoader) {
+        super(urls, classLoader);
+    }
+
+    public CompositeClassLoader(URL[] urls) {
+        super(urls);
+    }
+
+    public CompositeClassLoader(URL[] urls, ClassLoader classLoader, URLStreamHandlerFactory urlStreamHandlerFactory) {
+        super(urls, classLoader, urlStreamHandlerFactory);
+    }
+
+    public void addURL(URL url) {
+        super.addURL(url);
+    }
+}

Propchange: incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/CompositeClassLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/deployer/CompositeClassLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org