summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2010-03-30 04:46:51 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2010-03-30 04:46:51 +0000
commit7e31b252cbc3c03ddfe8d9711cdee565db8a932c (patch)
treed7349425bcda9edb98743ae32d1a29731edcdcf8 /sca-java-2.x
parentb5c42a5f52e09dbc77fa4697022f3ed1d521ebad (diff)
Use BundleTracker to discover service provider bundles
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@928985 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x')
-rw-r--r--sca-java-2.x/trunk/modules/extensibility-equinox/META-INF/MANIFEST.MF3
-rw-r--r--sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java39
-rw-r--r--sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java7
3 files changed, 33 insertions, 16 deletions
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<Bundle, Object> bundles = new ConcurrentHashMap<Bundle, Object>();
+ 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;
+ }
}
}