From 7e31b252cbc3c03ddfe8d9711cdee565db8a932c Mon Sep 17 00:00:00 2001 From: rfeng Date: Tue, 30 Mar 2010 04:46:51 +0000 Subject: Use BundleTracker to discover service provider bundles git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@928985 13f79535-47bb-0310-9956-ffa450edef68 --- .../extensibility-equinox/META-INF/MANIFEST.MF | 3 +- .../equinox/EquinoxServiceDiscoverer.java | 39 ++++++++++++++-------- .../equinox/EquinoxServiceDiscoveryActivator.java | 7 +++- 3 files changed, 33 insertions(+), 16 deletions(-) (limited to 'sca-java-2.x') diff --git a/sca-java-2.x/trunk/modules/extensibility-equinox/META-INF/MANIFEST.MF b/sca-java-2.x/trunk/modules/extensibility-equinox/META-INF/MANIFEST.MF index cd34f995f4..7ece048182 100644 --- a/sca-java-2.x/trunk/modules/extensibility-equinox/META-INF/MANIFEST.MF +++ b/sca-java-2.x/trunk/modules/extensibility-equinox/META-INF/MANIFEST.MF @@ -16,7 +16,8 @@ Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt 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 + org.osgi.framework.launch;version="1.0.0";resolution:=optional, + org.osgi.util.tracker;version="1.4.2" 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, diff --git a/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java b/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java index fa9fb03a1d..6736f9cfb4 100644 --- a/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java +++ b/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java @@ -36,9 +36,11 @@ import org.apache.tuscany.sca.extensibility.ServiceDeclarationParser; import org.apache.tuscany.sca.extensibility.ServiceDiscoverer; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleEvent; import org.osgi.framework.BundleException; import org.osgi.framework.Constants; import org.osgi.framework.Version; +import org.osgi.util.tracker.BundleTracker; /** * A ServiceDiscoverer that find META-INF/services/... in installed bundles @@ -50,6 +52,7 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { private BundleContext context; private Version version; + private BundleTracker bundleTracker; public EquinoxServiceDiscoverer(BundleContext context) { this.context = context; @@ -58,6 +61,12 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { if (this.version.equals(Version.emptyVersion)) { this.version = Version.parseVersion("1.1"); } + bundleTracker = new ActiveBundleTracker(context); + bundleTracker.open(); + } + + public void stop() { + bundleTracker.close(); } private Version getSCAVersion(Bundle bundle) { @@ -65,25 +74,27 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { return Version.parseVersion(header); } - /* - private Map bundles = new ConcurrentHashMap(); + public static class ActiveBundleTracker extends BundleTracker { + + /** + * @param context + * @param stateMask + * @param customizer + */ + public ActiveBundleTracker(BundleContext context) { + super(context, Bundle.RESOLVED | Bundle.ACTIVE | Bundle.STARTING, null); + } - public Object addingBundle(Bundle bundle, BundleEvent event) { - if (isProviderBundle(bundle)) { - bundles.put(bundle, bundle); - System.out.println("Bundle added: " + toString(bundle)); - return bundle; + @Override + public Object addingBundle(Bundle bundle, BundleEvent event) { + if (event != null && event.getType() == BundleEvent.STOPPED) { + return null; + } + return super.addingBundle(bundle, event); } - return null; - } - public void modifiedBundle(Bundle bundle, BundleEvent event, Object object) { } - public void removedBundle(Bundle bundle, BundleEvent event, Object object) { - bundles.remove(object); - } - */ public static class ServiceDeclarationImpl implements ServiceDeclaration { private Bundle bundle; diff --git a/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java b/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java index 4ccaf57c19..14ad6670a8 100644 --- a/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java +++ b/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java @@ -30,15 +30,20 @@ import org.osgi.framework.BundleContext; */ public class EquinoxServiceDiscoveryActivator implements BundleActivator { // private static final Logger logger = Logger.getLogger(EquinoxServiceDiscoveryActivator.class.getName()); + private EquinoxServiceDiscoverer discoverer; public void start(BundleContext context) throws Exception { - EquinoxServiceDiscoverer discoverer = new EquinoxServiceDiscoverer(context); + discoverer = new EquinoxServiceDiscoverer(context); ServiceDiscovery.getInstance().setServiceDiscoverer(discoverer); // logger.info("Equinox-based service discoverer is now configured."); } public void stop(BundleContext context) throws Exception { ServiceDiscovery.getInstance().setServiceDiscoverer(null); + if (discoverer != null) { + discoverer.stop(); + discoverer = null; + } } } -- cgit v1.2.3