Skip to content

Instantly share code, notes, and snippets.

@cschneider
Created September 21, 2012 12:39
Show Gist options
  • Save cschneider/3761241 to your computer and use it in GitHub Desktop.
Save cschneider/3761241 to your computer and use it in GitHub Desktop.
Make FrameWorkListener local to refreshPackages
Index: src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
===================================================================
--- src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java (revision 1387939)
+++ src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java (working copy)
@@ -98,7 +98,7 @@
* create dummy sub shells. When invoked, these commands will prompt the user for
* installing the needed bundles.
*/
-public class FeaturesServiceImpl implements FeaturesService, FrameworkListener {
+public class FeaturesServiceImpl implements FeaturesService {
public static final String CONFIG_KEY = "org.apache.karaf.features.configKey";
public static String VERSION_PREFIX = "version=";
@@ -117,7 +117,6 @@
private List<FeaturesListener> listeners = new CopyOnWriteArrayIdentityList<FeaturesListener>();
private ThreadLocal<Repository> repo = new ThreadLocal<Repository>();
private EventAdminListener eventAdminListener;
- private final Object refreshLock = new Object();
private long refreshTimeout = 5000;
private RegionsPersistence regionsPersistence;
@@ -1109,8 +1108,6 @@
}
public void start() throws Exception {
- // Register FrameworkEventListener
- bundleContext.addFrameworkListener(this);
// Register EventAdmin listener
EventAdminListener listener = null;
try {
@@ -1188,26 +1185,26 @@
}
public void stop() throws Exception {
- bundleContext.removeFrameworkListener(this);
uris = new HashSet<URI>(repositories.keySet());
while (!repositories.isEmpty()) {
internalRemoveRepository(repositories.keySet().iterator().next());
}
}
- public void frameworkEvent(FrameworkEvent event) {
- if (event.getType() == FrameworkEvent.PACKAGES_REFRESHED) {
- synchronized (refreshLock) {
- refreshLock.notifyAll();
- }
- }
- }
-
protected void refreshPackages(Collection<Bundle> bundles) throws InterruptedException {
+ final Object refreshLock = new Object();
FrameworkWiring wiring = bundleContext.getBundle().adapt(FrameworkWiring.class);
if (wiring != null) {
synchronized (refreshLock) {
- wiring.refreshBundles(bundles, this);
+ wiring.refreshBundles(bundles, new FrameworkListener() {
+ public void frameworkEvent(FrameworkEvent event) {
+ if (event.getType() == FrameworkEvent.PACKAGES_REFRESHED) {
+ synchronized (refreshLock) {
+ refreshLock.notifyAll();
+ }
+ }
+ }
+ });
refreshLock.wait(refreshTimeout);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment