Author: slaws
Date: Sat May 2 11:24:58 2009
New Revision: 770930
URL: http://svn.apache.org/viewvc?rev=770930&view=rev
Log:
TUSCANY-2978 - Add test code to exercise new JEE sample archives including code
to show how to process an archive that appears outside of the contribution that
references it. See TestExternalEarModelResolver.java. Some jee processing
changes were required to make this work.
Added:
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/tuscany/
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/tuscany/sca/
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/tuscany/sca/test/
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/tuscany/sca/test/contribution/
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/tuscany/sca/test/contribution/jee/
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/tuscany/sca/test/contribution/jee/TestExternalEarModelResolver.java
(with props)
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/resources/META-INF/
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/resources/META-INF/services/
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarAppcompTestCase.java
(with props)
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarNonenhancedTestCase.java
(with props)
Modified:
tuscany/branches/sca-java-1.x/itest/contribution-jee/pom.xml
tuscany/branches/sca-java-1.x/itest/pom.xml
tuscany/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/ExternalEarInfo.java
tuscany/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/xml/JEEImplementationProcessor.java
tuscany/branches/sca-java-1.x/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBootStrapper.java
Modified: tuscany/branches/sca-java-1.x/itest/contribution-jee/pom.xml
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/itest/contribution-jee/pom.xml?rev=770930&r1=770929&r2=770930&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/itest/contribution-jee/pom.xml (original)
+++ tuscany/branches/sca-java-1.x/itest/contribution-jee/pom.xml Sat May 2
11:24:58 2009
@@ -83,13 +83,6 @@
<artifactId>tuscany-implementation-web-runtime</artifactId>
<version>1.6-SNAPSHOT</version>
</dependency>
-
- <dependency>
- <groupId>org.apache.tuscany.sca</groupId>
-
<artifactId>itest-contribution-jee-samples-6-war-appcomp-contrib-implicit</artifactId>
- <version>1.6-SNAPSHOT</version>
- <type>war</type>
- </dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
@@ -114,5 +107,57 @@
<artifactId>geronimo-el_1.0_spec</artifactId>
<version>1.0.1</version>
</dependency>
+
+ <!-- the sample war, jar and ear files that are used to test JEE
contribution processing -->
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+
<artifactId>itest-contribution-jee-samples-1-war-nonenhanced</artifactId>
+ <version>1.6-SNAPSHOT</version>
+ <type>war</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+
<artifactId>itest-contribution-jee-samples-6-war-appcomp-contrib-implicit</artifactId>
+ <version>1.6-SNAPSHOT</version>
+ <type>war</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+
<artifactId>itest-contribution-jee-samples-7-ejb-nonenhanced</artifactId>
+ <version>1.6-SNAPSHOT</version>
+ <type>ejb</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+
<artifactId>itest-contribution-jee-samples-13-ear-nonenhanced</artifactId>
+ <version>1.6-SNAPSHOT</version>
+ <type>ear</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+
<artifactId>itest-contribution-jee-samples-29-ear-appcomp-contrib-implicit</artifactId>
+ <version>1.6-SNAPSHOT</version>
+ <type>ear</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+
<artifactId>itest-contribution-jee-samples-35-scajar-ear-nonenhanced</artifactId>
+ <version>1.6-SNAPSHOT</version>
+ <type>jar</type>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+
<artifactId>itest-contribution-jee-samples-41-scajar-ear-appcomp</artifactId>
+ <version>1.6-SNAPSHOT</version>
+ <type>jar</type>
+ </dependency>
+
</dependencies>
</project>
Added:
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/tuscany/sca/test/contribution/jee/TestExternalEarModelResolver.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/tuscany/sca/test/contribution/jee/TestExternalEarModelResolver.java?rev=770930&view=auto
==============================================================================
---
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/tuscany/sca/test/contribution/jee/TestExternalEarModelResolver.java
(added)
+++
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/tuscany/sca/test/contribution/jee/TestExternalEarModelResolver.java
Sat May 2 11:24:58 2009
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.sca.test.contribution.jee;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.contribution.Artifact;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.jee.ExternalEarInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEApplicationInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEIntrospector;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionService;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.UtilityExtensionPoint;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+import org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain;
+
+public class TestExternalEarModelResolver implements ModelResolver {
+
+ private Map<URI, ExternalEarInfo> map = new HashMap<URI,
ExternalEarInfo>();
+ private JavaEEIntrospector jeeIntrospector;
+ private ContributionService contributionService;
+
+
+ public TestExternalEarModelResolver(Contribution contribution,
ExtensionPointRegistry extensionPoints) {
+ jeeIntrospector =
extensionPoints.getExtensionPoint(JavaEEIntrospector.class);
+ UtilityExtensionPoint utilities =
extensionPoints.getExtensionPoint(UtilityExtensionPoint.class);
+ contributionService = utilities.getUtility(ContributionService.class);
+
+ }
+
+ public void addModel(Object resolved) {
+ ExternalEarInfo jeeApp = (ExternalEarInfo)resolved;
+ map.put(jeeApp.getAppInfo().getUri(), jeeApp);
+ }
+
+ public Object removeModel(Object resolved) {
+ return map.remove(((ExternalEarInfo)resolved).getAppInfo().getUri());
+ }
+
+ public <T> T resolveModel(final Class<T> modelClass, T unresolved) {
+ URI uri = ((ExternalEarInfo)unresolved).getAppInfo().getUri();
+ if (uri != null) {
+ ExternalEarInfo resolved = (ExternalEarInfo) map.get(uri);
+ if (resolved != null) {
+ return modelClass.cast(resolved);
+ } else {
+ // if you don't care about application composites you can
+ // simply read the EAR directly
+ /*
+ try {
+ File f = new File(uri.toString());
+ final JavaEEApplicationInfo o =
jeeIntrospector.introspectJeeArchive(f.toURI().toURL());
+ return (T)new ExternalEarInfo() {
+ public JavaEEApplicationInfo getAppInfo() {
+ return (JavaEEApplicationInfo)o;
+ }
+ };
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ */
+
+ // if you do care about the application composite you
+ // need to process the ear as a contribution
+ try{
+ // find the location of the ear using a very specific
algorithm
+ URL earLocation = null;
+ if (
uri.toString().equals("itest-contribution-jee-samples-13-ear-nonenhanced.ear")){
+ earLocation = new
File("../contribution-jee-samples/ear-nonenhanced/target/itest-contribution-jee-samples-13-ear-nonenhanced.ear").toURL();
+ } else if (
uri.toString().equals("itest-contribution-jee-samples-29-ear-appcomp-contrib-implicit.ear")){
+ earLocation = new
File("../contribution-jee-samples/ear-appcomp-contrib-implicit/target/itest-contribution-jee-samples-29-ear-appcomp-contrib-implicit.ear").toURL();
+ } else {
+ return unresolved;
+ }
+
+ // if you do care about application composites we have
+ // to process the EAR as a contribution
+ Contribution contribution =
contributionService.contribute(uri.toString(), earLocation, false);
+
+ JavaEEApplicationInfo appInfo = null;
+ Composite appComposite = null;
+
+ // get the ear info
+ for (Artifact artifact : contribution.getArtifacts()){
+ if (artifact.getModel() instanceof
JavaEEApplicationInfo){
+ appInfo =
(JavaEEApplicationInfo)artifact.getModel();
+ }
+
+ if
(artifact.getURI().equals("META-INF/application.composite")){
+ appComposite = (Composite)artifact.getModel();
+ }
+ }
+
+
+ final JavaEEApplicationInfo returnAppInfo = appInfo;
+ final Composite returnAppComposite = appComposite;
+
+ return (T)new ExternalEarInfo() {
+ public JavaEEApplicationInfo getAppInfo() {
+ return returnAppInfo;
+ }
+ public Composite getAppComposite() {
+ return returnAppComposite;
+ }
+ };
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ return unresolved;
+ }
+
+}
Propchange:
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/tuscany/sca/test/contribution/jee/TestExternalEarModelResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/java/org/apache/tuscany/sca/test/contribution/jee/TestExternalEarModelResolver.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver?rev=770930&view=auto
==============================================================================
---
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
(added)
+++
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
Sat May 2 11:24:58 2009
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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.
+
+org.apache.tuscany.sca.test.contribution.jee.TestExternalEarModelResolver;model=org.apache.tuscany.sca.contribution.jee.ExternalEarInfo
Added:
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarAppcompTestCase.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarAppcompTestCase.java?rev=770930&view=auto
==============================================================================
---
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarAppcompTestCase.java
(added)
+++
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarAppcompTestCase.java
Sat May 2 11:24:58 2009
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.sca.test.contribution.jee;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.contribution.Artifact;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.jee.ExternalEarInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEApplicationInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEIntrospector;
+import org.apache.tuscany.sca.contribution.jee.impl.JavaEEApplicationInfoImpl;
+import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import
org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
+import org.apache.tuscany.sca.contribution.service.ContributionService;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain;
+import org.apache.tuscany.sca.implementation.ejb.EJBImplementation;
+import org.apache.tuscany.sca.implementation.jee.JEEImplementation;
+import org.apache.tuscany.sca.implementation.web.WebImplementation;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+
+public class SCAJarEarAppcompTestCase {
+
+ private static final String CONTRIBUTION_001_ID = "contribution001/";
+
+ private ClassLoader cl;
+ private EmbeddedSCADomain domain;
+ private ContributionService contributionService;
+
+ @Before
+ public void setUp() throws Exception {
+ //Create a test embedded SCA domain
+ cl = getClass().getClassLoader();
+ domain = new EmbeddedSCADomain(cl, "http://localhost");
+
+ //Start the domain
+ domain.start();
+
+ //get a reference to the contribution service
+ contributionService = domain.getContributionService();
+ }
+
+ /**
+ * SCAJAR - It's an SCA contribution in a JAR with no nested archives
+ * but which references a...
+ * EAR - It's an JEE EAR file
+ * appcomp - It has an application composite in it
+ *
+ */
+ @Test
+ public void testSCAJarEarNonenhanced() throws Exception {
+
+ URL contributionLocation = new
File("../contribution-jee-samples/scajar-ear-appcomp/target/itest-contribution-jee-samples-41-scajar-ear-appcomp.jar").toURL();
+ Contribution contribution =
contributionService.contribute(CONTRIBUTION_001_ID, contributionLocation,
false);
+
+ Assert.assertNotNull(contribution);
+
+ Composite composite = null;
+ for (Artifact artifact : contribution.getArtifacts()){
+ if (artifact.getModel() instanceof Composite){
+ composite = (Composite) artifact.getModel();
+ }
+ }
+
+ Assert.assertNotNull(composite);
+
+ Assert.assertEquals(2, composite.getComponents().size());
+ Assert.assertEquals(1,
composite.getComponents().get(1).getImplementation().getServices().size());
+ Assert.assertEquals("TheService",
composite.getComponents().get(1).getImplementation().getServices().get(0).getName());
+
+ }
+
+}
Propchange:
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarAppcompTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarAppcompTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarNonenhancedTestCase.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarNonenhancedTestCase.java?rev=770930&view=auto
==============================================================================
---
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarNonenhancedTestCase.java
(added)
+++
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarNonenhancedTestCase.java
Sat May 2 11:24:58 2009
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.sca.test.contribution.jee;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.contribution.Artifact;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.jee.ExternalEarInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEApplicationInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEIntrospector;
+import org.apache.tuscany.sca.contribution.jee.impl.JavaEEApplicationInfoImpl;
+import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import
org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
+import org.apache.tuscany.sca.contribution.service.ContributionService;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain;
+import org.apache.tuscany.sca.implementation.ejb.EJBImplementation;
+import org.apache.tuscany.sca.implementation.jee.JEEImplementation;
+import org.apache.tuscany.sca.implementation.web.WebImplementation;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+
+public class SCAJarEarNonenhancedTestCase {
+
+ private static final String CONTRIBUTION_001_ID = "contribution001/";
+ private static final String CONTRIBUTION_002_ID = "contribution002/";
+
+ private ClassLoader cl;
+ private EmbeddedSCADomain domain;
+ private ContributionService contributionService;
+
+ /**
+ * setUp() is a method in JUnit Frame Work which is executed before all
others methods in the class extending
+ * unit.framework.TestCase. So this method is used to create a test
Embedded SCA Domain, to start the SCA Domain and
+ * to get a reference to the contribution service
+ */
+
+ @Before
+ public void setUp() throws Exception {
+ //Create a test embedded SCA domain
+ cl = getClass().getClassLoader();
+ domain = new EmbeddedSCADomain(cl, "http://localhost");
+
+ //Start the domain
+ domain.start();
+
+ //get a reference to the contribution service
+ contributionService = domain.getContributionService();
+ }
+
+ /**
+ * SCAJAR - It's an SCA contribution in a JAR with no nested archives
+ * but which references a...
+ * EAR - It's an JEE EAR file
+ * nonenhanced - It has no SCA enhancements. Just a normal EAR
+ *
+ */
+ @Test
+ public void testSCAJarEarNonenhanced() throws Exception{
+ /* some thoughts about how to preprocess the ear
+ * as an alternative to relying on the model resolver
+ * to do contribution processing.
+
+ // Get some things from the extension registry that help us create the
+ // link between the contribution and the ear that it references
+ ExtensionPointRegistry registry = domain.getExtensionPointRegistry();
+ ModelResolverExtensionPoint modelResolvers =
registry.getExtensionPoint(ModelResolverExtensionPoint.class);
+ Class<? extends ModelResolver> externalEarModelResolver =
modelResolvers.getResolver(ExternalEarInfo.class);
+
+ // locate the ear
+ URL earLocation = new
File("../contribution-jee-samples/ear-nonenhanced/target/itest-contribution-jee-samples-13-ear-nonenhanced.ear").toURL();
+ contributionService.contribute(CONTRIBUTION_001_ID, earLocation,
false);
+
+ // find the app info
+ for (Artifact artifact :
contributionService.getContribution(CONTRIBUTION_001_ID).getArtifacts()){
+ if (artifact.getModel() instanceof JavaEEApplicationInfo){
+ // need to make this model available to the external ear model
+ // resolver. But how?
+ }
+ }
+ */
+
+ URL contributionLocation = new
File("../contribution-jee-samples/scajar-ear-nonenhanced/target/itest-contribution-jee-samples-35-scajar-ear-nonenhanced.jar").toURL();
+ Contribution contribution =
contributionService.contribute(CONTRIBUTION_002_ID, contributionLocation,
false);
+
+ Assert.assertNotNull(contribution);
+
+ Composite composite = null;
+ for (Artifact artifact : contribution.getArtifacts()){
+ if (artifact.getModel() instanceof Composite){
+ composite = (Composite) artifact.getModel();
+ }
+ }
+
+ Assert.assertNotNull(composite);
+
+ Assert.assertEquals(2, composite.getComponents().size());
+ Assert.assertEquals(1,
composite.getComponents().get(1).getImplementation().getServices().size());
+ Assert.assertEquals("HelloworldServiceBean_HelloworldService",
composite.getComponents().get(1).getImplementation().getServices().get(0).getName());
+ }
+
+}
Propchange:
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarNonenhancedTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tuscany/branches/sca-java-1.x/itest/contribution-jee/src/test/java/org/apache/tuscany/sca/test/contribution/jee/SCAJarEarNonenhancedTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: tuscany/branches/sca-java-1.x/itest/pom.xml
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/itest/pom.xml?rev=770930&r1=770929&r2=770930&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/itest/pom.xml (original)
+++ tuscany/branches/sca-java-1.x/itest/pom.xml Sat May 2 11:24:58 2009
@@ -79,6 +79,7 @@
<module>contribution-classloader</module> -->
<module>contribution-jee-samples</module>
<module>contribution-jee</module>
+ <module>contribution-jee-samples</module>
<module>conversations</module>
<module>corba</module>
<module>conversations-ws</module>
Modified:
tuscany/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/ExternalEarInfo.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/ExternalEarInfo.java?rev=770930&r1=770929&r2=770930&view=diff
==============================================================================
---
tuscany/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/ExternalEarInfo.java
(original)
+++
tuscany/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/ExternalEarInfo.java
Sat May 2 11:24:58 2009
@@ -18,6 +18,8 @@
*/
package org.apache.tuscany.sca.contribution.jee;
+import org.apache.tuscany.sca.assembly.Composite;
+
/**
* @version $Rev: 755722 $ $Date: 2009-03-18 20:23:02 +0000 (Wed, 18 Mar 2009)
$
@@ -25,4 +27,5 @@
public interface ExternalEarInfo {
JavaEEApplicationInfo getAppInfo();
+ Composite getAppComposite();
}
Modified:
tuscany/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/xml/JEEImplementationProcessor.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/xml/JEEImplementationProcessor.java?rev=770930&r1=770929&r2=770930&view=diff
==============================================================================
---
tuscany/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/xml/JEEImplementationProcessor.java
(original)
+++
tuscany/branches/sca-java-1.x/modules/implementation-jee/src/main/java/org/apache/tuscany/sca/implementation/jee/xml/JEEImplementationProcessor.java
Sat May 2 11:24:58 2009
@@ -116,6 +116,7 @@
String archive = implementation.getArchive();
if (uri != null) {
Object moduleInfo = null;
+ ExternalEarInfo extEar = null;
if(uri.equals("")) {
if(moduleInfo == null) {
WebModuleInfo unresolved = new WebModuleInfoImpl();
@@ -154,12 +155,19 @@
} else if(uri.endsWith(".ear")) {
final JavaEEApplicationInfo appInfo = new
JavaEEApplicationInfoImpl();
appInfo.setUri(URI.create(archive));
- ExternalEarInfo ee = new ExternalEarInfo() {
+ ExternalEarInfo unresolved = new ExternalEarInfo() {
public JavaEEApplicationInfo getAppInfo() {
return appInfo;
+ }
+ public Composite getAppComposite() {
+ return null;
}};
- ee = resolver.resolveModel(ExternalEarInfo.class, ee);
- moduleInfo = ee.getAppInfo();
+
+ ExternalEarInfo resolved =
resolver.resolveModel(ExternalEarInfo.class, unresolved);
+ if(resolved != unresolved) {
+ extEar = resolved;
+ }
+ moduleInfo = resolved.getAppInfo();
}
if(moduleInfo instanceof WebModuleInfo) {
@@ -215,21 +223,30 @@
}
} else if(moduleInfo instanceof JavaEEApplicationInfo) {
// Check for application composite
- ModelObject unresolved = new ModelObjectImpl();
-
unresolved.setUri(URI.create("META-INF/application.composite"));
- ModelObject resolved =
resolver.resolveModel(ModelObject.class, unresolved);
- if(resolved != unresolved) {
+ Composite appComposite = null;
+ if(extEar != null) {
+ appComposite = extEar.getAppComposite();
+ } else {
+ ModelObject unresolved = new ModelObjectImpl();
+
unresolved.setUri(URI.create("META-INF/application.composite"));
+ ModelObject resolved =
resolver.resolveModel(ModelObject.class, unresolved);
+ if(resolved != unresolved) {
+ // Found application composite
+ appComposite = (Composite)resolved.getObject();
+ }
+ }
+
+ if(appComposite != null) {
// Found application composite
- Composite appComposite = (Composite)resolved.getObject();
implementation.getServices().addAll(appComposite.getServices());
implementation.getReferences().addAll(appComposite.getReferences());
implementation.getProperties().addAll(appComposite.getProperties());
- }
+ }
// TODO: Obtain includeDefaults value from the composite
boolean includeDefaults = false;
- if(includeDefaults || resolved == unresolved) {
+ if(includeDefaults || appComposite == null) {
if(jeeExtension != null) {
ComponentType ct =
jeeExtension.createImplementationJeeComponentType((JavaEEApplicationInfo)moduleInfo);
implementation.getServices().addAll(ct.getServices());
Modified:
tuscany/branches/sca-java-1.x/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBootStrapper.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBootStrapper.java?rev=770930&r1=770929&r2=770930&view=diff
==============================================================================
---
tuscany/branches/sca-java-1.x/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBootStrapper.java
(original)
+++
tuscany/branches/sca-java-1.x/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBootStrapper.java
Sat May 2 11:24:58 2009
@@ -150,7 +150,6 @@
monitorFactory = new DefaultMonitorFactoryImpl();
monitor = monitorFactory.createMonitor();
utilities.addUtility(monitorFactory);
- //logger.fine("No MonitorFactory is found on the classpath.");
}
// Create a contribution service
@@ -166,6 +165,9 @@
policyDefinitions,
policyDefinitionsResolver,
monitor);
+
+ // add the contribution service into the utility extension point
+ utilities.addUtility(contributionService);
// Create the ScopeRegistry
scopeRegistry = RuntimeBuilder.createScopeRegistry(registry);