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/";