[weld-dev] Application scoped bean and its lifecycle
Alex Sviridov
ooo_saturn7 at mail.ru
Mon May 22 06:03:18 EDT 2017
Martin,
Thank you for your answer. I replaced 2.3.5.Final with 2.2.16.Final. Besides in 2.2.16 in
manifest I had to export package org.jboss.weld.config which is used by pax-cdi.
Now on bundle start:
Test was created.
java.lang.Object at 6bc3928f
Test was initialized
Now on bundle stop:
java.lang.Object at 6bc3928f
Test was destroyed.
Понедельник, 22 мая 2017, 12:27 +03:00 от Martin Kouba <mkouba at redhat.com>:
>
>Dne 22.5.2017 v 11:14 Alex Sviridov napsal(a):
>> Martin,
>>
>> In your message you wrote : "Up to version 2.2 Weld did not fire
>> @Initialized/@Destroyed events for
>> @ApplicationScoped for non-web modules.".
>>
>> In WELD-2389 you wrote : "Right now, this service is registered for any
>> non-SE environment".
>>
>> I use OSGi + PAX-CDI + WELD + JAVAFX. As I suppose this is a SE
>> application (not EE).
>> Could you explain "Right now, this service is registered for any non-SE
>> environment" ?
>
>Well, I'm talking about Weld SPI and I'm refering to the environment
>info provided by the integrator. PAX CDI provides a custom
>implementation of org.jboss.weld.bootstrap.api.Environment, which is
>fine. The problem is that Weld currently skips registration only if
>org.jboss.weld.bootstrap.api.Environments.SE is used.
>
>>
>> Best regards, Alex
>>
>>
>> Понедельник, 22 мая 2017, 11:51 +03:00 от Martin Kouba
>> < mkouba at redhat.com >:
>>
>> 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 at 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 at 48813e62
>> > Test was initialized
>> >
>> > Now on bundle stop:
>> >
>> > java.lang.Object at 48813e62
>> > Test was destroyed.
>> > Test was created.
>> > Application context destroyed.
>> > Test was destroyed.
>> >
>> >
>> > Понедельник, 22 мая 2017, 10:48 +03:00 от Martin Kouba
>> > < mkouba at redhat.com <mailto: mkouba at redhat.com >>:
>> >
>> > 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
>> > > weld-dev at lists.jboss.org <mailto: weld-dev at lists.jboss.org >
>> <mailto: weld-dev at lists.jboss.org <mailto: weld-dev at lists.jboss.org >>
>> > > 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
>>
>>
>>
>> --
>> Alex Sviridov
>
>--
>Martin Kouba
>Senior Software Engineer
>Red Hat, Czech Republic
--
Alex Sviridov
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/weld-dev/attachments/20170522/1aec086d/attachment-0001.html
More information about the weld-dev
mailing list