Of course a "warning" would be helpful if it's used with otherscopes.
But in my case this was not the problem. It seems that there is a bug in implementation.osgi, because annotations are not processed at all. I raised a Jira for this (https://issues.apache.org/jira/browse/TUSCANY-2605). Bye, Daniel Von: Vamsavardhana Reddy [mailto:[EMAIL PROTECTED] Gesendet: Freitag, 19. September 2008 09:14 An: [email protected] Betreff: Re: Question about @EagerInit Correct me if I am wrong. In summary, it means that @EagerInit is useful only with Composite scope. And the Java Annotations and API's spec also mentions @EagerInit with Composite scope only. Will it be useful to log an info message when @EagerInit is found in combination with a different scope? ++Vamsi On Fri, Sep 12, 2008 at 11:29 PM, Mike Edwards <[EMAIL PROTECTED]> wrote: [EMAIL PROTECTED] wrote: Hi all, this week I learned the hard way that Component references are not initialized during startup but on the first method call on a Service. I found some flags called "eagerinit" in the code and a matching annotation "@EagerInit". In the SCA specification this annotation is not documented well, but I think that it may be used to annotate a implementation class to perform initialization on startup time. Of course I tested it, but nothing happened. So is my understanding of "@EagerInit" right that this annotation would force a Service to initlaize it's references before a method is called ? And is this annotation supported by Tuscany ? Bye, Daniel Daniel, The question is, what are you trying to achieve? For a default component implementation in Java (ie just write a class to implement your service), the assumption is that your service is stateless. This means that each invocation of a service method works like it is the first call to your class - with no history. So an SCA server runtime can in principle new up a class instance for every service invocation - and toss it away at the end of that method. So, for this default case @EagerInit is not very useful. The initialization will only occur just before the service method invocation. SCA provides two other lifecycle patterns for Java component implementations - termed "scopes" - Conversational scope and Composite scope. Implementations using these scopes have lifetimes longer than a single invocation. Conversational scope implementations have a lifecycle tied to the lifecycle of the conversational (stateful) service that they offer. This starts typically when one of the service methods is called and lasts until a method marked with @EndsConversation is called (or until the implementation calls an API to end the conversation). Here, the initialization takes place just before the first invocation. @EagerInit does not buy you much here. Composite scope implementations have a lifecycle related to the Composite in which they are configured - typically the lifecycle is from the point where the composite is deployed into the runtime until the time when the composite gets undeployed. So here is a scope where the lifecycle of the implementation is not tied to any service invocations. Examples of implementations needing this lifecycle are any that might have long and complex initialization to handle - eg an in-memory database. Here, @EagerInit allows the implementation to do its initialization when the component is loaded, reducing any overhead when the first service invocation happens. So, why do you want to get at the component references ahead of time? Does your need fit the composite scope pattern? Yours, Mike.
