felix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Benjamin Debeerst <Debee...@younicos.com>
Subject RE: EventAdmin Blacklist
Date Fri, 18 Oct 2013 16:45:53 GMT
Hi Adam,

I'm not exactly sure which circumstances lead to a blacklisting, but we have also experienced
blacklisting in case of Exceptions and long-running event processing. You should keep in mind
that the EventAdmin may process the event delivery for each event synchronously to the different
listeners, so when doing stuff like Thread.sleep(...) you might actually prevent other listeners
to be notified in time.

We solved the problem by unpacking the relevant information from the delivered Event object
and putting that into a Queue, which in turn is processed asynchronously. This allows to minimize
the processing time and the number of exceptions that can rise.

(Also see OSGi r4 enterprise specification, chapter 113.8.2: Dealing with Stalled Handlers.
"Event handlers should not spend too long in the handleEventmethod.")

Regards,
Benjamin

-----Original Message-----
From: Adam Wilson [mailto:amw13@health.state.ny.us] 
Sent: Freitag, 18. Oktober 2013 18:30
To: users@felix.apache.org
Subject: EventAdmin Blacklist



Hi all,

We're experiencing a blacklist of a crucial service on a remote system and have not been able
to replicate it locally.

Once a service has been blacklisted, what can we do about it?  From the EventAdmin code, it
emits a log message and releases the service. There doesn't appear to be any way to detect
the blacklisting and mitigate it.
Ideally, it seems like a BLACKLIST event should be emitted so that you can set up handlers
to manage these situations---but, obviously, that could get mess..

We're also having a hard time creating a circumstance that creates a blacklisted service to
inspect what happens.  Is there an easier way to simulate blacklisting?

Below is the code that I tried to get something blacklisted, but it did not work.

Thanks!
Adam

package osgi.event;

import aQute.bnd.annotation.component.Activate;
import aQute.bnd.annotation.component.Component;
import aQute.bnd.annotation.component.Deactivate;
import aQute.bnd.annotation.component.Reference;

import org.osgi.framework.BundleContext; import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin;
import org.osgi.service.event.EventConstants;
import org.osgi.service.event.EventHandler;

import java.util.HashMap;


@Component(immediate=true, name="tester",
properties=EventConstants.EVENT_TOPIC+"=testingevent")
public class Tester implements EventHandler {
    public static EventAdmin event;
    @Reference
    public void setEvent(EventAdmin e) { event = e; }

    @Activate
    public void start(BundleContext ctx) throws Exception {
        event.postEvent(new Event("testingevent",new HashMap<Object,Object> ()));
    }

    @Override
    public void handleEvent(final Event event) {
        System.out.println("Event received, sleeping.");
        Thread.sleep(10*1000);
        System.out.println("Awake.");

    }
}


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Mime
View raw message