You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by "mffrench@axway.com" <mf...@axway.com> on 2009/08/25 11:07:30 UTC

Question about Felix shutdown, iPojo life cycle and iPojo requires...

Hello,

I've two iPojo services object and objectRegistry. The service object
requires objectRegistry and the services objectRegistry doesn't require
any services.
When starting (iPojo @Validate) my object service it automatically bind
itself in the objectRegistry service.
When stopping (iPojo @Invalidate) my object service it automatically
unbind itself from the objectRegistry service.

Sometimes I get this warning when shutting down my Felix:

[WARNING] object : [object.42679d9e-eee8-4810-bcd4-a21b5cbc91a1] The
dependency is not optional, however no service objectRegistry can be
injected in obr -> objectRegistry

After this warning I get a null pointer exception - no more as I verify
now if obr is null or not before any call on it - on my object
invalidate stop method because object try to unbind itself from my
objectRegistry services.

As I can not reproduce the problem every time I've the impression Felix
is shutting down its services in a disorder way ... Some times it's ok
some times not...

I would like to understand why the service objectRegistry has been
shutdown before the service object as object requires objectRegistry ?
Should Felix not manage the requires tree at shutdown as it managed it
at start ? Do I miss something ? Is this a known bug ? Is there a
solution for this problem ?

Thanks for all.



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Question about Felix shutdown, iPojo life cycle and iPojo requires...

Posted by Clement Escoffier <cl...@gmail.com>.
Hi,

On 27.08.2009, at 13:27, mffrench@axway.com wrote:

> Hello Clement,
>
> thanks for your answer. I tried to add an unbind method but my log  
> show
> me this method is never called (even if I set an id to the require and
> the unbind). I've the impression it's because the unregistering of the
> two services are done almost in the same time. What do you think about
> this ?

Potentially, your already stopped when the service goes away. In that  
case, unbind is not call (but invalidate is called).


>
> Anyway I decided to set again my require to optional=true as it was
> before because potentially I can validate my object without my  
> registry.

So, with optional, in the invalidate, you will potentially receive a  
nullable object (so a mock object doing nothing).

Regards,

Clement

>
> Thanks for your help.
>
> Clement Escoffier wrote:
>> Hi,
>>
>> On 25.08.2009, at 11:25, mffrench@axway.com wrote:
>>
>>> Hello again,
>>>
>>> I must add my two iPojo services have the same start level because
>>> they're coming from the same bundle. I don't know if it can be  
>>> usefull
>>> to understand my problem...
>>>
>>> ++
>>>
>>> mffrench@axway.com wrote:
>>>> Hello,
>>>>
>>>> I've two iPojo services object and objectRegistry. The service  
>>>> object
>>>> requires objectRegistry and the services objectRegistry doesn't  
>>>> require
>>>> any services.
>>>> When starting (iPojo @Validate) my object service it  
>>>> automatically bind
>>>> itself in the objectRegistry service.
>>>> When stopping (iPojo @Invalidate) my object service it  
>>>> automatically
>>>> unbind itself from the objectRegistry service.
>>>>
>>>> Sometimes I get this warning when shutting down my Felix:
>>>>
>>>> [WARNING] object : [object.42679d9e-eee8-4810-bcd4-a21b5cbc91a1]  
>>>> The
>>>> dependency is not optional, however no service objectRegistry can  
>>>> be
>>>> injected in obr -> objectRegistry
>>>>
>>>> After this warning I get a null pointer exception - no more as I  
>>>> verify
>>>> now if obr is null or not before any call on it - on my object
>>>> invalidate stop method because object try to unbind itself from my
>>>> objectRegistry services.
>>>>
>>>> As I can not reproduce the problem every time I've the impression  
>>>> Felix
>>>> is shutting down its services in a disorder way ... Some times  
>>>> it's ok
>>>> some times not...
>>>>
>>>> I would like to understand why the service objectRegistry has been
>>>> shutdown before the service object as object requires  
>>>> objectRegistry ?
>>>> Should Felix not manage the requires tree at shutdown as it  
>>>> managed it
>>>> at start ? Do I miss something ? Is this a known bug ? Is there a
>>>> solution for this problem ?
>>>>
>>>> Thanks for all.
>>
>>
>> It not a bug, it a normal behavior. Let me explain why:
>> during the shutdown, Felix stops all the bundles, and so services  
>> leaves.
>> When a required (not optional) service leaves, it invalidates the
>> instance. If this instance has an 'invalidate' callback, this  
>> callback
>> is called. The callback is called after its unregistration, that's  
>> why
>> the service is no more available. So, invalidate callbacks must be
>> developed defensively to check service availability:
>> public void stop() {
>>  if (myservice != null) {
>>    // you can use myservice
>> }
>> }
>>
>> If you really need to do something on this service before it leaves,
>> you can add an unbind callback on the dependency. This callback is
>> called during the unregistration, and so you have access to the  
>> service.
>>
>> Regards,
>>
>> Clement
>>
>>
>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>>>> For additional commands, e-mail: users-help@felix.apache.org
>>>>
>>>>
>>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>>> For additional commands, e-mail: users-help@felix.apache.org
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>> For additional commands, e-mail: users-help@felix.apache.org
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Question about Felix shutdown, iPojo life cycle and iPojo requires...

