The reason I object to INITIALIZATION ordering is that there is a very good mechanism that can handle the underlying problem in a more generic fashion: services. If these events become async, I am not sure what will happen with that story.

Making the service events asynchronous will make this model a lot less reliable because the window of vulnerability becomes larger. Lets face it, both models suck, but I am not sure sync sucks more than async in practice. Anyway, from my point of view as a user it is trivial to turn a sync event into an async event. The other way around is impossible. There are also some scenarios, like Device Access, that will become impossible.

It would be interesting to get use cases for deadlocks caused by synchronous events. Anybody on the list some horror stories? Maybe there are some common patterns that can solve the problems.

Kind regards,

        Peter Kriens



On 16 feb 2009, at 17:14, Richard S. Hall wrote:

For someone who preaches "no dependencies on ordering!", synchronous events are just ordering in sheep's clothing. :-P

-> richard

Peter Kriens wrote:
I am not sure I fully agree. Though I do see the problems with synchronous events I also see advantages. It is true that the synchronous nature of external devices is not very relevant, but most services are software based. In OSGi, services are often used as dependency anchors. Treating these async, will make this less reliable ... I think.

Interestingly, bundle events are async but a couple of years ago we added synchronous bundle events because many people felt they were needed. It is easy to blame what you know and idealize what you have not ...

So I think it is not a black and white issue. Programmers should be careful to use the synchronous events but I am not ready to declare them all evil. It is easy to go from sync to async, vice versa is impossible.

Kind regards,

   Peter Kriens





On 13 feb 2009, at 21:51, Richard S. Hall wrote:

I agree this is the theory, but it (i.e., services blowing up when you use them) is not something that can really be prevented. Services can go away at any time, so you never know when you use one if it will blow up, you have to treat them like remote references and assume they always could blow up.

Further, just because the OSGi framework holds onto a registration/ reference/object does not give you any guarantees that you can do anything graceful in a synchronous event. If the object is the front-end to a bluetooth device and the devices was powered off or went out of range, no amount of synchronicity by the framework is going to stop the service object from blowing up when you touch it.

Of course, people like the warm and fuzzy feeling that the framework is providing them some guarantees. :-)

-> richard

Todor Boev wrote:
The synchronous event delivery is an attempt to make service unregistration more graceful. This is the only way to provide an 'unregistering' event as opposed to 'unregistered'. E.g. when you receive the event the service is still up and you can gracefully stop using it. So before the call to "unregister()" returns there is room for some final calls to your service as users get notified and shut down.

If the service events were asynchronous the users of the service would potentially blow up with an exception while attempting to use it and only than receive an "unregistered" event. So the whole point of the event goes down the drain - you want to know it's going to go down before it does so you can avoid crashing with exceptions right? At the same time the caller of "unregister()" wants to know that when his call returns the service is no longer used by no one and he can proceed to release the resources of the service with no fear that someone will call in and mess something up.

Put all of these considerations together and it seems to me only a synchronous unregistration event will work. And since the unregistration must be synchronous it will be evil to make the registration asynchronous don't you think? :)

Cheers,
Todor


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to