You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2013/03/20 11:20:02 UTC
svn commit: r1458719 -
/karaf/branches/karaf-2.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/watch/BundleWatcher.java
Author: gnodet
Date: Wed Mar 20 10:20:02 2013
New Revision: 1458719
URL: http://svn.apache.org/r1458719
Log:
[KARAF-2244] BundleWatcher should wait for refresh to be finished before updating another bundle
Modified:
karaf/branches/karaf-2.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/watch/BundleWatcher.java
Modified: karaf/branches/karaf-2.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/watch/BundleWatcher.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/watch/BundleWatcher.java?rev=1458719&r1=1458718&r2=1458719&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/watch/BundleWatcher.java (original)
+++ karaf/branches/karaf-2.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/watch/BundleWatcher.java Wed Mar 20 10:20:02 2013
@@ -27,6 +27,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -41,7 +42,10 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleEvent;
import org.osgi.framework.BundleException;
import org.osgi.framework.BundleListener;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
import org.osgi.framework.ServiceReference;
+import org.osgi.framework.wiring.FrameworkWiring;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.packageadmin.PackageAdmin;
@@ -117,15 +121,17 @@ public class BundleWatcher implements Ru
logger.error("Error updating bundle.", ex);
}
}
- ServiceReference ref = null;
try {
- ref = getBundleContext().getServiceReference(PackageAdmin.class.getName());
- PackageAdmin pa = (PackageAdmin) getBundleContext().getService(ref);
- pa.refreshPackages(updated.toArray(new Bundle[updated.size()]));
- } finally {
- if (ref != null) {
- getBundleContext().ungetService(ref);
- }
+ final CountDownLatch latch = new CountDownLatch(1);
+ FrameworkWiring wiring = getBundleContext().getBundle(0).adapt(FrameworkWiring.class);
+ wiring.refreshBundles(updated, new FrameworkListener() {
+ public void frameworkEvent(FrameworkEvent event) {
+ latch.countDown();
+ }
+ });
+ latch.await();
+ } catch (InterruptedException e) {
+ running.set(false);
}
}
try {