Posted by "mffrench@axway.com" <mf...@axway.com>.
Hello Clement,

thanks for your answer. I tried to add an unbind method but my log show
me this method is never called (even if I set an id to the require and
the unbind). I've the impression it's because the unregistering of the
two services are done almost in the same time. What do you think about
this ?

Anyway I decided to set again my require to optional=true as it was
before because potentially I can validate my object without my registry.

Thanks for your help.

Clement Escoffier wrote:
> Hi,
>
> On 25.08.2009, at 11:25, mffrench@axway.com wrote:
>
>> Hello again,
>>
>> I must add my two iPojo services have the same start level because
>> they're coming from the same bundle. I don't know if it can be usefull
>> to understand my problem...
>>
>> ++
>>
>> mffrench@axway.com wrote:
>>> Hello,
>>>
>>> I've two iPojo services object and objectRegistry. The service object
>>> requires objectRegistry and the services objectRegistry doesn't require
>>> any services.
>>> When starting (iPojo @Validate) my object service it automatically bind
>>> itself in the objectRegistry service.
>>> When stopping (iPojo @Invalidate) my object service it automatically
>>> unbind itself from the objectRegistry service.
>>>
>>> Sometimes I get this warning when shutting down my Felix:
>>>
>>> [WARNING] object : [object.42679d9e-eee8-4810-bcd4-a21b5cbc91a1] The
>>> dependency is not optional, however no service objectRegistry can be
>>> injected in obr -> objectRegistry
>>>
>>> After this warning I get a null pointer exception - no more as I verify
>>> now if obr is null or not before any call on it - on my object
>>> invalidate stop method because object try to unbind itself from my
>>> objectRegistry services.
>>>
>>> As I can not reproduce the problem every time I've the impression Felix
>>> is shutting down its services in a disorder way ... Some times it's ok
>>> some times not...
>>>
>>> I would like to understand why the service objectRegistry has been
>>> shutdown before the service object as object requires objectRegistry ?
>>> Should Felix not manage the requires tree at shutdown as it managed it
>>> at start ? Do I miss something ? Is this a known bug ? Is there a
>>> solution for this problem ?
>>>
>>> Thanks for all.
>
>
> It not a bug, it a normal behavior. Let me explain why:
> during the shutdown, Felix stops all the bundles, and so services leaves.
> When a required (not optional) service leaves, it invalidates the
> instance. If this instance has an 'invalidate' callback, this callback
> is called. The callback is called after its unregistration, that's why
> the service is no more available. So, invalidate callbacks must be
> developed defensively to check service availability:
> public void stop() {
>   if (myservice != null) {
>     // you can use myservice
>  }
> }
>
> If you really need to do something on this service before it leaves,
> you can add an unbind callback on the dependency. This callback is
> called during the unregistration, and so you have access to the service.
>
> Regards,
>
> Clement
>
>
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>>> For additional commands, e-mail: users-help@felix.apache.org
>>>
>>>
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>> For additional commands, e-mail: users-help@felix.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Question about Felix shutdown, iPojo life cycle and iPojo requires...

