oops, did a magic shortcut deleting half of the mail :s, sorry about it
here is the bean which works:
@ApplicationScoped
public static class Listener {
private boolean init = false;
public void start(@javax.enterprise.event.Observes
@Initialized(ApplicationScoped.class) Object start) {
init = true;
log(start);
}
@PreDestroy
public void end() {
System.out.println();
System.out.println(this);
System.out.println(System.identityHashCode(this));
System.out.println(init);
System.out.println();
}
private void log(final Object event) {
System.out.println();
System.out.println(this);
System.out.println(System.identityHashCode(this));
System.out.println(event);
System.out.println(System.identityHashCode(event));
System.out.println();
}
}
And its output:
org.apache.tomee.embedded.ClasspathAsWebappTest$Listener@4e2916c3
1311315651
org.apache.catalina.core.ApplicationContextFacade@64aad6db
1688917723
org.apache.tomee.embedded.ClasspathAsWebappTest$Listener@4e2916c3
1311315651
true
The destroy event is fired once the bean was already destroyed it seems,
not a blocker clearly but will check why it breaks your case
Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> | Blog
<https://blog-rmannibucau.rhcloud.com> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
<https://javaeefactory-rmannibucau.rhcloud.com>
2017-05-29 11:01 GMT+02:00 Romain Manni-Bucau <[email protected]>:
> Just tested with tomee embedded this listener:
>
> @ApplicationScoped
> public static class Listener {
> public void start(@javax.enterprise.event.Observes
> @Initialized(ApplicationScoped.class) Object start) {
> log(start);
> }
> public void end(@javax.enterprise.event.Observes
> @Destroyed(ApplicationScoped.class) Object end) {
> log(end);
> }
>
> private void log(final Object event) {
> System.out.println();
> System.out.println(this);
> System.out.println(System.identityHashCode(this));
> System.out.println(event);
> System.out.println(System.identityHashCode(event));
> System.out.println();
> }
> }
>
>
> And got:
>
> org.apache.tomee.embedded.ClasspathAsWebappTest$Listener@21c747a
> 35419258
> org.apache.catalina.core.ApplicationContextFacade@77d4ac52
> 2010426450
>
> org.apache.tomee.embedded.ClasspathAsWebappTest$Listener@1913053c
> 420676924
> org.apache.catalina.core.ApplicationContextFacade@77d4ac52
> 2010426450
>
> so looks good
>
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> | Blog
> <https://blog-rmannibucau.rhcloud.com> | Old Blog
> <http://rmannibucau.wordpress.com> | Github
> <https://github.com/rmannibucau> | LinkedIn
> <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> <https://javaeefactory-rmannibucau.rhcloud.com>
>
> 2017-05-29 10:26 GMT+02:00 tonywestonuk <[email protected]>:
>
>>
>> MyService is an @ApplicationScoped bean
>>
>> And, yet the identity hashcodes change between the init, and destroy
>> methods.
>>
>> Which means, I don't have access to the same instance variables in
>> destory,
>> that I constructed in the init.
>>
>> This is the problem.
>>
>>
>> In my specific case, I am creating a UDP socket in init, storing it as an
>> instance variable. And want to close it in destroy. However, the destroy
>> method cant access the socket - crashes with null pointer. I cant
>> hot-redeploy as the UDP socket remains open. :-(
>>
>>
>>
>>
>>
>> --
>> View this message in context: http://tomee-openejb.979440.n4
>> .nabble.com/CDI-Observes-ApplicationScoped-class-tp4681766p4681768.html
>> Sent from the TomEE Users mailing list archive at Nabble.com.
>>
>
>