Ok, now I know what's going on. The event with payload "Application context initialized." comes directly from Weld. Whereas the second one java.lang.Object@48813e62 comes from PAX CDI [1].
Up to version 2.2 Weld did not fire @Initialized/@Destroyed events for @ApplicationScoped for non-web modules. The behavior changed in 2.3 - see also WELD-1821 [2]. This explains the events fired twice. WRT Test bean instance created twice - the problem is that @Destroyed(ApplicationScoped.class) event is fired after the actual destruction. So if you declare an observer on an @ApplicationScoped you're entering the "undefined behavior zone". In Weld, the Test bean is created again. I've created WELD-2389 [3] to track this issue. Thanks, Martin [1] https://github.com/ops4j/org.ops4j.pax.cdi/blob/master/pax-cdi-weld/src/main/java/org/ops4j/pax/cdi/weld/impl/WeldCdiContainer.java#L154 [2] https://issues.jboss.org/browse/WELD-1821 [3] https://issues.jboss.org/browse/WELD-2389 Dne 22.5.2017 v 09:57 Alex Sviridov napsal(a): > Hi Martin > > Thank you for your answer. > > 1) I don't inject Test class anywhere. > 2) I modified init and destroy methods: > public void init(@Observes @Initialized(ApplicationScoped.class) > Object init) { > System.out.println(init); > System.out.println("Test was initialized"); > } > > public void destroy(@Observes @Destroyed(ApplicationScoped.class) > Object init) { > System.out.println(init); > System.out.println("Test was destroyed."); > } > > Now on bundle start: > > Test was created. > Application context initialized. > Test was initialized > java.lang.Object@48813e62 > Test was initialized > > Now on bundle stop: > > java.lang.Object@48813e62 > Test was destroyed. > Test was created. > Application context destroyed. > Test was destroyed. > > > Понедельник, 22 мая 2017, 10:48 +03:00 от Martin Kouba > <[email protected]>: > > Hi Alex, > > this looks really weird. Could you try to print out the event payload, > e.g. System.out.println(init)? > > Also you should be always very careful when using code inside the > no-args constructor of a normal-scoped bean -> it will be also executed > when creating a client proxy. In your case, if you do @Inject Test and > invoke any method then you will also see "Test was created" printed > twice. > > Martin > > Dne 22.5.2017 v 08:50 Alex Sviridov napsal(a): > > Hi all > > > > I use pax-cdi -1.0.0.RC2 and weld 2.3.5.Final and this is my test > class: > > > > import javax.enterprise.context.ApplicationScoped; > > import javax.enterprise.context.Destroyed; > > import javax.enterprise.context.Initialized; > > import javax.enterprise.event.Observes; > > > > @ApplicationScoped > > public class Test { > > > > public Test() { > > System.out.println("Test was created."); > > } > > > > public void init(@Observes @Initialized(ApplicationScoped.class) > Object > > init) { > > System.out.println("Test was initialized"); > > } > > > > public void destroy(@Observes @Destroyed(ApplicationScoped.class) > > Object init) { > > System.out.println("Test was destroyed."); > > } > > } > > > > When I start test-bundle I see the following output: > > Test was created. > > Test was initialized > > Test was initialized > > When I stop test-bundle I see the following output: > > Test was destroyed. > > Test was created. > > Test was destroyed. > > > > So as result this bean was two times created, two times > initialized and two > > times destroyed. > > > > I expected that this bean must be once created, one initialized > and once > > destroyed. > > > > Is this a bug that must be reported or my mistake? > > > > -- > > Alex Sviridov > > > > > > _______________________________________________ > > weld-dev mailing list > > [email protected] <mailto:[email protected]> > > https://lists.jboss.org/mailman/listinfo/weld-dev > > > > -- > Martin Kouba > Senior Software Engineer > Red Hat, Czech Republic > > > > -- > Alex Sviridov -- Martin Kouba Senior Software Engineer Red Hat, Czech Republic _______________________________________________ weld-dev mailing list [email protected] https://lists.jboss.org/mailman/listinfo/weld-dev