Posted by Clement Escoffier <cl...@gmail.com>.
Hi,

On 25.08.2009, at 11:25, mffrench@axway.com wrote:

> Hello again,
>
> I must add my two iPojo services have the same start level because
> they're coming from the same bundle. I don't know if it can be usefull
> to understand my problem...
>
> ++
>
> mffrench@axway.com wrote:
>> Hello,
>>
>> I've two iPojo services object and objectRegistry. The service object
>> requires objectRegistry and the services objectRegistry doesn't  
>> require
>> any services.
>> When starting (iPojo @Validate) my object service it automatically  
>> bind
>> itself in the objectRegistry service.
>> When stopping (iPojo @Invalidate) my object service it automatically
>> unbind itself from the objectRegistry service.
>>
>> Sometimes I get this warning when shutting down my Felix:
>>
>> [WARNING] object : [object.42679d9e-eee8-4810-bcd4-a21b5cbc91a1] The
>> dependency is not optional, however no service objectRegistry can be
>> injected in obr -> objectRegistry
>>
>> After this warning I get a null pointer exception - no more as I  
>> verify
>> now if obr is null or not before any call on it - on my object
>> invalidate stop method because object try to unbind itself from my
>> objectRegistry services.
>>
>> As I can not reproduce the problem every time I've the impression  
>> Felix
>> is shutting down its services in a disorder way ... Some times it's  
>> ok
>> some times not...
>>
>> I would like to understand why the service objectRegistry has been
>> shutdown before the service object as object requires  
>> objectRegistry ?
>> Should Felix not manage the requires tree at shutdown as it managed  
>> it
>> at start ? Do I miss something ? Is this a known bug ? Is there a
>> solution for this problem ?
>>
>> Thanks for all.


It not a bug, it a normal behavior. Let me explain why:
during the shutdown, Felix stops all the bundles, and so services  
leaves.
When a required (not optional) service leaves, it invalidates the  
instance. If this instance has an 'invalidate' callback, this callback  
is called. The callback is called after its unregistration, that's why  
the service is no more available. So, invalidate callbacks must be  
developed defensively to check service availability:
public void stop() {
   if (myservice != null) {
     // you can use myservice
  }
}

If you really need to do something on this service before it leaves,  
you can add an unbind callback on the dependency. This callback is  
called during the unregistration, and so you have access to the service.

Regards,

Clement


>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>> For additional commands, e-mail: users-help@felix.apache.org
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Question about Felix shutdown, iPojo life cycle and iPojo requires...

Posted by "mffrench@axway.com" <mf...@axway.com>.
Hello again,

I must add my two iPojo services have the same start level because
they're coming from the same bundle. I don't know if it can be usefull
to understand my problem...

++

mffrench@axway.com wrote:
> Hello,
>
> I've two iPojo services object and objectRegistry. The service object
> requires objectRegistry and the services objectRegistry doesn't require
> any services.
> When starting (iPojo @Validate) my object service it automatically bind
> itself in the objectRegistry service.
> When stopping (iPojo @Invalidate) my object service it automatically
> unbind itself from the objectRegistry service.
>
> Sometimes I get this warning when shutting down my Felix:
>
> [WARNING] object : [object.42679d9e-eee8-4810-bcd4-a21b5cbc91a1] The
> dependency is not optional, however no service objectRegistry can be
> injected in obr -> objectRegistry
>
> After this warning I get a null pointer exception - no more as I verify
> now if obr is null or not before any call on it - on my object
> invalidate stop method because object try to unbind itself from my
> objectRegistry services.
>
> As I can not reproduce the problem every time I've the impression Felix
> is shutting down its services in a disorder way ... Some times it's ok
> some times not...
>
> I would like to understand why the service objectRegistry has been
> shutdown before the service object as object requires objectRegistry ?
> Should Felix not manage the requires tree at shutdown as it managed it
> at start ? Do I miss something ? Is this a known bug ? Is there a
> solution for this problem ?
>
> Thanks for all.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org
>
>
>   


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org