You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2010/09/08 07:55:44 UTC

svn commit: r993613 - in /tuscany/sca-java-2.x/trunk: distribution/all/ distribution/all/manifests/ modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/ modules/extensibility-equinox/src/main/java/org/apache/tuscany/...

Author: rfeng
Date: Wed Sep  8 05:55:44 2010
New Revision: 993613

URL: http://svn.apache.org/viewvc?rev=993613&view=rev
Log:
Tidy up binding.rest osgi enablement

Removed:
    tuscany/sca-java-2.x/trunk/distribution/all/manifests/wink-server-1.1.1-incubating.MF
    tuscany/sca-java-2.x/trunk/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/wink-server-1.1.1-incubating.MF
Modified:
    tuscany/sca-java-2.x/trunk/distribution/all/pom.xml
    tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java
    tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
    tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
    tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClassLoaderContext.java
    tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java
    tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclaration.java
    tuscany/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java
    tuscany/sca-java-2.x/trunk/modules/wink/META-INF/MANIFEST.MF
    tuscany/sca-java-2.x/trunk/samples/calculator-rest-osgi/src/test/java/calculator/CalculatorTestCase.java

Modified: tuscany/sca-java-2.x/trunk/distribution/all/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/distribution/all/pom.xml?rev=993613&r1=993612&r2=993613&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/distribution/all/pom.xml (original)
+++ tuscany/sca-java-2.x/trunk/distribution/all/pom.xml Wed Sep  8 05:55:44 2010
@@ -233,12 +233,6 @@
                                      <artifactId>*</artifactId>
                                      <version>*</version>
                                  </artifactManifest>
-								 <artifactManifest>
-									 <groupId>org.apache.wink</groupId>
-									 <artifactId>wink-server</artifactId>
-									 <version>1.1.1-incubating</version>
-									 <manifestFile>${basedir}/manifests/wink-server-1.1.1-incubating.MF</manifestFile>
-								 </artifactManifest>
                              </artifactManifests>
                              <!--artifactAggregations>
                                   <artifactAggregation>

Modified: tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java?rev=993613&r1=993612&r2=993613&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java Wed Sep  8 05:55:44 2010
@@ -24,6 +24,7 @@ import java.util.Enumeration;
 
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.core.MediaType;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -54,6 +55,21 @@ public class TuscanyRESTServlet extends 
         this.registry = registry;
         this.resourceClass = resourceClass;
     }
+    
+    public void init() throws ServletException {
+        ClassLoader cl =
+            ClassLoaderContext.setContextClassLoader(Thread.currentThread().getContextClassLoader(),
+                                                     registry.getServiceDiscovery(),
+                                                     "/META-INF/server/wink-providers");
+        try {
+            super.init();
+        } finally {
+            if (cl != null) {
+                // return previous classLoader
+                Thread.currentThread().setContextClassLoader(cl);
+            }
+        }
+    }
 
     @Override
     public DeploymentConfiguration getDeploymentConfiguration() throws ClassNotFoundException, InstantiationException,
@@ -65,8 +81,8 @@ public class TuscanyRESTServlet extends 
             ClassLoaderContext.setContextClassLoader(Thread.currentThread().getContextClassLoader(),
                                                      registry.getServiceDiscovery(),
                                                      "javax.ws.rs.ext.RuntimeDelegate",
-                                                     "META-INF/wink-alternate-shortcuts.properties",
-                                                     "META-INF/server/wink-providers");
+                                                     "/META-INF/wink-alternate-shortcuts.properties",
+                                                     "/META-INF/server/wink-providers");
 
         DeploymentConfiguration config = null;
         try {

Modified: tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java?rev=993613&r1=993612&r2=993613&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java Wed Sep  8 05:55:44 2010
@@ -95,7 +95,6 @@ public class EquinoxServiceDiscoverer im
 
     }
 
-
     public static class ServiceDeclarationImpl implements ServiceDeclaration {
         private Bundle bundle;
         private URL url;
@@ -167,6 +166,11 @@ public class EquinoxServiceDiscoverer im
             return (javaClass != null && serviceType.isAssignableFrom(javaClass));
         }
 
