Christian,

I did some further testing.

If I don’t use the reference then I get no error which is strange as I still 
declare it (and the activation is eager). Maybe this is due to some 
optimization?

If I give the reference to a simple test bean as argument or property then I 
get the same issue:

1.    ServiceUnavailableException: No matching service for optional OSGi 
service reference

2.    The bundle (A) is still NOT waiting for any “grace period” of any kind 
and directly fails to start

If I use a reference-listener then no issue but the availability still has to 
be optional in order not to go in grace period.

I did not succeed in getting a null object. Why isn’t the bundle (A) waiting 
before failing?

JP

[@@ OPEN @@]

De : Christian Schneider [mailto:[email protected]] De la part de 
Christian Schneider
Envoyé : vendredi 18 septembre 2015 12:49
À : [email protected]
Objet : Re: Karaf upgrade 3.0.2 -> 4.0.1 leads to ServiceUnavailableException

I think what happens is that blueprint starts up, wires the optional refrence, 
then calls the factory which results in a NPE.
Maybe this error is then just not reported correctly.

Try to do a try catch in the factory that uses the reference to the service and 
log if there is an exception.

Christian
Am 18.09.2015 um 12:33 schrieb CLEMENT Jean-Philippe:
I understand. The problem is the bundle (A) is failing to start. I do not get a 
null object.

I don’t know why it was always working perfectly and now not working at all.

Regards,
JP

[@@ OPEN @@]

De : Christian Schneider [mailto:[email protected]] De la part de 
Christian Schneider
Envoyé : vendredi 18 septembre 2015 12:27
À : [email protected]<mailto:[email protected]>
Objet : Re: Karaf upgrade 3.0.2 -> 4.0.1 leads to ServiceUnavailableException

Blueprint does not do service damping on optional services. So if you refer the 
service in your bean you have to cope with it being null.
You might use the callback blueprint offers when the service gets registered.

Christian

On 18.09.2015 10:38, CLEMENT Jean-Philippe wrote:
Dear Karaf,

I upgraded Karaf version from 3.0.2 to 4.0.1 and obtained a 
ServiceUnavailbleException from one of our bundles – which was working fine 
with the former version of Karaf.

I must first say that services registering/retrieval implied in this issue are 
not made in a clean way as they imply kind of circular dependencies. But it was 
working fine with Karaf 3.0.2. Those services are registered and retrieved 
using Blueprint.

We have a bundle A which exports base services which are used by a bundle B. 
Bundle B will use those base services and will export higher added value ones. 
One of B services are used by A. This service reference (A) is set as optional.

I don’t know whether Karaf 3.0.2 was accepting something wrong which was 
corrected in 4.0.1, if it’s a 4.0.1 bug, or maybe just a behavior difference 
which may be configured somewhere.

Maybe first, is the starting scenario correct (even if not recommended)?

Thank you,
JP

[@@ OPEN @@]







--

Christian Schneider

http://www.liquid-reality.de



Open Source Architect

http://www.talend.com

Reply via email to