On 10/9/13 08:42 , Christian Schneider wrote:
On 09.10.2013 14:24, Richard S. Hall wrote:
On 10/9/13 05:39 , Christian Schneider wrote:
Nowadays dependency injection technologies like blueprint, ds and
spring dm are used a lot in OSGi. All these have in common that they
are extender based. So instead of using an activator you have an
extender that detects if you use such a technology and initializes
the bundle.
Unfortunately this makes diagnosing the status of your system a lot
harder. A bundle can be active and still the blueprint context may
have failed to create or the extender is even absent. The case of no
extender can be nicely solved by capabilities which seem to be
introduced in the newest spec proposals.
What I have not yet seen is a common status and error reporting. I
have written such a thing for karaf where the bundle status is
combined from the OSGi bundle status + e.g. the blueprint status if
the bundle uses blueprint. I also created a diag command that shows
blueprint errors to make it easier to spot problems.
Would it make sense to standardize this? Perhaps by allowing an
extender to override the reported status of a bundle?
No, I don't think such a mechanism makes sense. This is no longer the
extender pattern any more. If you really want to do this as part of
your "extender", you can just provide a standard activator that
extendee bundles must use and this standard activator could do
whatever it wanted to fail activation if it so desired. This is how
we had to do DI in OSGi before you could get access to a bundle's
context externally (a la Service Binder).
Creating some mechanism to create effectively implicit activators is
going too far.
Yes probably it does not make sense to let the extender directly
influence the bundle status. Still I think an extender should be
involved in determining the status of the bundle. Of course this can
only happen if the extender is a little bit less decoupled from the
bundle lifecycle than right now.
So for example I could imagine that the resolver sees that the bundle
has a requirement for a blueprint extender. So we could have an API
were providers of capabilities could register their initialization
services. For blueprint this service would read the context xml and
establish the blueprint context.
The service could return the success or failure status. Then the
framework could use this to determine the bundle state and also store
the error for the common status reporting I mentioned below.
Again, the extender can already do this with no extra support from the
framework, simply implement an activator that extendee bundles must use.
There is no reason to push more into the framework.
And trying to make this part of the resolve process is probably a
mistake anyway, since the resolve process is already complicated enough.
Technically, an extender could possibly implement something similar to
what you are saying with a resolver hook that filtered its own extender
capability if it felt that the extendee could not be successfully
initialized, thus the extendee would fail to resolve.
However, I wouldn't make this a recommended approach because I am sure
it would make the resolve process harder to understand for the average
person, because they'd really have no idea why the resolve failed.
-> richard
I also think it would be nice to have a common api to get some
diagnosis state for bundles. You could ask this api about a bundle
id and it could return a list of exceptions provided by all
extenders that processed the bundle.
I believe there are already examples of such diagnostic API in Felix'
SCR and iPOJO. It could make sense to standardize, but the question
would be how far could you go, since extenders can have wildly
different capabilities and purposes (e.g., extenders are only for DI).
I am not sure how it should look exactly. What I imagine is to have
one initialization result per extender or requirement / capability.
The result could have a status and an exception. I think this should
at least be able to cover some of the cases.
Christian
_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev