Hey David, True, I know thats what the immediate=true will do. What I don't understand is that when you don't use the immediate=true and my service does get lazily loaded when it is finally needed, that it doesn't load all it's references that are dynamic and multiple. Seeing as I have been taught to try and avoid the immediate=true when it isn't absolutely necessary, I am trying to see if there are possibilities to remove it and still get all the dynamic references.
Greets, Roy > On 28 Nov 2016, at 22:37, David Daniel <david.daniel.1...@gmail.com> wrote: > > I believe the immediate true separates the lifecycle from the resolution > phase and is similar to starting a singleton. If there is no immediate > true then the lifecylce is based on when the service is a dependency and > lazily loaded. If another service depends on your service and is started > then your service will be started as well but when the other service > shutsdown and your service is not longer needed then your service will > shutdown as well without the immediate = true. > > On Mon, Nov 28, 2016 at 3:33 PM, Roy Teeuwen <r...@teeuwen.be> wrote: > >> Hey Karel, >> >> Sorry to go further than the original question, but seeing as my question >> is related to exactly the same thing, maybe you can help me understand it >> better. >> Using the exact same example as the in the initial post, if I don't put >> immediate=true, it won't bind all of the services get created at startup or >> get added during the runtime. Is there a reason why it has to be immediate >> = true? >> >> I also tried it by using the following notation, and then this it doesn't >> even bind any of services: >> >> @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = >> ReferencePolicy.DYNAMIC) >> private List<StateMachine> stateMachines = new CopyOnWriteArrayList<>(); >> >> Greetings, >> Roy >>> On 28 Nov 2016, at 21:39, Karel Haeck <karel.ha...@telenet.be> wrote: >>> >>> Nicolas, >>> >>> the spec does not specify that static references should be injected >> before dynamic, >>> but it does specify that references must be processed in sequence as >> specified in the component xml: >>> >>> "When binding services, the references are processed in the order in >> which they are specified in the >>> component description. That is, target services from the first specified >> reference are bound before >>> services from the next specified reference." >>> >>> In addition the spec specifies how @Reference annotations are ordered: >>> >>> " In the generated Component Description for a component, the references >> must be ordered in ascending >>> lexicographical order (using String.compareTo ) of the reference names." >>> >>> Note that the default name is based on the field or method name. In your >> case get aclService for the static reference >>> and "" (empty string) for the dynamic reference as spec states that the >> add , bind or set prefix is removed. >>> ( Actually if one uses Java naming conventions the event methods will >> have names starting with an upper case character and precede the field >> references). >>> >>> By specifying e.g. @Reference( name = "zStateMachine", cardinality = >> ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC) >>> the static reference should be bound first. >>> >>> Note that there is still a potential race condition between the add and >> an activate method if present, >>> or between two concurrent add() executions. >>> >>> regards, >>> Karel >>> >>> On 28/11/2016 12:09, Nicolas Brasey wrote: >>>> Hi, >>>> >>>> I have a bind order issue with a component that has : >>>> >>>> 1) A static reference specified with annotation @Reference on the >> private >>>> field >>>> 2) A dynamic multiple reference specificed with annotation on a method >>>> >>>> The static reference is not bound before the dynamic ones. >>>> >>>> The code looks like this: >>>> >>>> @Component(immediate = true) >>>> public class MyServiceImpl implements MyService { >>>> >>>> @Reference >>>> private AclService aclService; >>>> >>>> @Reference( >>>> cardinality = ReferenceCardinality.MULTIPLE, >>>> policy = ReferencePolicy.DYNAMIC >>>> ) >>>> public void add(StateMachine stateMachine) { >>>> .... >>>> .... >>>> } >>>> >>>> >>>> According to the Declarative Service specifications, the static >> references >>>> should always be injected before the activate method. >>>> >>>> >>>> Does anyone have any idea what might be wrong ? >>>> >>>> >>>> My env is Apache Karaf 4.0.5 with Felix SCR 2.0.2 >>>> >>>> >>>> Thanks for you help! >>>> >>>> Nicolas >>>> >>> >>> >>> --------------------------------------------------------------------- >>> 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