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 <rmannibu...@gmail.com>
wrote:

> And removing the static?
>
> Le 10 oct. 2017 11:45, "Paul Carter-Brown" <
> paul.carter-br...@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 <
> rmannibu...@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" <agumbre...@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-br...@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>

Reply via email to