This is exactly the case. Our Declarative Services implementation
maintains a single background thread which is responsible for binding
references and activating components.

So, yes, here you generally will not get a bind or unbind call while in
the activate method.

I chose this implementation to minimize the risks for deadlocks to the
absolute possible minimum. For example a service REGISTERED event is
received in the thread which registers the service, which may well be
the thread starting the bundle (if the service registered by a bundle
activator).

Such a service registration may lead to the satisfaction of a component
and thus to another serice registration and bind etc. etc. So instead of
just letting this waterfall flow, each bind and/or undind is queue and
then sequentally handled.

But again: Don't take this for granted, this is an implementation
speciality of the Felix SCR implementation.

At always keep in mind: A service may come or may go at any point in time.

Regards
Felix

Richard S. Hall schrieb:
> I am not sure if this has anything to do with Felix per se, it sounds
> like more of a feature of the SCR implementation. Perhaps SCR queues its
> work, in which case, the activate would be processed before the bind.
> 
> -> richard
> 
> On 3/7/09 9:35 AM, Reto Bachmann-Gmür wrote:
>> experimenting with felix I found that dynamic dependencies are not
>> injected while the acivate method is being executed.
>>
>> The experiment code
>>
>> /**
>> *  @scr.component
>>   * @scr.reference name="component" cardinality="0..n" policy="dynamic"
>>   *                interface="java.lang.Object" target="(testing=true)"
>>   */
>> public class Main {
>>
>>      protected void bindComponent(Object component) {
>>          System.out.print("binding component");
>>      }
>>
>>      protected void unbindComponent(Object component) {
>>          System.out.print("unbinding component");
>>      }
>>
>>      protected void activate(ComponentContext context) {
>>          System.out.print("starting");
>>          try {
>>              Thread.sleep(30 * 1000);
>>          } catch (InterruptedException ex) {
>>              ex.printStackTrace();
>>          }
>>          System.out.print("finished starting");
>>      }
>> }
>>
>> when I activate the above component and an injectable component
>> immediately after, the output "binding component" will only appear after
>> "finished starting".
>>
>> Is this a felix specific behaviour that is not guaranteed by the
>> specifications?
>>
>> Regards,
>> Reto
>>
>>
>>
>> Neil Bartlett said the following on 03/05/2009 11:09 AM:
>>   
>>> It depends. If your component uses the "static policy" then the
>>> binds/unbinds will not happen concurrently with the
>>> activate/deactivate methods.
>>>
>>> However, if you use "dynamic" policy then they certainly can happen
>>> concurrently and you need to write your component to be thread-safe.
>>>
>>> Regards
>>> Neil
>>>
>>> On Thu, Mar 5, 2009 at 9:52 AM, Reto Bachmann-Gmür
>>> <reto.bachm...@trialox.org>  wrote:
>>>
>>>     
>>>> I guess a simple question: is it guaranteed that the
>>>> activate,deactivate, the bind- and unbind methods of a component are
>>>> not
>>>> called synchronously?
>>>>
>>>> Cheers,
>>>> Reto
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org
>>>> For additional commands, e-mail: users-h...@felix.apache.org
>>>>
>>>>
>>>>
>>>>        
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org
>>> For additional commands, e-mail: users-h...@felix.apache.org
>>>
>>>
>>>      
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org
>> For additional commands, e-mail: users-h...@felix.apache.org
>>
>>    
> 


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

Reply via email to