-
1. Re: ApplicationScoped and synthetic beans
manovotn May 3, 2018 3:43 AM (in response to ljnelson)Not sure what you mean by saying singleton (little-"s")? Is it the general programming pattern you are referring to?
ljnelson wrote:
If I want to have a bean created that is scoped in a singleton (little-"s") way, there is no point to having it be @ApplicationScoped, right, since by the specification it cannot be intercepted or decorated?
@ApplicationScoped can be intercepted or decorated if that's an ordinary bean backed by java class. If we are talking producers, then there is InterceptionFactory (CDI 2.0).
ljnelson wrote:
In other words, for a producer method (for example) that wishes to produce a singleton (little-"s"), it should @Produces @Singleton instead of @Produces @ApplicationScoped, right?
First of all - I am going to assume you are talking about EJB Singleton here (not CDI @Singleton).
If that's the case, then both would work most of the times; they both fill the role of sole instance in your application. Each of them just provide some additional capability or two.
Even if you use EJB's @Singleton, CDI will still pick that bean up and turn in into a CDI bean as well (and BTW it will be @ApplicationScoped from CDI point of view), hence in that case you get best of both worlds.
The question is, if you even need it to be an EJB bean? EJB's @Singleton gives you the ability to (from the top of my head) have eager initialization, manage EJB timers, invoke asynchronous methods, remotely invoke methods and probably more.
-
2. Re: ApplicationScoped and synthetic beans
mkouba May 3, 2018 3:53 AM (in response to ljnelson)Well, there are few other reasons why to use application context. E.g. client proxies may help with circular dependencies, in Weld normal-scoped beans are instantiated lazily (i.e. an instance is not created until a client proxy method is invoked), client proxies may be passivated (serialized), even when the bean itself may not be... Last but not least
@Singleton
is not a bean defining annotation. Oh, and I forgot that application context is AlterableContext which means that you can destroy an@ApplicationScoped
bean and it's recreated once needed again (this would not work without proxies). -
3. Re: ApplicationScoped and synthetic beans
ljnelson May 3, 2018 11:33 AM (in response to manovotn)manovotn wrote:
Not sure what you mean by saying singleton (little-"s")? Is it the general programming pattern you are referring to?
Yes.
@ApplicationScoped can be intercepted or decorated if that's an ordinary bean backed by java class. If we are talking producers, then there is InterceptionFactory (CDI 2.0).
Thanks; that helps.
ljnelson wrote:
In other words, for a producer method (for example) that wishes to produce a singleton (little-"s"), it should @Produces @Singleton instead of @Produces @ApplicationScoped, right?
First of all - I am going to assume you are talking about EJB Singleton here (not CDI @Singleton).
No,
javax.inject.Singleton
.Best,
Laird
-
4. Re: ApplicationScoped and synthetic beans
ljnelson May 3, 2018 11:34 AM (in response to mkouba)mkouba wrote:
Well, there are few other reasons why to use application context. E.g. client proxies may help with circular dependencies, in Weld normal-scoped beans are instantiated lazily (i.e. an instance is not created until a client proxy method is invoked), client proxies may be passivated (serialized), even when the bean itself may not be... Last but not least
@Singleton
is not a bean defining annotation. Oh, and I forgot that application context is AlterableContext which means that you can destroy an@ApplicationScoped
bean and it's recreated once needed again (this would not work without proxies).Thank you; this is exactly what I'm looking for.
Best,
Laird