myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Howard W. Smith, Jr." <smithh032...@gmail.com>
Subject Re: [MyFaces 2.2] invoke @PreDestroy on (CDI) ViewScoped beans upon session expiration
Date Fri, 18 Oct 2013 03:45:04 GMT
Okay, that is great. I'm waiting for the following folders to be updated
with the latest version:

1.
https://repository.apache.org/content/repositories/snapshots/org/apache/myfaces/core/myfaces-api/2.2.0-SNAPSHOT/

2.
https://repository.apache.org/content/repositories/snapshots/org/apache/myfaces/core/myfaces-impl/2.2.0-SNAPSHOT/




On Thu, Oct 17, 2013 at 10:47 PM, Leonardo Uribe <lu4242@gmail.com> wrote:

> Hi
>
> I have found the bug. The problem was caused on a refactor, there was an
> old code that skip state saving when view map is empty, but now since there
> is a proxy for that implementing StateHolder, the map can be empty but it
> holds the view scope key. Since with CDI the beans are stored internally,
> the map keeps empty but the scope is not, and if the view scope key is lost
> the bean is recreated every time. But the beans are still in session, and
> with the session timeout bug the final result is @PreDestroy is not called.
>
> Please try again with the latest code, it should work. And please lets us
> know what happened, if it is working or not.
>
> regards,
>
> Leonardo Uribe
>
>
>
> 2013/10/17 Leonardo Uribe <lu4242@gmail.com>
>
> > Hi
> >
> > I have committed a fix for the problem with the timeout. But I'm curious
> > about this problem, because I tested this scope and specifically the
> > @PreDestroy stuff. It should work. But maybe there is a bug somewhere....
> >
> > regards,
> >
> > Leonardo Uribe
> >
> >
> > 2013/10/17 Howard W. Smith, Jr. <smithh032772@gmail.com>
> >
> >> responses inline below,
> >>
> >>
> >>
> >> On Thu, Oct 17, 2013 at 9:32 PM, Leonardo Uribe <lu4242@gmail.com>
> wrote:
> >>
> >> >
> >> >     public void onSessionDestroyed()
> >> >     {
> >> >         // In CDI case, the best way to deal with this is use a method
> >> >         // with @PreDestroy annotation on a session scope bean
> >> >         // ( ViewScopeBeanHolder.destroyBeans() ). There is no need
> >> >         // to do anything else in this location, but it is advised
> >> >         // in CDI the beans are destroyed at the end of the request,
> >> >         // not when invalidateSession() is called.
> >> >         FacesContext facesContext = FacesContext.getCurrentInstance();
> >> >         if (facesContext != null)
> >> >         {
> >> >
> >> > I suppose what's going on there is in the context the session
> >> invalidation
> >> > is done, FacesContext is null and @PreDestroy is ignored.
> >> >
> >>
> >> I can agree with that.
> >>
> >>
> >> >
> >> > To be clear two questions:
> >> >
> >> > 1. Is manual session expiration working ? I suppose yes.
> >> >
> >>
> >> hmmm does manual session expiration == HttpSession.invalidate()?
> >>
> >> When user click Logout button, my app execute/triggers
> >> HttpSession.invalidate(), and @PreDestroy (on CDI @ViewScoped bean) is
> not
> >> executed.
> >>
> >>
> >>
> >> > 2. Is session invalidation by a timeout working ? I suppose no.
> >> >
> >>
> >> correct, I just verified that in my app. see below.
> >>
> >> - navigated to page that reference CDI @ViewScoped bean, @PostConstruct
> >> (below) executed
> >>
> >> Oct 17, 2013 9:45:18 PM jsf.orders.OrderDocumentBean init
> >> INFO: jsf.orders.OrderDocumentBean@a9faef9
> >>
> >> changed web.xml, session timeout = 1 minute, so tomee ended session
> >> via/after timeout, and @PreDestroy on CDI @SessionScoped (below)
> executed,
> >>
> >> Oct 17, 2013 9:45:53 PM jsf.users.pf_UsersController sessionTimeout
> >> INFO: administrator session ended at 10/17/2013 09:45 PM
> >>
> >> but @PreDestroy on CDI @ViewScoped bean was not executed
> >>
> >>
> >> I will try to provide an example to test.
> >>
> >
> >
>

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