[jboss-jira] [JBoss JIRA] (AS7-5586) @PreDestroy not called on view scoped managed bean
Stan Silvert (JIRA)
jira-events at lists.jboss.org
Fri Sep 21 13:39:34 EDT 2012
[ https://issues.jboss.org/browse/AS7-5586?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12720749#comment-12720749 ]
Stan Silvert commented on AS7-5586:
-----------------------------------
I'm afraid you won't like this answer, but this is working as per spec. I misread Ed Burn's comments before. @PreDestroy is actually not called on session invalidation for @ViewScoped beans. That's what the spec change is asking for.
Here is the spec request to change this in JSF 2.2:
http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-905
So this does work if you navigate to another view via postback. And that's the only condition on which a @PreDestroy is actually called. It has to go through the NavigtionHandler and call FacesContext.setViewRoot().
To see it working, just add this to the view scoped bean:
{code}
public String goHome() {
System.out.println("... going back to index.xhtml ...");
return "index";
}
{code}
And add a form and a submit button to indexView.xhtml:
{code:xml}
<f:view>
<h:form>
blah blah blah
<h:commandButton value="GoTo request-scoped test" action="#{injectionBeanView.goHome}"/>
</h:form>
</f:view>
{code}
So if you hit the button to go back to index.xhtml then @PreDestroy will get called. To see this, I just put a System.out.println() in my @PreDestroy method.
Unfortunately, all this makes ViewScoped beans a bad choice if you need to release resources. You can't guarantee that the view will be ended through normal navigation. Hopefully, this will indeed be fixed in JSF 2.2.
> @PreDestroy not called on view scoped managed bean
> --------------------------------------------------
>
> Key: AS7-5586
> URL: https://issues.jboss.org/browse/AS7-5586
> Project: Application Server 7
> Issue Type: Bug
> Components: JSF
> Affects Versions: 7.1.1.Final, 7.1.2.Final (EAP)
> Environment: Initializing Mojarra 2.1.7-jbossorg-2 (20120412-0335) and all native Jboss JSF impl
> Reporter: Mauricio Fenoglio
> Assignee: Stan Silvert
> Labels: jsf2, jsf21, memoryleak
> Attachments: InjectionTest.jar, InjectionTest.war, InjectionTest.war, InjectionTestV2.jar, TestingJSFMemoryLeak-1.0-SNAPSHOT.war
>
>
> All JSF ManagedBean are not destroyed and generate a great memory problem.
> This happen for View Scopes
> Nor are running @PreDestroy
> It is not possible to have production environments with jsf, so it is a blocker issue.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list