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;
+        }
     }
 
 }


Reply via email to