Author: rfeng
Date: Tue Mar 30 04:46:51 2010
New Revision: 928985
URL: http://svn.apache.org/viewvc?rev=928985&view=rev
Log:
Use BundleTracker to discover service provider bundles
Modified:
tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/META-INF/MANIFEST.MF
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/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java
Modified:
tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/META-INF/MANIFEST.MF
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/META-INF/MANIFEST.MF?rev=928985&r1=928984&r2=928985&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/META-INF/MANIFEST.MF
(original)
+++
tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/META-INF/MANIFEST.MF
Tue Mar 30 04:46:51 2010
@@ -16,7 +16,8 @@ Bundle-License: http://www.apache.org/li
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,
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=928985&r1=928984&r2=928985&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
Tue Mar 30 04:46:51 2010
@@ -36,9 +36,11 @@ import org.apache.tuscany.sca.extensibil
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 im
private BundleContext context;
private Version version;
+ private BundleTracker bundleTracker;
public EquinoxServiceDiscoverer(BundleContext context) {
this.context = context;
@@ -58,6 +61,12 @@ public class EquinoxServiceDiscoverer im
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 im
return Version.parseVersion(header);
}
- /*
- private Map<Bundle, Object> bundles = new ConcurrentHashMap<Bundle,
Object>();
+ public static class ActiveBundleTracker extends BundleTracker {
- public Object addingBundle(Bundle bundle, BundleEvent event) {
- if (isProviderBundle(bundle)) {
- bundles.put(bundle, bundle);
- System.out.println("Bundle added: " + toString(bundle));
- return bundle;
+ /**
+ * @param context
+ * @param stateMask
+ * @param customizer
+ */
+ public ActiveBundleTracker(BundleContext context) {
+ super(context, Bundle.RESOLVED | Bundle.ACTIVE | Bundle.STARTING,
null);
}
- return null;
- }
- public void modifiedBundle(Bundle bundle, BundleEvent event, Object
object) {
- }
+ @Override
+ public Object addingBundle(Bundle bundle, BundleEvent event) {
+ if (event != null && event.getType() == BundleEvent.STOPPED) {
+ return null;
+ }
+ return super.addingBundle(bundle, event);
+ }
- public void removedBundle(Bundle bundle, BundleEvent event, Object object)
{
- bundles.remove(object);
}
- */
+
public static class ServiceDeclarationImpl implements ServiceDeclaration {
private Bundle bundle;
Modified:
tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.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/EquinoxServiceDiscoveryActivator.java?rev=928985&r1=928984&r2=928985&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java
Tue Mar 30 04:46:51 2010
@@ -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;
+ }
}
}