diff options
author | BJ Hargrave | 2014-01-15 16:47:00 +0000 |
---|---|---|
committer | BJ Hargrave | 2014-01-15 16:47:00 +0000 |
commit | 03ad9b1cfc586b4350185115e94742f78e33d1fe (patch) | |
tree | aa7430b88d2c38f6986e55bdb6461905cf044d6c | |
parent | 0a61d50a3afea2418728edd6c69845a03213eb03 (diff) | |
download | rt.equinox.bundles-03ad9b1cfc586b4350185115e94742f78e33d1fe.tar.gz rt.equinox.bundles-03ad9b1cfc586b4350185115e94742f78e33d1fe.tar.xz rt.equinox.bundles-03ad9b1cfc586b4350185115e94742f78e33d1fe.zip |
Bug 425784 - Use internal EventAdmin object for EventRedelivererI20140123-1600I20140122-2000I20140122-0800I20140121-2000I20140121-0800I20140120-2000I20140120-0800I20140119-2000I20140115-1300
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>
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 +} |