You can extend the com.prosyst.mbs.framework.event.EventThread to provide events to interested listeners asynchronously, that is in a separate event delivering thread. If there is a hanging listener (a listener, which processes events sent by an event dispatcher too long or "hangs" on doing this), a new event delivering thread can be created for the other listeners. The old thread can be stopped and the hanging listener - removed.
The com.prosyst.mbs.framework.event.Queue can be extended to represent the event queue of an EventThread-based event dispatcher.
In addition, the package contains a special listener interface – SystemListener, which a bundle registering framework or/and bundle listener can additionally implement, so that in case the listener is considered as hanging the framework asks the listener to confirm the unregistration of the listener. Otherwise, the framework will directly unregister the listener.
The SystemListener interface must be implemented by the same class implementing org.osgi.framework.FrameworkListener or org.osgi.framework.BundleListener. When the timeout for a listener to return from its frameworkEvent or bundleChanged method expires (it its determined by the value of the mbs.core.timeout system property), the framework will call the timeoutOccured() SystemListener's method. If the timeoutOccured method returns true, the framework will remove the listener from its event subscribers list.