From b029a4016074bd535a0f2aa5277bdb03bad06921 Mon Sep 17 00:00:00 2001 From: rfeng Date: Fri, 31 Jul 2009 18:08:22 +0000 Subject: Use the extensibility-equinox module to dynamically imports public packages and resources git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@799679 13f79535-47bb-0310-9956-ffa450edef68 --- java/sca/modules/binding-ws-axis2/META-INF/MANIFEST.MF | 1 + .../apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java | 4 ++-- .../sca/contribution/java/impl/ClassLoaderModelResolver.java | 4 ++-- java/sca/modules/extensibility-equinox/META-INF/MANIFEST.MF | 6 ++++++ .../sca/extensibility/equinox/EquinoxServiceDiscoverer.java | 5 +++++ java/sca/modules/extensibility/META-INF/MANIFEST.MF | 8 ++------ .../sca/extensibility/ContextClassLoaderServiceDiscoverer.java | 4 ++++ .../org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java | 5 +++++ .../org/apache/tuscany/sca/extensibility/ServiceDiscovery.java | 4 ++++ .../org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java | 2 +- .../tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java | 3 ++- 11 files changed, 34 insertions(+), 12 deletions(-) diff --git a/java/sca/modules/binding-ws-axis2/META-INF/MANIFEST.MF b/java/sca/modules/binding-ws-axis2/META-INF/MANIFEST.MF index 74869d3c4a..039176856c 100644 --- a/java/sca/modules/binding-ws-axis2/META-INF/MANIFEST.MF +++ b/java/sca/modules/binding-ws-axis2/META-INF/MANIFEST.MF @@ -126,6 +126,7 @@ Import-Package: javax.xml.stream, org.apache.tuscany.sca.binding.ws.axis2.policy.header;version="2.0.0", org.apache.tuscany.sca.contribution.processor;version="2.0.0", org.apache.tuscany.sca.core;version="2.0.0", + org.apache.tuscany.sca.extensibility;version="2.0.0", org.apache.tuscany.sca.core.assembly;version="2.0.0", org.apache.tuscany.sca.databinding;version="2.0.0", org.apache.tuscany.sca.definitions;version="2.0.0", diff --git a/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java b/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java index e314046793..7c9368e9f8 100644 --- a/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java +++ b/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2ServiceProvider.java @@ -91,9 +91,9 @@ import org.apache.tuscany.sca.binding.ws.axis2.policy.configuration.Axis2ConfigP import org.apache.tuscany.sca.binding.ws.axis2.policy.configurator.Axis2BindingHeaderConfigurator; import org.apache.tuscany.sca.binding.ws.axis2.policy.header.Axis2HeaderPolicy; import org.apache.tuscany.sca.binding.ws.axis2.policy.header.Axis2SOAPHeaderString; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.core.FactoryExtensionPoint; import org.apache.tuscany.sca.core.assembly.RuntimeAssemblyFactory; +import org.apache.tuscany.sca.extensibility.ServiceDiscovery; import org.apache.tuscany.sca.host.http.ServletHost; import org.apache.tuscany.sca.interfacedef.Interface; import org.apache.tuscany.sca.interfacedef.Operation; @@ -250,7 +250,7 @@ public class Axis2ServiceProvider { public ConfigurationContext run() throws AxisFault { ClassLoader cl0 = getClass().getClassLoader(); ClassLoader cl1 = URLBasedAxisConfigurator.class.getClassLoader(); - ClassLoader cl2 = ExtensionPointRegistry.class.getClassLoader(); + ClassLoader cl2 = ServiceDiscovery.getInstance().getContextClassLoader(); // ClassLoader cl3 = // modelFactories.getFactory(DocumentBuilderFactory.class).getClass().getClassLoader(); ClassLoader tccl = Thread.currentThread().getContextClassLoader(); diff --git a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java index fc1f4bd6c6..9d8908315b 100644 --- a/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java +++ b/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java @@ -60,8 +60,8 @@ public class ClassLoaderModelResolver extends URLClassLoader implements ModelRes } } if (parentClassLoader == null) { - // The extensibility bundle has DynamicImport-Package = * - parentClassLoader = ServiceDiscovery.class.getClassLoader(); + // The bundle has DynamicImport-Package = * + parentClassLoader = ServiceDiscovery.getInstance().getContextClassLoader(); } return parentClassLoader; diff --git a/java/sca/modules/extensibility-equinox/META-INF/MANIFEST.MF b/java/sca/modules/extensibility-equinox/META-INF/MANIFEST.MF index 9436ea4f94..3a43caa6e4 100644 --- a/java/sca/modules/extensibility-equinox/META-INF/MANIFEST.MF +++ b/java/sca/modules/extensibility-equinox/META-INF/MANIFEST.MF @@ -19,6 +19,12 @@ Import-Package: org.apache.tuscany.sca.core;version="2.0.0", org.apache.tuscany.sca.extensibility;version="2.0.0", org.osgi.framework;version="1.4", org.osgi.framework.launch;version="1.0.0";resolution:=optional +Tuscany-Comment2: The system bundle exports javax.transaction* packages that only + contains a subset of the classes +DynamicImport-Package: org.apache.tuscany.sca.extensibility.equinox, + javax.transaction;version="1.1", + javax.transaction.xa;version="1.1", + * Bundle-SymbolicName: org.apache.tuscany.sca.extensibility.equinox Bundle-DocURL: http://www.apache.org/ Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6 diff --git a/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java b/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java index 61bba30719..2b3e087e52 100644 --- a/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java +++ b/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java @@ -310,5 +310,10 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { } return descriptors; } + + public ClassLoader getContextClassLoader() { + // Get the bundle classloader for the extensibility bundle that has DynamicImport-Package * + return getClass().getClassLoader(); + } } diff --git a/java/sca/modules/extensibility/META-INF/MANIFEST.MF b/java/sca/modules/extensibility/META-INF/MANIFEST.MF index 7cc2ff22c9..24949ed812 100644 --- a/java/sca/modules/extensibility/META-INF/MANIFEST.MF +++ b/java/sca/modules/extensibility/META-INF/MANIFEST.MF @@ -1,17 +1,13 @@ Manifest-Version: 1.0 -Tuscany-Comment: Expoprt the META-INF.services under an "internal" attribute +Tuscany-Comment1: Export the META-INF.services under an "internal" attribute so that it can be seen only by the bundle itself without following the DynamicImport-Package * Export-Package: org.apache.tuscany.sca.core;uses:="org.apache.tuscany. sca.extensibility";version="2.0.0",org.apache.tuscany.sca.extensibility - ;version="2.0.0",META-INF.services;internal=true;mandatory:=internal + ;version="2.0.0" Tool: Bnd-0.0.255 Bundle-Name: Apache Tuscany SCA Extensibility Created-By: 1.6.0_07 (Sun Microsystems Inc.) -DynamicImport-Package: org.apache.tuscany.sca.extensibility.equinox, - javax.transaction;version="1.1", - javax.transaction.xa;version="1.1", - * Bundle-Vendor: The Apache Software Foundation Bundle-Version: 2.0.0 Bnd-LastModified: 1225397079296 diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java index 3d733d042e..26ede88214 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java @@ -121,6 +121,10 @@ public class ContextClassLoaderServiceDiscoverer implements ServiceDiscoverer { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); this.classLoaderReference = new WeakReference(classLoader); } + + public ClassLoader getContextClassLoader() { + return classLoaderReference.get(); + } private List getResources(final String name) throws IOException { try { diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java index 9b939e8228..aebd6cd3de 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java @@ -46,4 +46,9 @@ public interface ServiceDiscoverer { */ public ServiceDeclaration getServiceDeclaration(String name) throws IOException; + /** + * Get a classloader that can be used for thread context loader + * @return A classloader that can provide access to public classes and resources + */ + public ClassLoader getContextClassLoader(); } diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java index ec95aba7e1..70274752e4 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java @@ -182,4 +182,8 @@ public final class ServiceDiscovery implements ServiceDiscoverer { } } + public ClassLoader getContextClassLoader() { + return discoverer.getContextClassLoader(); + } + } diff --git a/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java b/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java index 24a8b368dc..b8b6c39354 100644 --- a/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java +++ b/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java @@ -355,7 +355,7 @@ public class EquinoxHost { private boolean isServiceProvider(Bundle bundle, Set serviceProviders) { if (bundle != null) { String export = (String)bundle.getHeaders().get(Constants.EXPORT_PACKAGE); - if (export != null && export.contains("META-INF.services")) { + if (export != null && export.contains(NodeLauncherUtil.META_INF_SERVICES)) { serviceProviders.add(bundle.getSymbolicName()); return true; } diff --git a/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java b/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java index c059811e3b..832427b380 100644 --- a/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java +++ b/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java @@ -89,6 +89,7 @@ final class NodeLauncherUtil { private static final Logger logger = Logger.getLogger(NodeLauncherUtil.class.getName()); + static final String META_INF_SERVICES = "META-INF.services;partial=true;mandatory:=partial"; static final String LAUNCHER_EQUINOX_LIBRARIES = "org.apache.tuscany.sca.node.launcher.equinox.libraries"; static final String GATEWAY_BUNDLE = "org.apache.tuscany.sca.gateway"; @@ -347,7 +348,7 @@ final class NodeLauncherUtil { pkg = pkg.replace('/', '.') + version; // Export META-INF.services if ("META-INF.services".equals(pkg)) { - packages.add("META-INF.services" + ";partial=true;mandatory:=partial"); + packages.add(META_INF_SERVICES); } else { packages.add(pkg); } -- cgit v1.2.3