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 2007/02/23 03:46:21 UTC

svn commit: r510773 - in /incubator/tuscany/java/sca/runtime: itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/ itest/smoketest/ webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/

Author: jboynes
Date: Thu Feb 22 18:46:21 2007
New Revision: 510773

URL: http://svn.apache.org/viewvc?view=rev&rev=510773
Log:
support classpath extension for the itest plugin

Modified:
    incubator/tuscany/java/sca/runtime/itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/Dependency.java
    incubator/tuscany/java/sca/runtime/itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/TuscanyITestMojo.java
    incubator/tuscany/java/sca/runtime/itest/smoketest/pom.xml
    incubator/tuscany/java/sca/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/Dependency.java

Modified: incubator/tuscany/java/sca/runtime/itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/Dependency.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/runtime/itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/Dependency.java?view=diff&rev=510773&r1=510772&r2=510773
==============================================================================
--- incubator/tuscany/java/sca/runtime/itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/Dependency.java (original)
+++ incubator/tuscany/java/sca/runtime/itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/Dependency.java Thu Feb 22 18:46:21 2007
@@ -21,10 +21,9 @@
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 
-
 /**
  * Represents a configured tuscany dependency for boot and extension libraries.
- * 
+ *
  * @version $Rev$ $Date$
  */
 public class Dependency {
@@ -57,10 +56,10 @@
 
     /**
      * Initializes the field.
-     * 
-     * @param groupId Group id.
+     *
+     * @param groupId    Group id.
      * @param artifactId Artifact id.
-     * @param version Artifact version.
+     * @param version    Artifact version.
      */
     public Dependency(String groupId, String artifactId, String version) {
         super();
@@ -71,7 +70,7 @@
 
     /**
      * Gets the artifact using the specified artifact factory.
-     * 
+     *
      * @param artifactFactory Artifact factory to use.
      * @return Artifact identified by the dependency.
      */

Modified: incubator/tuscany/java/sca/runtime/itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/TuscanyITestMojo.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/runtime/itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/TuscanyITestMojo.java?view=diff&rev=510773&r1=510772&r2=510773
==============================================================================
--- incubator/tuscany/java/sca/runtime/itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/TuscanyITestMojo.java (original)
+++ incubator/tuscany/java/sca/runtime/itest/plugin/src/main/java/org/apache/tuscany/sca/plugin/itest/TuscanyITestMojo.java Thu Feb 22 18:46:21 2007
@@ -28,11 +28,19 @@
 import java.util.Map;
 import java.util.Properties;
 import java.util.Collection;
+import java.util.Set;
+import java.util.HashSet;
 
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.metadata.ResolutionGroup;
+import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -56,6 +64,7 @@
 import org.apache.tuscany.spi.model.CompositeImplementation;
 import org.apache.tuscany.spi.model.Implementation;
 import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.deployer.CompositeClassLoader;
 
 /**
  * Integration-tests an SCA composite by running it in local copy of Apache Tuscany
@@ -125,6 +134,13 @@
     public URL systemScdl;
 
     /**
+     * Set of extension artifacts that should be deployed to the runtime.
+     *
+     * @parameter
+     */
+    public Dependency[] extensions;
+
+    /**
      * @parameter expression="${project.testClasspathElements}"
      * @required
      * @readonly
@@ -179,7 +195,8 @@
     public void execute() throws MojoExecutionException, MojoFailureException {
         Log log = getLog();
         log.info("Starting Tuscany...");
-        MavenEmbeddedRuntime runtime = createRuntime();
+        ClassLoader cl = createHostClassLoader(getClass().getClassLoader(), extensions);
+        MavenEmbeddedRuntime runtime = createRuntime(cl);
         runtime.setMonitorFactory(new MavenMonitorFactory(log));
         try {
             runtime.initialize();
@@ -229,6 +246,59 @@
         }
     }
 
+    protected ClassLoader createHostClassLoader(ClassLoader parent, Dependency[] extensions)
+        throws MojoExecutionException {
+        if (extensions == null || extensions.length == 0) {
+            return parent;
+        }
+
+        Set<Artifact> artifacts = new HashSet<Artifact>();
+        for (Dependency extension : extensions) {
+            Artifact artifact = extension.getArtifact(artifactFactory);
+            try {
+                resolver.resolve(artifact, remoteRepositories, localRepository);
+                ResolutionGroup resolutionGroup = metadataSource.retrieve(artifact,
+                                                                          localRepository,
+                                                                          remoteRepositories);
+                ArtifactResolutionResult result = resolver.resolveTransitively(resolutionGroup.getArtifacts(),
+                                                                               artifact,
+                                                                               remoteRepositories,
+                                                                               localRepository,
+                                                                               metadataSource);
+                artifacts.add(artifact);
+                artifacts.addAll(result.getArtifacts());
+            } catch (ArtifactResolutionException e) {
+                throw new MojoExecutionException(e.getMessage(), e);
+            } catch (ArtifactNotFoundException e) {
+                throw new MojoExecutionException(e.getMessage(), e);
+            } catch (ArtifactMetadataRetrievalException e) {
+                throw new MojoExecutionException(e.getMessage(), e);
+            }
+        }
+        URL[] urls = new URL[artifacts.size()];
+        int i = 0;
+        for (Artifact artifact : artifacts) {
+            File file = artifact.getFile();
+            assert file != null;
+            try {
+                urls[i++] = file.toURI().toURL();
+            } catch (MalformedURLException e) {
+                // toURI should have made this valid
+                throw new AssertionError();
+            }
+        }
+
+        Log log = getLog();
+        if (log.isDebugEnabled()) {
+            log.debug("Tuscany extension classpath:");
+            for (URL url : urls) {
+                log.debug("  " + url);
+            }
+        }
+
+        return new CompositeClassLoader(urls, parent);
+    }
+
     public boolean runSurefire(SurefireTestSuite testSuite) throws MojoExecutionException {
         try {
             Properties status = new Properties();
@@ -264,8 +334,7 @@
         return reporterManager.getNumErrors() == 0 && reporterManager.getNumFailures() == 0;
     }
 
-    protected MavenEmbeddedRuntime createRuntime() throws MojoExecutionException {
-        ClassLoader hostClassLoader = getClass().getClassLoader();
+    protected MavenEmbeddedRuntime createRuntime(ClassLoader hostClassLoader) throws MojoExecutionException {
         if (systemScdl == null) {
             systemScdl = hostClassLoader.getResource("META-INF/tuscany/embeddedMaven.scdl");
         }
@@ -332,7 +401,7 @@
         Map services = componentType.getServices();
         JavaMappedService testService = (JavaMappedService) services.get("testService");
         if (testService == null) {
-            throw new MojoExecutionException("No testServic defined on component: " + definition.getUri());
+            throw new MojoExecutionException("No testService defined on component: " + definition.getUri());
         }
         Map<String, ? extends Operation<?>> operations = testService.getServiceContract().getOperations();
         return new SCATestSet(runtime, name, uri, operations.values());

Modified: incubator/tuscany/java/sca/runtime/itest/smoketest/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/runtime/itest/smoketest/pom.xml?view=diff&rev=510773&r1=510772&r2=510773
==============================================================================
--- incubator/tuscany/java/sca/runtime/itest/smoketest/pom.xml (original)
+++ incubator/tuscany/java/sca/runtime/itest/smoketest/pom.xml Thu Feb 22 18:46:21 2007
@@ -52,6 +52,15 @@
                         </goals>
                     </execution>
                 </executions>
+                <configuration>
+                    <extensions>
+                        <dependency>
+                            <groupId>org.apache.tuscany.sca.kernel</groupId>
+                            <artifactId>tuscany-spi</artifactId>
+                            <version>${pom.version}</version>
+                        </dependency>
+                    </extensions>
+                </configuration>
             </plugin>
         </plugins>
     </build>

Modified: incubator/tuscany/java/sca/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/Dependency.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/Dependency.java?view=diff&rev=510773&r1=510772&r2=510773
==============================================================================
--- incubator/tuscany/java/sca/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/Dependency.java (original)
+++ incubator/tuscany/java/sca/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/Dependency.java Thu Feb 22 18:46:21 2007
@@ -23,7 +23,7 @@
 
 /**
  * Represents a configured tuscany dependency for boot and extension libraries.
- * 
+ *
  * @version $Rev$ $Date$
  */
 public class Dependency {
@@ -50,20 +50,16 @@
 
     /**
      * Default constructor.
-     * 
      */
     public Dependency() {
     }
 
     /**
      * Initializes the field.
-     * 
-     * @param groupId
-     *            Group id.
-     * @param artifactId
-     *            Artifact id.
-     * @param version
-     *            Artifact version.
+     *
+     * @param groupId    Group id.
+     * @param artifactId Artifact id.
+     * @param version    Artifact version.
      */
     public Dependency(String groupId, String artifactId, String version) {
         super();
@@ -74,9 +70,8 @@
 
     /**
      * Gets the artifact using the specified artifact factory.
-     * 
-     * @param artifactFactory
-     *            Artifact factory to use.
+     *
+     * @param artifactFactory Artifact factory to use.
      * @return Artifact identified by the dependency.
      */
     public Artifact getArtifact(ArtifactFactory artifactFactory) {
@@ -85,13 +80,11 @@
 
     /**
      * Checks whether the specified artifact has the same artifact id.
-     * 
-     * @param artifact
-     *            Artifact to be matched.
-     * @return True if the sepcified artifact has the same id.
+     *
+     * @param artifact Artifact to be matched.
+     * @return True if the specified artifact has the same id.
      */
     public boolean match(Artifact artifact) {
-        // TODO Auto-generated method stub
         return artifact.getArtifactId().equals(artifactId);
     }
 }



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