You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2009/04/21 08:45:31 UTC

svn commit: r767015 - in /tuscany/branches/sca-java-1.x: itest/contribution-jee/ modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/...

Author: slaws
Date: Tue Apr 21 06:45:30 2009
New Revision: 767015

URL: http://svn.apache.org/viewvc?rev=767015&view=rev
Log:
TUSCANY-2972 instigate contribution type specific class loading to allow the JEE classloader to be used independently of jar, zip, dir classloading schemes

Added:
    tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/ContributionClassloaderProviderExtensionPoint.java   (with props)
    tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/DefaultContributionClassloaderProviderExtensionPoint.java   (with props)
    tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider
    tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassloaderProviderExtensionPoint
    tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoader.java   (with props)
    tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoaderProvider.java   (with props)
    tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoader.java   (with props)
    tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoaderProvider.java   (with props)
Removed:
    tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JEEClassLoader.java
    tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JEEClassLoaderProvider.java
Modified:
    tuscany/branches/sca-java-1.x/itest/contribution-jee/pom.xml
    tuscany/branches/sca-java-1.x/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java
    tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/ContributionClassLoaderProvider.java
    tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/DefaultContributionClassLoaderProvider.java
    tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java
    tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider
    tuscany/branches/sca-java-1.x/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Contribution.java
    tuscany/branches/sca-java-1.x/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionImpl.java
    tuscany/branches/sca-java-1.x/modules/workspace/src/main/java/org/apache/tuscany/sca/workspace/impl/WorkspaceImpl.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=767015&r1=767014&r2=767015&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 Tue Apr 21 06:45:30 2009
@@ -86,7 +86,7 @@
         
         <dependency>
             <groupId>org.apache.tuscany.sca</groupId>
-            <artifactId>itest-contribution-jee-samples</artifactId>
+            <artifactId>itest-contribution-jee-samples-6</artifactId>
             <version>1.6-SNAPSHOT</version>
         </dependency>
 

Modified: tuscany/branches/sca-java-1.x/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java?rev=767015&r1=767014&r2=767015&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java (original)
+++ tuscany/branches/sca-java-1.x/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java Tue Apr 21 06:45:30 2009
@@ -55,6 +55,7 @@
 import org.apache.tuscany.sca.contribution.service.ContributionRepository;
 import org.apache.tuscany.sca.contribution.service.ContributionService;
 import org.apache.tuscany.sca.contribution.service.ExtensibleContributionListener;
+import org.apache.tuscany.sca.contribution.service.TypeDescriber;
 import org.apache.tuscany.sca.contribution.service.util.IOHelper;
 import org.apache.tuscany.sca.contribution.xml.ContributionMetadataDocumentProcessor;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
@@ -135,7 +136,9 @@
     
     private Monitor monitor;
     
