[ 
https://issues.jboss.org/browse/JBSEAM-4395?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Johan Gärde updated JBSEAM-4395:
--------------------------------

    Attachment: Fix_for_JBSEAM-4395.patch


Modified the pages.xml parser for exceptions so that it reads the 
before-redirect attribute of the end-conversation element. The RedirectHandler 
makes use of this information and ends the conversation before or after the 
redirect as specified.
                
> Endless loop when an exception occurs during commit inside a long running 
> conversation, and there is an <exception> clause to handle it in page.xml
> ---------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: JBSEAM-4395
>                 URL: https://issues.jboss.org/browse/JBSEAM-4395
>             Project: Seam 2
>          Issue Type: Bug
>          Components: Exception Handling
>    Affects Versions: 2.2.0.GA, 2.2.1.CR1
>         Environment: WebSphere v7.0.0.5, Seam 2.2.1-SNAPSHOT
>            Reporter: Denis Forveille
>         Attachments: Fix_for_JBSEAM-4395.patch
>
>
> Scenario:
> - process is in a long running conversation
> - a persistence exception occurs (e.g. OptimisticLockingException), during 
> either a call to flush() or during the automatic commit() of the transaction 
> - a clause <exception> is declared in pages.xml to handle the exception and 
> redirect to a generic error page (e.g. <exception> that will handle all 
> exceptions..) like this:
>   <exception>
>       <end-conversation/>
>       <redirect view-id="/erreur_exception.xhtml" />
>   </exception>
> During the commit, the exception occurs, Seam catch it and pass it to the 
> exception handler.
> The exception handler sees that the user has to be redirected to the error 
> page.
> The long running conversation is still active, handling the "dirty" objects 
> that cause the persistence failure 
> The request to process the error page starts. During the "RESTORE_VIEW", the 
> dirty object that are in the conversation are then flushed again to the 
> database, causing again the persistence exception, triggering the seam 
> exception handling mechanism, that will redirect to the error handling page, 
> causing an endless loop
> A workaround to this is to add an observer on 
> "org.jboss.seam.exceptionHandled" that will kill the current conversation and 
> so remove the dirty objects from the session and the error page is display 
> (see the forum reference)
> Some thoughts:
> - the documentation gives an example on how to handle 
> OptimisticLockingException, but in our case, the way it is, this causes an 
> infinite loop
> - is the <end-conversation/> clause working correctly? At what time during 
> exception handling is the end-conversation supposed to occur?

--
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

_______________________________________________
seam-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/seam-issues

Reply via email to