tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paul Carter-Brown <paul.carter-br...@smilecoms.com>
Subject Re: @PostConstruct called twice on @javax.inject.Singleton
Date Tue, 10 Oct 2017 13:26:46 GMT
Hi,

I've used @ApplicationScoped and @javax.inject.Singleton and both have the
same behaviour. Seems like webbeans considers both to be Singleton as they
are stored in the singleton context.

In terms of the behaviour of these in an EAR:

https://issues.jboss.org/browse/CDI-129

Doing more research now...

On 10 October 2017 at 15:18, Romain Manni-Bucau <rmannibucau@gmail.com>
wrote:

> But with skinny wars you still get it in the webapp loader and lib part
> right ? It is not about physical model but resolved one.
>
> Le 10 oct. 2017 14:11, "Paul Carter-Brown" <paul.carter-brown@smilecoms.
> com>
> a écrit :
>
> Hi Romain,
>
> Correct me if I'm wrong but my understanding is that an EAR with shared
> library jars should be considered as a single application. If a class
> exists in a single jar and a single classloader and is marked as a
> singleton then is it wrong to expect it to only be constructed once by CDI?
> I could understand if the jar was in web-inf/lib of multiple wars but it's
> not.
>
> Paul
>
> On 10 October 2017 at 14:55, Romain Manni-Bucau <rmannibucau@gmail.com>
> wrote:
>
> > That is what I had in mind and it matches the classloader model of skinny
> > wars I think so it looks like it works as intended - as thought I mean.
> >
> > Side note: you surely meant @ApplicationScoped more than singleton.
> >
> >
> > Le 10 oct. 2017 13:44, "Paul Carter-Brown" <paul.carter-brown@smilecoms.
> > com>
> > a écrit :
> >
> > > Hi Romain,
> > >
> > > As a non-static it is different on each call. The singleton is being
> > > constructed twice within the same classloader.
> > >
> > > I did some more digging and debugging and can see that 2 singleton
> > contexts
> > > are being created in CDI by two different initialisation flows that
> both
> > > end up at org.apache.openejb.cdi.OpenEJBLifecycle.startApplication.
> > These
> > > 2
> > > contexts their have their own state as to which beans are instantiated
> > and
> > > hence each calls postconstruct. Here are the stack traces for each
> case:
> > >
> > > 2017/10/10 14:13:36.626 WARNING
> > > [main][1][org.apache.webbeans.context.SingletonContext.<init>] |In
> > > constructor
> > > java.lang.Exception
> > > at
> > > org.apache.webbeans.context.SingletonContext.<init>(
> > > SingletonContext.java:44)
> > > at
> > > org.apache.webbeans.web.context.WebContextsService.
> initSingletonContext(
> > > WebContextsService.java:643)
> > > at
> > > org.apache.webbeans.web.context.WebContextsService.startContext(
> > > WebContextsService.java:329)
> > > at
> > > org.apache.webbeans.web.context.WebContextsService.
> > > init(WebContextsService.java:165)
> > > at
> > > org.apache.openejb.cdi.CdiAppContextsService.init(
> > > CdiAppContextsService.java:72)
> > > at
> > > org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(
> > > OpenEJBLifecycle.java:197)
> > > *at
> > > org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(
> > > ThreadSingletonServiceImpl.java:189)*
> > > at org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:41)
> > > at
> > > org.apache.openejb.assembler.classic.Assembler.
> > > createApplication(Assembler.java:917)
> > > at
> > > org.apache.openejb.assembler.classic.Assembler.
> > > createApplication(Assembler.java:721)
> > > at
> > > org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(
> > > Assembler.java:599)
> > > at org.apache.openejb.assembler.classic.Assembler.build(
> > > Assembler.java:487)
> > > at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:150)
> > > at org.apache.openejb.OpenEJB.init(OpenEJB.java:307)
> > > at org.apache.tomee.catalina.TomcatLoader.initialize(
> > > TomcatLoader.java:247)
> > > at
> > > org.apache.tomee.catalina.ServerListener.lifecycleEvent(
> > > ServerListener.java:168)
> > > at
> > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > LifecycleBase.java:94)
> > > at
> > > org.apache.catalina.util.LifecycleBase.setStateInternal(
> > > LifecycleBase.java:395)
> > > at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:108)
> > > at org.apache.catalina.startup.Catalina.load(Catalina.java:607)
> > > at org.apache.catalina.startup.Catalina.load(Catalina.java:630)
> > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > > at
> > > sun.reflect.NativeMethodAccessorImpl.invoke(
> > NativeMethodAccessorImpl.java:
> > > 62)
> > > at
> > > sun.reflect.DelegatingMethodAccessorImpl.invoke(
> > > DelegatingMethodAccessorImpl.java:43)
> > > at java.lang.reflect.Method.invoke(Method.java:498)
> > > at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:311)
> > > at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:494)
> > >
> > >
> > > and:
> > >
> > > 2017/10/10 14:13:37.269 WARNING
> > > [localhost-startStop-1][38][org.apache.webbeans.context.
> > > SingletonContext.<init>]
> > > |In constructor
> > > java.lang.Exception
> > > at
> > > org.apache.webbeans.context.SingletonContext.<init>(
> > > SingletonContext.java:44)
> > > at
> > > org.apache.webbeans.web.context.WebContextsService.
> initSingletonContext(
> > > WebContextsService.java:643)
> > > at
> > > org.apache.webbeans.web.context.WebContextsService.startContext(
> > > WebContextsService.java:329)
> > > at
> > > org.apache.webbeans.web.context.WebContextsService.
> > > init(WebContextsService.java:165)
> > > at
> > > org.apache.openejb.cdi.CdiAppContextsService.init(
> > > CdiAppContextsService.java:72)
> > > at
> > > org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(
> > > OpenEJBLifecycle.java:197)
> > > *at
> > > org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(
> > > ThreadSingletonServiceImpl.java:189)*
> > > at org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:60)
> > > at
> > > org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(
> > > TomcatWebAppBuilder.java:1424)
> > > at
> > > org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(
> > > TomcatWebAppBuilder.java:1125)
> > > at
> > > org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> > > GlobalListenerSupport.java:133)
> > > at
> > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > LifecycleBase.java:94)
> > > at
> > > org.apache.catalina.core.StandardContext.startInternal(
> > > StandardContext.java:5105)
> > > at org.apache.catalina.util.LifecycleBase.start(
> LifecycleBase.java:150)
> > > at
> > > org.apache.catalina.core.ContainerBase$StartChild.call(
> > > ContainerBase.java:1419)
> > > at
> > > org.apache.catalina.core.ContainerBase$StartChild.call(
> > > ContainerBase.java:1409)
> > > at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> > > at
> > > java.util.concurrent.ThreadPoolExecutor.runWorker(
> > > ThreadPoolExecutor.java:1149)
> > > at
> > > java.util.concurrent.ThreadPoolExecutor$Worker.run(
> > > ThreadPoolExecutor.java:624)
> > > at java.lang.Thread.run(Thread.java:748)
> > >
> > >
> > > Let me know if you would prefer me to put any further findings on this
> > > forum or on the ticket.
> > >
> > > Paul
> > >
> > > On 10 October 2017 at 13:15, Romain Manni-Bucau <rmannibucau@gmail.com
> >
> > > wrote:
> > >
> > > > And removing the static?
> > > >
> > > > Le 10 oct. 2017 11:45, "Paul Carter-Brown" <
> > > > paul.carter-brown@opposablethumbs.io> a écrit :
> > > >
> > > > > Hi Andy/Romain,
> > > > >
> > > > > I'll load on github today and create a ticket.
> > > > >
> > > > > I have verified that it is a single instance by having a static
> > > > > initializer: private static final String uuid =
> > > > > UUID.randomUUID().toString();
> > > > >
> > > > > The uuid remains the same on both calls to the postconstruct method
> > > > >
> > > > > Paul
> > > > >
> > > > > On Tue, Oct 10, 2017 at 7:56 AM, Romain Manni-Bucau <
> > > > rmannibucau@gmail.com
> > > > > >
> > > > > wrote:
> > > > >
> > > > > > Hi Paul,
> > > > > >
> > > > > > Did you check the instance - identity hashcode for instance?
I
> > wonder
> > > > if
> > > > > it
> > > > > > is not 2 instances triggered on the same event.
> > > > > >
> > > > > > Otherwise Andy is fully right in terms of enabling us to help
> you.
> > > > > >
> > > > > > Le 10 oct. 2017 01:25, "Andy Gumbrecht" <
> agumbrecht@tomitribe.com>
> > a
> > > > > > écrit :
> > > > > >
> > > > > > > Hi Paul,
> > > > > > >
> > > > > > > In the interest of safety first, and benefit second, please
> > create
> > > a
> > > > > > > ticket here: https://issues.apache.org/jira/projects/TOMEE
> > > > > > >
> > > > > > > Rather than attaching a ZIP here, please consider creating
a
> > GitHub
> > > > > > > project and sharing it in the ticket.
> > > > > > >
> > > > > > > Thanks,
> > > > > > >
> > > > > > > Andy.
> > > > > > >
> > > > > > > On 09/10/17 15:00, Paul Carter-Brown wrote:
> > > > > > >
> > > > > > >> Hi,
> > > > > > >>
> > > > > > >> Please see attached a test project in which a simple
singleton
> > is
> > > > > being
> > > > > > >> initialised twice (post construct is called twice).
Deploy the
> > ear
> > > > to
> > > > > > TomEE
> > > > > > >> (i'm using 7.0.3) and look at the logs.
> > > > > > >>
> > > > > > >> I picked up this issue in a large project with an ear
> containing
> > > > many
> > > > > > >> wars packaged as "skinny". The injected bean is in
one of the
> > > shared
> > > > > > >> libraries.
> > > > > > >>
> > > > > > >> If the pom in the ear project is changed to
> > > > > > <skinnyWars>false</skinnyWars>
> > > > > > >> and lines 44-48 are removed then the issue goes away
and the
> > init
> > > is
> > > > > > only
> > > > > > >> called once.
> > > > > > >>
> > > > > > >> Any ideas?
> > > > > > >>
> > > > > > >> Paul
> > > > > > >>
> > > > > > >>
> > > > > > >> This email is subject to the disclaimer of Smile
> Communications
> > > > > > athttp://
> > > > > > >> www.smilecoms.com/home/email-disclaimer/ <
> > > > > http://www.smilecoms.com/home
> > > > > > >> /email-disclaimer/>
> > > > > > >>
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > >
> > > *Paul Carter-Brown*
> > >
> > > *Group Chief Information Officer*
> > >
> > > *Smile Communications Pty (Ltd)       *
> > > Smile +234 (0) 702 000 1234
> > > Mobile +27 (0) 83 4427 179
> > > Skype PaulC-B
> > > paul.carter-brown@smilecoms.com
> > > www.smilecoms.com
> > >
> > > --
> > >
> > >
> > > This email is subject to the disclaimer of Smile Communications at
> > > http://www.smilecoms.com/home/email-disclaimer/ <
> > http://www.smilecoms.com/
> > > disclaimer>
> > >
> > >
> >
>
>
>
> --
>
> *Paul Carter-Brown*
>
> *Group Chief Information Officer*
>
> *Smile Communications Pty (Ltd)       *
> Smile +234 (0) 702 000 1234
> Mobile +27 (0) 83 4427 179
> Skype PaulC-B
> paul.carter-brown@smilecoms.com
> www.smilecoms.com
>
> --
>
>
> This email is subject to the disclaimer of Smile Communications at
> http://www.smilecoms.com/home/email-disclaimer/ <http://www.smilecoms.com/
> disclaimer>
>



-- 

*Paul Carter-Brown*

*Group Chief Information Officer*

*Smile Communications Pty (Ltd)       *
Smile +234 (0) 702 000 1234
Mobile +27 (0) 83 4427 179
Skype PaulC-B
paul.carter-brown@smilecoms.com
www.smilecoms.com

-- 


This email is subject to the disclaimer of Smile Communications at http://www.smilecoms.com/home/email-disclaimer/
<http://www.smilecoms.com/disclaimer>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message