+        @Override
+        public Enumeration<URL> getResources(final String name) throws IOException {
+            return (Enumeration<URL>) bundle.getResources(name);
+        }
+
     }
 
     /**
@@ -201,7 +205,6 @@ public class EquinoxServiceDiscoverer im
 
     }
 
-
     public ServiceDeclaration getServiceDeclaration(String name) throws IOException {
         Collection<ServiceDeclaration> declarations = getServiceDeclarations(name);
         if (declarations.isEmpty()) {
@@ -256,15 +259,22 @@ public class EquinoxServiceDiscoverer im
 
         // http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/XPathFactory.html
         boolean isPropertyFile = "javax.xml.xpath.XPathFactory".equals(serviceName);
-        boolean isTuscanyService = serviceName.startsWith("org.apache.tuscany.sca.") ||
-                                   serviceName.startsWith("META-INF/services/org.apache.tuscany.sca.");
+        boolean isTuscanyService = serviceName.startsWith("org.apache.tuscany.sca.");
+
+        if (serviceName.startsWith("/")) {
+            // If the service name starts with /, treat it as the entry name
+            serviceName = serviceName.substring(1);
+        } else {
+            // Use JDK SPI pattern
+            serviceName = "META-INF/services/" + serviceName;
+        }
 
         Set<URL> visited = new HashSet<URL>();
         //System.out.println(">>>> getServiceDeclarations()");
         for (Bundle bundle : getBundles(isTuscanyService)) {
-//            if (!isProviderBundle(bundle)) {
-//                continue;
-//            }
+            //            if (!isProviderBundle(bundle)) {
+            //                continue;
+            //            }
             Enumeration<URL> urls = null;
             try {
                 // Use getResources to find resources on the classpath of the bundle
@@ -291,10 +301,6 @@ public class EquinoxServiceDiscoverer im
                 logger.log(Level.SEVERE, e.getMessage(), e);
             }
             if (urls == null) {
-                if(! serviceName.startsWith("META-INF/services/")) {
-                    return getServiceDeclarations("META-INF/services/" + serviceName);
-                }
-
                 continue;
             }
             while (urls.hasMoreElements()) {
@@ -311,7 +317,8 @@ public class EquinoxServiceDiscoverer im
                 try {
                     for (Map<String, String> attributes : ServiceDeclarationParser.load(url, isPropertyFile)) {
                         String className = attributes.get("class");
-                        ServiceDeclarationImpl descriptor = new ServiceDeclarationImpl(bundle, url, className, attributes);
+                        ServiceDeclarationImpl descriptor =
+                            new ServiceDeclarationImpl(bundle, url, className, attributes);
                         descriptors.add(descriptor);
                     }
                 } catch (IOException e) {

Modified: tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java?rev=993613&r1=993612&r2=993613&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java Wed Sep  8 05:55:44 2010
@@ -111,6 +111,12 @@ public class EquinoxServiceDiscovererTes
         descriptors = discoverer.getServiceDeclarations("notthere");
         Assert.assertEquals(0, descriptors.size());
     }
+    
+    @Test
+    public void testDiscoverResources() throws IOException {
+        Collection<ServiceDeclaration> descriptors = discoverer.getServiceDeclarations("/META-INF/services/test.TestService");
+        Assert.assertEquals(2, descriptors.size());
+    }
 
     @Test
     public void testDiscoveryFirst() throws IOException {

Modified: tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClassLoaderContext.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClassLoaderContext.java?rev=993613&r1=993612&r2=993613&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClassLoaderContext.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClassLoaderContext.java Wed Sep  8 05:55:44 2010
@@ -19,11 +19,14 @@
 
 package org.apache.tuscany.sca.extensibility;
 
+import java.io.IOException;
+import java.net.URL;
 import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Enumeration;
 import java.util.List;
 
 import org.apache.tuscany.sca.extensibility.impl.ClassLoaderDelegate;
@@ -124,7 +127,9 @@ public class ClassLoaderContext {
      * @param serviceNames A list of service provider names
      * @return The old TCCL if a new one is set, otherwise null
      */
