[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [equinox-dev] framework shutdown and bundle listeners

I think that what you need can be accomplished using Start Levels. If the core Eclipse bundles are start level 1 and the plugins are start level 2, then when shutdown happens, you all plugins will be stopped before the core Eclipse bundles are stopped.


Rafael Chaves wrote:

(the following thread went private accidentaly. But since it is of general interest, I am fixing my mistake...)

Peter, I should have made it clear sooner, but the main bundle I am talking about is the Eclipse runtime, and regular bundles would be Eclipse bundles (the ones with extensions/extension points).

So, despite my sincere admiration of OSGi's decoupled nature, it is still unclear (at least for me) whether Eclipse bundles should be able to exist in the absence of the Eclipse runtime. If they should not, we need to enforce that all Eclipse bundles are stopped before the Eclipse runtimeis closed for business. A service event notification is simply too late.

About bundle hierarchies being bad, in general, I agree, but I believe that Eclipse on top of OSGi still provides a platform for its bundles, and it makes sense to me that Eclipse bundles require this platform to run, and conversely that the platform knows about the "managed" bundles (right now, the extensions registry is where this knowledge is kept).

Again, sorry for not making explicit which bundles I was talking about since the beginning.



Peter Kriens <Peter.Kriens@xxxxxxxx>

11/08/2003 09:39 AM
Please respond to pkriens

    To:    ÂRafael Chaves/Ottawa/IBM@IBMCA
    cc:    Â
    Subject:    ÂRe[4]: [equinox-dev] framework shutdown and bundle listeners

I guess this should be one of the issues we should discuss in the
scope concept. It does not seem like a good idea that the "main"
bundle knows about its children, and it is also not attractive that
the children have to watch the "main" bundle.

In OSGi, so far, we like to express the dependencies via services.
That is much more decoupled and gives more freedom later. Creating
bundle hierarchies sounds a bit scary to me ... :-)

Kind regards,

  Peter Kriens

RC> If there is an application whose main bundle is stopped, I believe it may
RC> make sense to stop all other application bundles from the main bundle's
RC> activator stop method. Of course, the other bundles could watch for a
RC> central service going away, and then react properly. But what if the
RC> regular application bundles don't know even how to shut down if the
RC> central bundle is not available? Stopping them from the central bundle's
RC> activator stop method seems to prevent regular bundles to remain active
RC> after the central bundle is stopped.

RC> The idea of distinguishing between a normal stop and a shutdown is to
RC> prevent the central bundle of trying to stop all dependant bundles when
RC> they have already been stopped (we know that because they have a higher
RC> start level). I know that to stop a stopped bundle is a no-op, but it must
RC> have some cost, which multiplied by 5000 may not be that irrelevant.

RC> I am pretty new to all this, so I won't be surprised this does not make
RC> sense at all...

RC> Rafael

RC> Peter Kriens <Peter.Kriens@xxxxxxxx>
RC> 11/08/2003 12:52 AM
RC> Please respond to pkriens

RC> Â Â Â Â To: Â Â Rafael Chaves/Ottawa/IBM@IBMCA
RC> Â Â Â Â cc:
RC> Â Â Â Â Subject: Â Â Â ÂRe[2]: [equinox-dev] framework shutdown and bundle
RC> listeners

RC> What is the use case to differ between a normal stop and a shutdown
RC> stop? We had lots of discussion around this subject and decided not
RC> make a distinction because we could not see how it could differ from
RC> the bundle's perspective.

RC> Kind regards,

RC> Â Â ÂPeter Kriens

RC>> Yes, Peter, it helps. So since the transition to STOPPING is not
RC> reflected
RC>> in events (there is no such event type), the way to check if the
RC> framework
RC>> is being shut down during a call to a bundle's activator stop method
RC> is to
RC>> check if the system bundle's state is STOPPING. That is enough for me.

RC>> Rafael

RC>> Peter Kriens <Peter.Kriens@xxxxxxxx>
RC>> 08/08/2003 12:46 PM
RC>> Please respond to pkriens

RC>> Â Â Â Â To: Â Â Rafael Chaves/Ottawa/IBM@IBMCA
RC>> Â Â Â Â cc: Â Â equinox-dev@xxxxxxxxxxx
RC>> Â Â Â Â Subject: Â Â Â ÂRe: [equinox-dev] framework shutdown and
RC> bundle
RC>> listeners

RC>> Synchronous bundle listeners are notified synchronous so they will
RC>> receive the events of all the bundles that are stopped before they are
RC>> stopped and their own.

RC>> With async bundle listeners it is not defined because the event
RC>> delivery is async from the actual event. Events must not be delivered
RC>> to bundles that are stopped.

RC>> Does this help?

RC>> Kind regards,

RC>> Â Â ÂPeter Kriens

RC>>> Reading the OSGi spec, the semantics of what happens w.r.t. events
RC>> when
RC>>> shutting down the framework (e.g. with "stop 0") are not clear:

RC>>> According to section 4.19.2, when shutting down the framework, these
RC>>> actions occur:

RC>>> "1. The system bundle enters the STOPPING state.

RC>>> 2. All ACTIVE bundles are suspended as described in the Bundle.stop
RC>>> method (...).

RC>>> 3. Event handling is disabled."

RC>>> Will synchronous BundleListeners be notified during step 2 (before
RC> the

RC>>> framework is shut down)? Can I assume that asynchronous bundle
RC>> listeners
RC>>> will never have a chance to be notified because of step 3?

RC>>> Thanks for any comments,

RC>>> Rafael

Peter Kriens               ÂMob. +46705950899