Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBJ Hargrave2014-01-15 16:47:00 +0000
committerBJ Hargrave2014-01-15 16:47:00 +0000
commit03ad9b1cfc586b4350185115e94742f78e33d1fe (patch)
treeaa7430b88d2c38f6986e55bdb6461905cf044d6c
parent0a61d50a3afea2418728edd6c69845a03213eb03 (diff)
downloadrt.equinox.bundles-03ad9b1cfc586b4350185115e94742f78e33d1fe.tar.gz
rt.equinox.bundles-03ad9b1cfc586b4350185115e94742f78e33d1fe.tar.xz
rt.equinox.bundles-03ad9b1cfc586b4350185115e94742f78e33d1fe.zip
Getting the EventAdmin object from the service registry creates a dependency cycle when DS is activating EventAdmin. Using the internally created EventAdmin object avoids the cycle and also ensure the redeliverer uses the implementations EventAdmin object rather than some other EventAdmin service found in the service registry. This fix allows EventAdmin to be used with Apache Felix DS as well as Equinox DS. Signed-off-by: BJ Hargrave <hargrave@us.ibm.com>
-rw-r--r--bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventComponent.java4
-rw-r--r--bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java54
2 files changed, 13 insertions, 45 deletions
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventComponent.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventComponent.java
index 581773dae..ec1fddbe0 100644
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventComponent.java
+++ b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/EventComponent.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@ public class EventComponent implements EventAdmin {
void activate(BundleContext context) {
eventAdmin = new EventAdminImpl(context);
eventAdmin.start();
- eventRedeliverer = new EventRedeliverer(context);
+ eventRedeliverer = new EventRedeliverer(context, eventAdmin);
eventRedeliverer.open();
}
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java
index 0b51c108d..02e277ea9 100644
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java
+++ b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/internal/event/mapper/EventRedeliverer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -13,65 +13,44 @@ package org.eclipse.equinox.internal.event.mapper;
import org.osgi.framework.*;
import org.osgi.service.event.EventAdmin;
-import org.osgi.util.tracker.ServiceTracker;
/**
- * Main class for redeliver special events like FrameworkEvents via EventAdmin.
+ * Main class to redeliver framework published events via EventAdmin.
*
* @version $Revision: 1.3 $
*/
public class EventRedeliverer implements FrameworkListener, BundleListener, ServiceListener {
- private final ServiceTracker<EventAdmin, EventAdmin> eventAdminTracker;
- private final static boolean DEBUG = false;
- private BundleContext bc;
+ private final EventAdmin eventAdmin;
+ private final BundleContext bc;
- public EventRedeliverer(BundleContext bc) {
+ public EventRedeliverer(BundleContext bc, EventAdmin eventAdmin) {
this.bc = bc;
- this.eventAdminTracker = new ServiceTracker<EventAdmin, EventAdmin>(bc, EventAdmin.class.getName(), null);
+ this.eventAdmin = eventAdmin;
}
public void close() {
- eventAdminTracker.close();
bc.removeFrameworkListener(this);
bc.removeBundleListener(this);
bc.removeServiceListener(this);
}
/**
- * prepare any service trackers and register event listeners which are
+ * register event listeners which are
* necessary to obtain events to be mapped
*/
public void open() {
- // open ServiceTracker for EventAdmin
- eventAdminTracker.open();
-
// add legacy event listener for framework level event
bc.addFrameworkListener(this);
bc.addBundleListener(this);
bc.addServiceListener(this);
}
- private EventAdmin getEventAdmin() {
- return eventAdminTracker.getService();
- }
-
/**
* @param event
* @see org.osgi.framework.FrameworkListener#frameworkEvent(org.osgi.framework.FrameworkEvent)
*/
public void frameworkEvent(FrameworkEvent event) {
- EventAdmin eventAdmin = getEventAdmin();
- if (eventAdmin != null) {
- (new FrameworkEventAdapter(event, eventAdmin)).redeliver();
- } else {
- printNoEventAdminError();
- }
- }
-
- private void printNoEventAdminError() {
- if (DEBUG) {
- System.out.println(this.getClass().getName() + ": Cannot find the EventAdmin."); //$NON-NLS-1$
- }
+ new FrameworkEventAdapter(event, eventAdmin).redeliver();
}
/**
@@ -79,12 +58,7 @@ public class EventRedeliverer implements FrameworkListener, BundleListener, Serv
* @see org.osgi.framework.BundleListener#bundleChanged(org.osgi.framework.BundleEvent)
*/
public void bundleChanged(BundleEvent event) {
- EventAdmin eventAdmin = getEventAdmin();
- if (eventAdmin != null) {
- (new BundleEventAdapter(event, eventAdmin)).redeliver();
- } else {
- printNoEventAdminError();
- }
+ new BundleEventAdapter(event, eventAdmin).redeliver();
}
/**
@@ -92,12 +66,6 @@ public class EventRedeliverer implements FrameworkListener, BundleListener, Serv
* @see org.osgi.framework.ServiceListener#serviceChanged(org.osgi.framework.ServiceEvent)
*/
public void serviceChanged(ServiceEvent event) {
- EventAdmin eventAdmin = getEventAdmin();
- if (eventAdmin != null) {
- (new ServiceEventAdapter(event, eventAdmin)).redeliver();
- } else {
- printNoEventAdminError();
- }
+ new ServiceEventAdapter(event, eventAdmin).redeliver();
}
-
-} \ No newline at end of file
+}

Back to the top