-    public static ClassLoader setContextClassLoader(ClassLoader parent, ServiceDiscovery discovery, String... serviceNames) {
+    public static ClassLoader setContextClassLoader(ClassLoader parent,
+                                                    ServiceDiscovery discovery,
+                                                    String... serviceNames) {
         ClassLoaderContext context = new ClassLoaderContext(parent, discovery, serviceNames);
         return context.setContextClassLoader();
     }
@@ -135,7 +140,9 @@ public class ClassLoaderContext {
      * @param serviceNames A list of service provider names
      * @return The old TCCL if a new one is set, otherwise null
      */
-    public static ClassLoader setContextClassLoader(ClassLoader parent, ServiceDiscovery discovery, Class<?>... serviceTypes) {
+    public static ClassLoader setContextClassLoader(ClassLoader parent,
+                                                    ServiceDiscovery discovery,
+                                                    Class<?>... serviceTypes) {
         ClassLoaderContext context = new ClassLoaderContext(parent, discovery, serviceTypes);
         return context.setContextClassLoader();
     }
@@ -154,7 +161,15 @@ public class ClassLoaderContext {
         try {
             ServiceDeclaration sd = discovery.getServiceDeclaration(serviceProvider);
             if (sd != null) {
-                return sd.loadClass().getClassLoader();
+                try {
+                    if (sd.loadClass() != null) {
+                        return sd.loadClass().getClassLoader();
+                    } else {
+                        return new ClassLoaderImpl(sd);
+                    }
+                } catch (ClassNotFoundException e) {
+                    return new ClassLoaderImpl(sd);
+                }
             }
         } catch (Exception e) {
             // Ignore
@@ -210,4 +225,29 @@ public class ClassLoaderContext {
         return classLoader;
     }
 
+    private static class ClassLoaderImpl extends ClassLoader {
+        private final ServiceDeclaration sd;
+
+        public ClassLoaderImpl(ServiceDeclaration sd) {
+            super();
+            this.sd = sd;
+        }
+
+        @Override
+        protected Class<?> findClass(String name) throws ClassNotFoundException {
+            return sd.loadClass(name);
+        }
+
+        @Override
+        protected URL findResource(String name) {
+            return sd.getResource(name);
+        }
+
+        @Override
+        protected Enumeration<URL> findResources(String name) throws IOException {
+            return sd.getResources(name);
+        }
+
+    }
+
 }

Modified: tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java?rev=993613&r1=993612&r2=993613&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java Wed Sep  8 05:55:44 2010
@@ -28,6 +28,7 @@ import java.security.PrivilegedActionExc
 import java.security.PrivilegedExceptionAction;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -106,6 +107,11 @@ public class ContextClassLoaderServiceDi
             }
             return (javaClass != null && serviceType.isAssignableFrom(javaClass));
         }
+
+        @Override
+        public Enumeration<URL> getResources(String name) throws IOException {
+            return Collections.enumeration(ContextClassLoaderServiceDiscoverer.this.getResources(name));
+        }
     }
 
     private WeakReference<ClassLoader> classLoaderReference;
@@ -155,7 +161,16 @@ public class ContextClassLoaderServiceDi
 
         // http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/XPathFactory.html
         boolean isPropertyFile = "javax.xml.xpath.XPathFactory".equals(serviceName);
-        String name = "META-INF/services/" + serviceName;
+        
+        String name = serviceName;
+        if (serviceName.startsWith("/")) {
+            // If the service name starts with /, treat it as the entry name
+            name = serviceName.substring(1);
+        } else {
+            // Use JDK SPI pattern
+            name = "META-INF/services/" + serviceName;
+        }
+        
         boolean debug = logger.isLoggable(Level.FINE);
         try {
             for (final URL url : getResources(name)) {

Modified: tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclaration.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclaration.java?rev=993613&r1=993612&r2=993613&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclaration.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclaration.java Wed Sep  8 05:55:44 2010
@@ -19,7 +19,9 @@
 
 package org.apache.tuscany.sca.extensibility;
 
+import java.io.IOException;
 import java.net.URL;
+import java.util.Enumeration;
 import java.util.Map;
 
 /**
@@ -67,6 +69,7 @@ public interface ServiceDeclaration {
     String getClassName();
     
     URL getResource(String name);
+    Enumeration<URL> getResources(String name) throws IOException;
     
     /**
      * The service descriptor might be hashed

Modified: tuscany/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java?rev=993613&r1=993612&r2=993613&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java Wed Sep  8 05:55:44 2010
@@ -52,6 +52,12 @@ public class ContextClassLoaderServiceDi
     }
 
     @Test
+    public void testDiscoverResources() throws IOException {
+        Collection<ServiceDeclaration> descriptors = discover.getServiceDeclarations("/META-INF/services/org.apache.tuscany.sca.extensibility.test.TestInterface");
+        Assert.assertEquals(3, descriptors.size());
+    }
+    
+    @Test
     public void testDiscoveryFirst() throws IOException {
         ServiceDeclaration descriptor =
             discover.getServiceDeclaration("org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint");

Modified: tuscany/sca-java-2.x/trunk/modules/wink/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/wink/META-INF/MANIFEST.MF?rev=993613&r1=993612&r2=993613&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/wink/META-INF/MANIFEST.MF (original)
+++ tuscany/sca-java-2.x/trunk/modules/wink/META-INF/MANIFEST.MF Wed Sep  8 05:55:44 2010
@@ -7,11 +7,11 @@ Bundle-ManifestVersion: 2
 Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
 Bundle-Description: Apache Tuscany SCA Wink
 Import-Package: javax.servlet,
+ org.apache.tuscany.sca.implementation.web.runtime.utils;version="2.0",
  org.apache.wink.common,
  org.apache.wink.common.internal.registry,
  org.apache.wink.server.internal,
  org.apache.wink.server.internal.registry,
- org.apache.tuscany.sca.implementation.web.runtime.utils;version="2.0",
  org.oasisopen.sca.annotation;version="2.0"
 Bundle-SymbolicName: org.apache.tuscany.sca.wink
 Bundle-DocURL: http://www.apache.org/

Modified: tuscany/sca-java-2.x/trunk/samples/calculator-rest-osgi/src/test/java/calculator/CalculatorTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/samples/calculator-rest-osgi/src/test/java/calculator/CalculatorTestCase.java?rev=993613&r1=993612&r2=993613&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/samples/calculator-rest-osgi/src/test/java/calculator/CalculatorTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/samples/calculator-rest-osgi/src/test/java/calculator/CalculatorTestCase.java Wed Sep  8 05:55:44 2010
@@ -38,7 +38,6 @@ import com.meterware.httpunit.WebRespons
 /**
  * This shows how to test the Calculator composition.
  */
-@Ignore
 public class CalculatorTestCase {
     private final static String SERVICE_URL = "http://localhost:8085/calculator/";