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/10/07 04:03:39 UTC
svn commit: r453835 - in /incubator/tuscany/java/sca/kernel:
core/src/main/java/org/apache/tuscany/core/implementation/composite/
core/src/test/java/org/apache/tuscany/core/implementation/composite/
spi/src/main/java/org/apache/tuscany/spi/services/art...
Author: jboynes
Date: Fri Oct 6 19:03:38 2006
New Revision: 453835
URL: http://svn.apache.org/viewvc?view=rev&rev=453835
Log:
support repo lookup for composites used as an implementation
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoader.java
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoaderTestCase.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/artifact/Artifact.java
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoader.java?view=diff&rev=453835&r1=453834&r2=453835
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoader.java Fri Oct 6 19:03:38 2006
@@ -20,6 +20,8 @@
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.Collections;
+import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
@@ -36,7 +38,10 @@
import org.apache.tuscany.spi.loader.LoaderException;
import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.loader.LoaderUtil;
+import org.apache.tuscany.spi.loader.MissingResourceException;
import org.apache.tuscany.spi.model.CompositeImplementation;
+import org.apache.tuscany.spi.services.artifact.Artifact;
+import org.apache.tuscany.spi.services.artifact.ArtifactRepository;
/**
* Loader that handles an <implementation.composite> element.
@@ -47,9 +52,12 @@
private static final QName IMPLEMENTATION_COMPOSITE =
new QName(Version.XML_NAMESPACE_1_0, "implementation.composite");
- @Constructor({"registry"})
- public ImplementationCompositeLoader(@Autowire LoaderRegistry registry) {
+ private final ArtifactRepository artifactRepository;
+
+ public ImplementationCompositeLoader(@Autowire LoaderRegistry registry,
+ @Autowire ArtifactRepository artifactRepository) {
super(registry);
+ this.artifactRepository = artifactRepository;
}
public QName getXMLType() {
@@ -63,6 +71,8 @@
assert IMPLEMENTATION_COMPOSITE.equals(reader.getName());
String name = reader.getAttributeValue(null, "name");
+ String group = reader.getAttributeValue(null, "group");
+ String version = reader.getAttributeValue(null, "version");
String scdlLocation = reader.getAttributeValue(null, "scdlLocation");
String jarLocation = reader.getAttributeValue(null, "jarLocation");
LoaderUtil.skipToEndElement(reader);
@@ -93,6 +103,30 @@
throw new AssertionError("Could not convert URL to a jar: url");
}
impl.setClassLoader(new CompositeClassLoader(new URL[]{jarUrl}, deploymentContext.getClassLoader()));
+ } else if (artifactRepository != null && group != null && version != null) {
+ Artifact artifact = new Artifact();
+ artifact.setGroup(group);
+ artifact.setName(name);
+ artifact.setVersion(version);
+ artifact.setType("jar");
+ artifactRepository.resolve(artifact);
+ if (artifact.getUrl() == null) {
+ MissingResourceException mre = new MissingResourceException(artifact.toString());
+ mre.setIdentifier(name);
+ throw mre;
+ }
+ try {
+ impl.setScdlLocation(new URL("jar:" + artifact.getUrl() + "!/META-INF/sca/default.scdl"));
+ } catch (MalformedURLException e) {
+ throw new AssertionError(e);
+ }
+ Set<URL> artifactURLs = artifact.getUrls();
+ URL[] urls = new URL[artifactURLs.size()];
+ int i = 0;
+ for (URL artifactURL : artifactURLs) {
+ urls[i++] = artifactURL;
+ }
+ impl.setClassLoader(new CompositeClassLoader(urls, deploymentContext.getClassLoader()));
}
return impl;
}
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoaderTestCase.java?view=diff&rev=453835&r1=453834&r2=453835
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoaderTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/ImplementationCompositeLoaderTestCase.java Fri Oct 6 19:03:38 2006
@@ -25,17 +25,21 @@
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
-import static org.osoa.sca.Version.XML_NAMESPACE_1_0;
-
-import org.apache.tuscany.spi.deployer.DeploymentContext;
-import org.apache.tuscany.spi.loader.LoaderException;
-import org.apache.tuscany.spi.model.CompositeImplementation;
-
import junit.framework.TestCase;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reportMatcher;
import static org.easymock.EasyMock.verify;
+import org.easymock.IArgumentMatcher;
+import static org.osoa.sca.Version.XML_NAMESPACE_1_0;
+
+import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.deployer.CompositeClassLoader;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.model.CompositeImplementation;
+import org.apache.tuscany.spi.services.artifact.Artifact;
+import org.apache.tuscany.spi.services.artifact.ArtifactRepository;
/**
* @version $Rev$ $Date$
@@ -47,30 +51,63 @@
private ImplementationCompositeLoader loader;
private XMLStreamReader reader;
private DeploymentContext context;
+ private ArtifactRepository artifactRepository;
public void testName() throws LoaderException, XMLStreamException, MalformedURLException {
String name = "foo";
expect(reader.getName()).andReturn(IMPLEMENTATION_COMPOSITE);
expect(reader.getAttributeValue(null, "name")).andReturn(name);
+ expect(reader.getAttributeValue(null, "group")).andReturn(null);
+ expect(reader.getAttributeValue(null, "version")).andReturn(null);
expect(reader.getAttributeValue(null, "scdlLocation")).andReturn(null);
expect(reader.getAttributeValue(null, "jarLocation")).andReturn(null);
expect(reader.next()).andReturn(END_ELEMENT);
replay(reader);
replay(context);
+ replay(artifactRepository);
CompositeImplementation impl = loader.load(null, reader, context);
verify(reader);
verify(context);
+ verify(artifactRepository);
assertEquals(name, impl.getName());
assertNull(impl.getScdlLocation());
assertNull(impl.getClassLoader());
}
+ public void testWithArtifact() throws LoaderException, XMLStreamException, MalformedURLException {
+ String name = "foo";
+ expect(reader.getName()).andReturn(IMPLEMENTATION_COMPOSITE);
+ expect(reader.getAttributeValue(null, "name")).andReturn(name);
+ expect(reader.getAttributeValue(null, "group")).andReturn("com.example");
+ expect(reader.getAttributeValue(null, "version")).andReturn("1.0");
+ expect(reader.getAttributeValue(null, "scdlLocation")).andReturn(null);
+ expect(reader.getAttributeValue(null, "jarLocation")).andReturn(null);
+ expect(reader.next()).andReturn(END_ELEMENT);
+ replay(reader);
+
+ expect(context.getClassLoader()).andReturn(cl);
+ replay(context);
+ URL url = new URL("http://www.example.com/sca/base.jar");
+ artifactRepository.resolve(artifactMatcher(url, "com.example", name, "1.0"));
+ replay(artifactRepository);
+
+ CompositeImplementation impl = loader.load(null, reader, context);
+ verify(reader);
+ verify(context);
+ verify(artifactRepository);
+ assertEquals(name, impl.getName());
+ assertEquals(new URL("jar:http://www.example.com/sca/base.jar!/META-INF/sca/default.scdl"), impl.getScdlLocation());
+ assertTrue(impl.getClassLoader() instanceof CompositeClassLoader);
+ }
+
public void testWithScdlLocation() throws LoaderException, XMLStreamException, MalformedURLException {
String name = "foo";
expect(reader.getName()).andReturn(IMPLEMENTATION_COMPOSITE);
expect(reader.getAttributeValue(null, "name")).andReturn(name);
+ expect(reader.getAttributeValue(null, "group")).andReturn(null);
+ expect(reader.getAttributeValue(null, "version")).andReturn(null);
expect(reader.getAttributeValue(null, "scdlLocation")).andReturn("bar.scdl");
expect(reader.getAttributeValue(null, "jarLocation")).andReturn(null);
expect(reader.next()).andReturn(END_ELEMENT);
@@ -79,10 +116,12 @@
expect(context.getScdlLocation()).andReturn(new URL("http://www.example.com/sca/base.scdl"));
expect(context.getClassLoader()).andReturn(cl);
replay(context);
+ replay(artifactRepository);
CompositeImplementation impl = loader.load(null, reader, context);
verify(reader);
verify(context);
+ verify(artifactRepository);
assertEquals(name, impl.getName());
assertEquals(new URL("http://www.example.com/sca/bar.scdl"), impl.getScdlLocation());
assertSame(cl, impl.getClassLoader());
@@ -92,6 +131,8 @@
String name = "foo";
expect(reader.getName()).andReturn(IMPLEMENTATION_COMPOSITE);
expect(reader.getAttributeValue(null, "name")).andReturn(name);
+ expect(reader.getAttributeValue(null, "group")).andReturn(null);
+ expect(reader.getAttributeValue(null, "version")).andReturn(null);
expect(reader.getAttributeValue(null, "scdlLocation")).andReturn(null);
expect(reader.getAttributeValue(null, "jarLocation")).andReturn("bar.jar");
expect(reader.next()).andReturn(END_ELEMENT);
@@ -100,10 +141,12 @@
expect(context.getScdlLocation()).andReturn(new URL("http://www.example.com/sca/base.scdl"));
expect(context.getClassLoader()).andReturn(cl);
replay(context);
+ replay(artifactRepository);
CompositeImplementation impl = loader.load(null, reader, context);
verify(reader);
verify(context);
+ verify(artifactRepository);
assertEquals(name, impl.getName());
assertEquals(new URL("jar:http://www.example.com/sca/bar.jar!/META-INF/sca/default.scdl"),
impl.getScdlLocation());
@@ -111,9 +154,39 @@
protected void setUp() throws Exception {
super.setUp();
- loader = new ImplementationCompositeLoader(null);
+ artifactRepository = createMock(ArtifactRepository.class);
reader = createMock(XMLStreamReader.class);
context = createMock(DeploymentContext.class);
cl = getClass().getClassLoader();
+ loader = new ImplementationCompositeLoader(null, artifactRepository);
+ }
+
+ protected static Artifact artifactMatcher(final URL url,
+ final String group,
+ final String name,
+ final String version) {
+ reportMatcher(new IArgumentMatcher() {
+
+ public boolean matches(Object object) {
+ if (!(object instanceof Artifact)) {
+ return false;
+ }
+
+ Artifact artifact = (Artifact) object;
+ boolean match = group.equals(artifact.getGroup()) &&
+ name.equals(artifact.getName()) &&
+ version.equals(artifact.getVersion()) &&
+ "jar".equals(artifact.getType());
+ if (match) {
+ artifact.setUrl(url);
+ }
+ return match;
+ }
+
+ public void appendTo(StringBuffer stringBuffer) {
+ stringBuffer.append(group).append(':').append(name).append(':').append(version);
+ }
+ });
+ return null;
}
}
Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/artifact/Artifact.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/artifact/Artifact.java?view=diff&rev=453835&r1=453834&r2=453835
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/artifact/Artifact.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/artifact/Artifact.java Fri Oct 6 19:03:38 2006
@@ -187,4 +187,11 @@
public void setUrl(URL url) {
this.url = url;
}
+
+
+ public String toString() {
+ StringBuilder buf = new StringBuilder();
+ buf.append(group).append(':').append(name).append(':').append(version).append(':').append(type);
+ return buf.toString();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org