-    private String COMPOSITE_FILE_EXTN = ".composite";    
+    private String COMPOSITE_FILE_EXTN = ".composite";  
+    
+    private TypeDescriber packageTypeDescriber;
 
     public ContributionServiceImpl(ContributionRepository repository,
                                    PackageProcessor packageProcessor,
@@ -166,6 +169,8 @@
         this.policyDefinitionsResolver = policyDefinitionsResolver;
         this.policyDefinitions = policyDefinitions;
         this.monitor = monitor;
+        
+        this.packageTypeDescriber = new PackageTypeDescriberImpl();
     }
     
     /**
@@ -370,6 +375,7 @@
         contribution.setURI(contributionURI);
         contribution.setLocation(locationURL.toString());
         contribution.setModelResolver(modelResolver);
+        contribution.setType(packageTypeDescriber.getType(locationURL, null));
         
         List<URI> contributionArtifacts = null;
 

Modified: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/ContributionClassLoaderProvider.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/ContributionClassLoaderProvider.java?rev=767015&r1=767014&r2=767015&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/ContributionClassLoaderProvider.java (original)
+++ tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/ContributionClassLoaderProvider.java Tue Apr 21 06:45:30 2009
@@ -25,6 +25,15 @@
  * A pluggable utility to provide a classloader for a given contribution
  */
 public interface ContributionClassLoaderProvider {
+    
+    /**
+     * Get the contribution type that this object will provide 
+     * classloaders for. Takes values from o.a.t.s.contribution.PackageType
+     * 
+     * @return
+     */
+    String getContributionType();
+    
     /**
      * Get the classloader for the given contribution
      * @param contribution

Added: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/ContributionClassloaderProviderExtensionPoint.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/ContributionClassloaderProviderExtensionPoint.java?rev=767015&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/ContributionClassloaderProviderExtensionPoint.java (added)
+++ tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/ContributionClassloaderProviderExtensionPoint.java Tue Apr 21 06:45:30 2009
@@ -0,0 +1,55 @@
+/*
+ * 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.contribution.java;
+
+/**
+ * An extension point for contribution classloaders. Contribution 
+ * classloaders respect the classloading strategy for the contribution
+ * in question. For example, a JAR contribution loads classes from its 
+ * root directory while an EAR contribution follows the JEE classloading 
+ * strategy. The choice of classloader is driven by the type of 
+ * contribution being loaded. 
+ *
+ * @version $Rev$ $Date$
+ */
+public interface ContributionClassloaderProviderExtensionPoint {
+    
+    /**
+     * Add a contribution classloader provider extension.
+     * 
+     * @param provider The provider to add
+     */
+    void addProvider(ContributionClassLoaderProvider provider);
+    
+    /**
+     * Remove a contribution classloader provider extension.
+     *  
+     * @param provider The provider to remove
+     */
+    void removeProvider(ContributionClassLoaderProvider provider); 
+    
+    /**
+     * Get a contribution classloader provider for the given contribution type.
+     * @param contributionType the lookup key 
+     * @return The provider
+     */
+    ContributionClassLoaderProvider getProvider(String contributionType);
+
+}

Propchange: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/ContributionClassloaderProviderExtensionPoint.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/ContributionClassloaderProviderExtensionPoint.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/DefaultContributionClassLoaderProvider.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/DefaultContributionClassLoaderProvider.java?rev=767015&r1=767014&r2=767015&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/DefaultContributionClassLoaderProvider.java (original)
+++ tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/DefaultContributionClassLoaderProvider.java Tue Apr 21 06:45:30 2009
@@ -28,9 +28,17 @@
  */
 public class DefaultContributionClassLoaderProvider implements ContributionClassLoaderProvider {
 
-    public DefaultContributionClassLoaderProvider(ExtensionPointRegistry registry) {
+    public DefaultContributionClassLoaderProvider() {
         super();
     }
+    
+    /**
+     * returns null as it is the default provider and applies when no specific
+     * provider has been specified
+     */
+    public String getContributionType() {
+        return null;
+    }
 
     public ClassLoader getClassLoader(Contribution contribution, ClassLoader parent) {
         return new ContributionClassLoader(contribution, parent);

Added: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/DefaultContributionClassloaderProviderExtensionPoint.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/DefaultContributionClassloaderProviderExtensionPoint.java?rev=767015&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/DefaultContributionClassloaderProviderExtensionPoint.java (added)
+++ tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/DefaultContributionClassloaderProviderExtensionPoint.java Tue Apr 21 06:45:30 2009
@@ -0,0 +1,144 @@
+/*
+ * 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.contribution.java;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Constructor;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.PackageProcessor;
+import org.apache.tuscany.sca.contribution.service.ContributionException;
+import org.apache.tuscany.sca.extensibility.ServiceDeclaration;
+import org.apache.tuscany.sca.extensibility.ServiceDiscovery;
+
+
+/**
+ * Default implementation of a contribution classloader provider extension point.
+ *
+ * @version $Rev$ $Date$
+ */
+public class DefaultContributionClassloaderProviderExtensionPoint implements ContributionClassloaderProviderExtensionPoint {
+    
+    private HashMap<String, ContributionClassLoaderProvider> providers = new HashMap<String, ContributionClassLoaderProvider>();
+    private boolean loaded;
+    
+    /**
+     * Constructs a new DefaultModelFactoryExtensionPoint.
+     */
+    public DefaultContributionClassloaderProviderExtensionPoint() {
+    }
+
+    /**
+     * Add a contribution classloader provider extension.
+     * 
+     * @param provider The provider to add
+     */
+    public void addProvider(ContributionClassLoaderProvider provider){
+        providers.put(provider.getContributionType(), provider);
+    }
+    
+    /**
+     * Remove a contribution classloader provider extension.
+     *  
+     * @param provider The provider to remove
+     */
+    public void removeProvider(ContributionClassLoaderProvider provider){
+        providers.remove(provider.getContributionType());
+    }
+    
+    /**
+     * Get a contribution classloader provider for the given contribution type.
+     * @param contributionType the lookup key 
+     * @return The provider
+     */
+    public ContributionClassLoaderProvider getProvider(String contributionType){
+        loadProviders();
+        return providers.get(contributionType);
+    }
+
+    private synchronized void loadProviders() {
+        if (loaded)
+            return;
+
+        // Get the processor service declarations
+        Set<ServiceDeclaration> processorDeclarations; 
+        try {
+            processorDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(ContributionClassLoaderProvider.class);
+        } catch (IOException e) {
+            throw new IllegalStateException(e);
+        }
+        
+        for (ServiceDeclaration processorDeclaration: processorDeclarations) {
+            Map<String, String> attributes = processorDeclaration.getAttributes();
+            
+            // Load a URL artifact processor
+            String contributionType = attributes.get("type");
+            
+            // Create a processor wrapper and register it
+            ContributionClassLoaderProvider provider = new LazyContributionClassLoaderProvider(contributionType, processorDeclaration);
+            addProvider(provider);
+        }
+        
+        loaded = true;
+    }
+
+    /**
+     * A facade for package processors.
+     */
+    private static class LazyContributionClassLoaderProvider implements ContributionClassLoaderProvider {
+        
+        private ServiceDeclaration processorDeclaration;
+        private String contributionType;
+        private ContributionClassLoaderProvider provider;
+        
+        private LazyContributionClassLoaderProvider(String contributionType, ServiceDeclaration processorDeclaration) {
+            this.processorDeclaration = processorDeclaration;
+            this.contributionType = contributionType;
+        }
+
+        public String getContributionType() {
+            return contributionType;
+        }
+        
+        @SuppressWarnings("unchecked")
+        public ClassLoader getClassLoader(Contribution contribution, ClassLoader parent){
+            if (provider == null) {
+                try {
+                    Class<ContributionClassLoaderProvider> providerClass = (Class<ContributionClassLoaderProvider>)processorDeclaration.loadClass();
+                    Constructor<ContributionClassLoaderProvider> constructor = providerClass.getConstructor();
+                    provider = constructor.newInstance();
+                } catch (Exception e) {
+                    throw new IllegalStateException(e);
+                }
+            }
+            return provider.getClassLoader(contribution, parent);
+        }
+    }
+
+}

Propchange: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/DefaultContributionClassloaderProviderExtensionPoint.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/DefaultContributionClassloaderProviderExtensionPoint.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java?rev=767015&r1=767014&r2=767015&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java (original)
+++ tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java Tue Apr 21 06:45:30 2009
@@ -28,6 +28,7 @@
 
 import org.apache.tuscany.sca.contribution.Contribution;
 import org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider;
+import org.apache.tuscany.sca.contribution.java.ContributionClassloaderProviderExtensionPoint;
 import org.apache.tuscany.sca.contribution.java.DefaultContributionClassLoaderProvider;
 import org.apache.tuscany.sca.contribution.resolver.ClassReference;
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
@@ -70,14 +71,16 @@
                 ClassLoader contextClassLoader = ServiceDiscovery.getInstance().getServiceDiscoverer().getClass().getClassLoader();
                 ContributionClassLoaderProvider provider = null;
                 try {
-                    provider =
-                        registry.getExtensionPoint(UtilityExtensionPoint.class)
-                            .getUtility(ContributionClassLoaderProvider.class);
+                    ContributionClassloaderProviderExtensionPoint providers = 
+                        registry.getExtensionPoint(ContributionClassloaderProviderExtensionPoint.class);
+                    
+                    provider = providers.getProvider(contribution.getType());
+
                 } catch (Throwable e) {
                     // Ignore errors
                 }
                 if (provider == null) {
-                    provider = new DefaultContributionClassLoaderProvider(registry);
+                    provider = new DefaultContributionClassLoaderProvider();
                 }
                 cl = provider.getClassLoader(contribution, contextClassLoader);
                 contribution.setClassLoader(cl);

Added: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider?rev=767015&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider (added)
+++ tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider Tue Apr 21 06:45:30 2009
@@ -0,0 +1,21 @@
+# 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.contribution.java.DefaultContributionClassLoaderProvider;type=application/x-compressed
+org.apache.tuscany.sca.contribution.java.DefaultContributionClassLoaderProvider;type=application/vnd.tuscany.folder
+org.apache.tuscany.sca.contribution.java.DefaultContributionClassLoaderProvider;type=application/osgi.bundle
+
+

Added: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassloaderProviderExtensionPoint
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassloaderProviderExtensionPoint?rev=767015&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassloaderProviderExtensionPoint (added)
+++ tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassloaderProviderExtensionPoint Tue Apr 21 06:45:30 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.contribution.java.DefaultContributionClassloaderProviderExtensionPoint

Added: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoader.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoader.java?rev=767015&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoader.java (added)
+++ tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoader.java Tue Apr 21 06:45:30 2009
@@ -0,0 +1,201 @@
+/*
+ * 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.contribution.jee.impl;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.List;
+
+import org.apache.tuscany.sca.contribution.Artifact;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.Export;
+import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.java.JavaImport;
+import org.apache.tuscany.sca.contribution.jee.EjbModuleInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEApplicationInfo;
+import org.apache.tuscany.sca.contribution.jee.WebModuleInfo;
+
+
+public class EARContributionClassLoader extends URLClassLoader {
+    
+    private Contribution contribution;
+    private List<EjbModuleInfo> ejbModules = new ArrayList<EjbModuleInfo>();
+    
+    /**
+     * Constructor for contribution ClassLoader 
+     * 
+     * @param contribution
+     * @param parent
+     * @throws MalformedURLException
+     */
+    public EARContributionClassLoader(Contribution contribution, final ClassLoader parent) {
+        super(new URL[0], parent);
+        
+        this.contribution = contribution;
+        
+        // get the classloaders for any EAR archive that is a contribution
+        for (Artifact artifact : contribution.getArtifacts()){
+            if (artifact.getModel() instanceof JavaEEApplicationInfo){
+                JavaEEApplicationInfo jeeAppInfo = (JavaEEApplicationInfo)artifact.getModel();
+                // TODO - won't these all have the same classloader?
+                ejbModules.addAll(jeeAppInfo.getEjbModuleInfos().values());
+            }
+        }
+             
+    }
+    
+    /* (non-Javadoc)
+     * @see java.net.URLClassLoader#findClass(java.lang.String)
+     * 
+     * Search path for class:
+     *     This contribution
+     *     Imported contributions
+     */
+    @Override   
+    protected Class<?> findClass(String className) throws ClassNotFoundException {
+               
+        Class<?> clazz = null;
+        ClassNotFoundException cne = null;
+                
+        // TODO - Won't these classloaders all be the same?
+        for (EjbModuleInfo ejbModuleInfo : ejbModules){
+            try {
+                clazz = ejbModuleInfo.getModuleClassloader().loadClass(className);
+            } catch (ClassNotFoundException e) {
+                cne = e;
+            }
+            
+            if (clazz != null){
+                break;
+            }
+        }        
+        
+        if (clazz == null){
+            throw cne;
+        }
+             
+        return clazz;
+    }
+
+    
+    /* (non-Javadoc)
+     * @see java.lang.ClassLoader#loadClass(java.lang.String, boolean)
+     * 
+     * Search path for class:
+     *     Parent ClassLoader
+     *     This contribution
+     *     Imported contributions
+     *     
+     */
+    @Override
+    protected synchronized Class<?> loadClass(String className, boolean resolveClass) 
+        throws ClassNotFoundException {
+       
+        Class<?> clazz = null;
+        try {
+            
+            if (this.getParent() != null)
+                clazz = this.getParent().loadClass(className);
+            
+        } catch (ClassNotFoundException e) {
+        }
+
+        if (clazz == null)
+            clazz = findClass(className);
+
+
+        if (resolveClass)
+            this.resolveClass(clazz);
+        return clazz;
+        
+    }
+
+
+   
+    /* (non-Javadoc)
+     * @see java.lang.ClassLoader#getResource(java.lang.String)
+     * 
+     * Find a resource. 
+     * Search path for resource:
+     *     Parent ClassLoader
+     *     This contribution
+     */
+    @Override
+    public URL getResource(String resName) {
+ 
+        URL resource  = null;
+        
+        if (this.getParent() != null) {
+            resource  = this.getParent().getResource(resName);
+        }        
+        if (resource == null) {
+// TODO Which classloader?            
+//           resource  = webModuleInfo.getModuleClassloader().getResource(resName);
+        }
+        
+        return resource;
+    }
+
+    
+    /* (non-Javadoc)
+     * @see java.lang.ClassLoader#getResources(java.lang.String)
+     * 
+     * Return list of resources from this contribution, resources
+     * imported through imported contributions and resources from parent 
+     * ClassLoader.
+     */
+    @Override
+    public Enumeration<URL> getResources(String resName) throws IOException {
+       
+        HashSet<URL> resourceSet = new HashSet<URL>();
+  
+// TODO - which classloader
+//        addEnumerationToCollection(resourceSet, webModuleInfo.getModuleClassloader().getResources(resName));
+        addEnumerationToCollection(resourceSet, super.getResources(resName));
+        
+        return Collections.enumeration(resourceSet);
+    }
+       
+    /*
+     * Add an enumeration to a Collection
+     */
+    private <T extends Object> void addEnumerationToCollection(Collection<T> collection, Enumeration<T> enumeration) {
+        
+        while (enumeration.hasMoreElements())
+            collection.add(enumeration.nextElement());
+    }
+    
+    
+    @Override
+    public String toString() {
+        return "SCA JEE ClassLoader, parent ClassLoader: " + getParent();
+    }
+    
+    
+}

Propchange: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoaderProvider.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoaderProvider.java?rev=767015&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoaderProvider.java (added)
+++ tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoaderProvider.java Tue Apr 21 06:45:30 2009
@@ -0,0 +1,49 @@
+/*
+ * 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.contribution.jee.impl;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.PackageType;
+import org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider;
+import org.apache.tuscany.sca.contribution.java.impl.ContributionClassLoader;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+
+/**
+ * The default implementation of the ContributionClassLoaderProvider
+ */
+public class EARContributionClassLoaderProvider implements ContributionClassLoaderProvider {
+
+    public EARContributionClassLoaderProvider() {
+        super();
+    }
+    
+    public String getContributionType() {
+        return PackageType.EAR;
+    }
+
+    public ClassLoader getClassLoader(Contribution contribution, ClassLoader parent) {
+        // TODO - This is not quite right at the CCL will load up the nested jars
+        //        also. However we do need to pick up the import processing so 
+        //        need a bit of a refactor
+        ContributionClassLoader ccl = new ContributionClassLoader(contribution, parent);
+        return new EARContributionClassLoader(contribution, ccl);
+    }
+
+}

Propchange: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoaderProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EARContributionClassLoaderProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoader.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoader.java?rev=767015&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoader.java (added)
+++ tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoader.java Tue Apr 21 06:45:30 2009
@@ -0,0 +1,191 @@
+/*
+ * 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.contribution.jee.impl;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.List;
+
+import org.apache.tuscany.sca.contribution.Artifact;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.Export;
+import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.java.JavaImport;
+import org.apache.tuscany.sca.contribution.jee.EjbModuleInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEApplicationInfo;
+import org.apache.tuscany.sca.contribution.jee.WebModuleInfo;
+
+
+public class WARContributionClassLoader extends URLClassLoader {
+    
+    private Contribution contribution;
+    private WebModuleInfo webModuleInfo = null;
+    
+    /**
+     * Constructor for contribution ClassLoader 
+     * 
+     * @param contribution
+     * @param parent
+     * @throws MalformedURLException
+     */
+    public WARContributionClassLoader(Contribution contribution, final ClassLoader parent) {
+        super(new URL[0], parent);
+        
+        this.contribution = contribution;
+        
+        // get the classloaders for any WAR archive that is a contribution
+        // TODO extend to case where JEE archive is outside the contribution
+        for (Artifact artifact : contribution.getArtifacts()){
+            if (artifact.getModel() instanceof WebModuleInfo){
+                webModuleInfo = (WebModuleInfo)artifact.getModel();
+                break;
+            } 
+        }
+             
+    }
+    
+    /* (non-Javadoc)
+     * @see java.net.URLClassLoader#findClass(java.lang.String)
+     * 
+     * Search path for class:
+     *     This contribution
+     *     Imported contributions
+     */
+    @Override   
+    protected Class<?> findClass(String className) throws ClassNotFoundException {
+               
+        Class<?> clazz = null;
+        ClassNotFoundException cne = null;
+        
+        try {
+            clazz = webModuleInfo.getModuleClassloader().loadClass(className);
+        } catch (ClassNotFoundException e) {
+            cne = e;
+        }               
+        
+        if (clazz == null){
+            throw cne;
+        }
+             
+        return clazz;
+    }
+
+    
+    /* (non-Javadoc)
+     * @see java.lang.ClassLoader#loadClass(java.lang.String, boolean)
+     * 
+     * Search path for class:
+     *     Parent ClassLoader
+     *     This contribution
+     *     Imported contributions
+     *     
+     */
+    @Override
+    protected synchronized Class<?> loadClass(String className, boolean resolveClass) 
+        throws ClassNotFoundException {
+       
+        Class<?> clazz = null;
+        try {
+            
+            if (this.getParent() != null)
+                clazz = this.getParent().loadClass(className);
+            
+        } catch (ClassNotFoundException e) {
+        }
+
+        if (clazz == null)
+            clazz = findClass(className);
+
+
+        if (resolveClass)
+            this.resolveClass(clazz);
+        return clazz;
+        
+    }
+   
+    
+    /* (non-Javadoc)
+     * @see java.lang.ClassLoader#getResource(java.lang.String)
+     * 
+     * Find a resource. 
+     * Search path for resource:
+     *     Parent ClassLoader
+     *     This contribution
+     */
+    @Override
+    public URL getResource(String resName) {
+ 
+        URL resource  = null;
+        
+        if (this.getParent() != null) {
+            resource  = this.getParent().getResource(resName);
+        }        
+        if (resource == null)
+            resource  = webModuleInfo.getModuleClassloader().getResource(resName);
+        
+        return resource;
+    }
+
+    
+    /* (non-Javadoc)
+     * @see java.lang.ClassLoader#getResources(java.lang.String)
+     * 
+     * Return list of resources from this contribution, resources
+     * imported through imported contributions and resources from parent 
+     * ClassLoader.
+     */
+    @Override
+    public Enumeration<URL> getResources(String resName) throws IOException {
+       
+        HashSet<URL> resourceSet = new HashSet<URL>();
+        
+        addEnumerationToCollection(resourceSet, webModuleInfo.getModuleClassloader().getResources(resName));
+        addEnumerationToCollection(resourceSet, super.getResources(resName));
+        
+        return Collections.enumeration(resourceSet);
+    }
+    
+    
+    /*
+     * Add an enumeration to a Collection
+     */
+    private <T extends Object> void addEnumerationToCollection(Collection<T> collection, Enumeration<T> enumeration) {
+        
+        while (enumeration.hasMoreElements())
+            collection.add(enumeration.nextElement());
+    }
+    
+    
+    @Override
+    public String toString() {
+        return "SCA WAR ClassLoader, parent ClassLoader: " + getParent();
+    }
+    
+    
+}

Propchange: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoaderProvider.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoaderProvider.java?rev=767015&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoaderProvider.java (added)
+++ tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoaderProvider.java Tue Apr 21 06:45:30 2009
@@ -0,0 +1,49 @@
+/*
+ * 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.contribution.jee.impl;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.PackageType;
+import org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider;
+import org.apache.tuscany.sca.contribution.java.impl.ContributionClassLoader;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+
+/**
+ * The default implementation of the ContributionClassLoaderProvider
+ */
+public class WARContributionClassLoaderProvider implements ContributionClassLoaderProvider {
+
+    public WARContributionClassLoaderProvider() {
+        super();
+    }
+    
+    public String getContributionType() {
+        return PackageType.EAR;
+    }
+
+    public ClassLoader getClassLoader(Contribution contribution, ClassLoader parent) {
+        // TODO - This is not quite right at the CCL will load up the nested jars
+        //        also. However we do need to pick up the import processing so 
+        //        need a bit of a refactor
+        ContributionClassLoader ccl = new ContributionClassLoader(contribution, parent);
+        return new WARContributionClassLoader(contribution, ccl);
+    }
+
+}

Propchange: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoaderProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WARContributionClassLoaderProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider?rev=767015&r1=767014&r2=767015&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider (original)
+++ tuscany/branches/sca-java-1.x/modules/contribution-jee-impl/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.java.ContributionClassLoaderProvider Tue Apr 21 06:45:30 2009
@@ -14,4 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License. 
-org.apache.tuscany.sca.contribution.jee.impl.JEEClassLoaderProvider
\ No newline at end of file
+org.apache.tuscany.sca.contribution.jee.impl.EJBContributionClassLoaderProvider;type=application/ear
+org.apache.tuscany.sca.contribution.jee.impl.WARContributionClassLoaderProvider;type=application/war
\ No newline at end of file

Modified: tuscany/branches/sca-java-1.x/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Contribution.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Contribution.java?rev=767015&r1=767014&r2=767015&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Contribution.java (original)
+++ tuscany/branches/sca-java-1.x/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Contribution.java Tue Apr 21 06:45:30 2009
@@ -113,4 +113,19 @@
      */
     void setClassLoader(ClassLoader classLoader);
     
+    /**
+     * Returns the type string based on the types that appear in 
+     * o.a.t.s.contribution.PackageType
+     * 
+     * @return the contribution type string
+     */
+    String getType();
+    
+    /**
+     * Sets the type string based on the types that appear in 
+     * o.a.t.s.contribution.PackageType
+     * 
+     * @param contributionType the contribution type string
+     */
+    void setType(String contributionType);
 }
\ No newline at end of file

Modified: tuscany/branches/sca-java-1.x/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionImpl.java?rev=767015&r1=767014&r2=767015&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionImpl.java (original)
+++ tuscany/branches/sca-java-1.x/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionImpl.java Tue Apr 21 06:45:30 2009
@@ -35,6 +35,7 @@
  * @version $Rev$ $Date$
  */
 class ContributionImpl implements Contribution {
+    private String type;
     private String uri;
     private String location;
     private Object model;
@@ -150,5 +151,13 @@
     	return "Contribution : " + uri + " \n" +
     	       "from: " + location;
     }
+    
+    public String getType() {
+        return type;
+    }
+    
+    public void setType(String contributionType) {
+        this.type = contributionType;
+    }
 
 }

Modified: tuscany/branches/sca-java-1.x/modules/workspace/src/main/java/org/apache/tuscany/sca/workspace/impl/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/workspace/src/main/java/org/apache/tuscany/sca/workspace/impl/WorkspaceImpl.java?rev=767015&r1=767014&r2=767015&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/workspace/src/main/java/org/apache/tuscany/sca/workspace/impl/WorkspaceImpl.java (original)
+++ tuscany/branches/sca-java-1.x/modules/workspace/src/main/java/org/apache/tuscany/sca/workspace/impl/WorkspaceImpl.java Tue Apr 21 06:45:30 2009
@@ -139,4 +139,13 @@
     public void setModelResolver(ModelResolver modelResolver) {
         this.modelResolver = modelResolver;
     }
+    
+    public String getType() {
+        // TODO type only used to determine contribution classloader
+        return null;
+    }
+    
+    public void setType(String contributionType) {
+        // TODO type only used to determine contribution classloader
+    }
 }