[jbossseam-issues] [JBoss JIRA] Updated: (JBSEAM-3520) Handling Exception (not only) when using JPDL Pageflows

ahus1 (JIRA) jira-events at lists.jboss.org
Mon Oct 6 15:17:20 EDT 2008


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

ahus1 updated JBSEAM-3520:
--------------------------

    Attachment: ExceptionAction.java
                ExceptionHandler.java


Added our implementations

> Handling Exception (not only) when using JPDL Pageflows
> -------------------------------------------------------
>
>                 Key: JBSEAM-3520
>                 URL: https://jira.jboss.org/jira/browse/JBSEAM-3520
>             Project: Seam
>          Issue Type: Feature Request
>          Components: BPM
>    Affects Versions: 2.0.2.SP1
>         Environment: seam with jpdl
>            Reporter: ahus1
>         Attachments: ExceptionAction.java, ExceptionHandler.java
>
>
> The problem: when there are exceptions in a jpdl pageflow , you will not be able to continue with the pageflow if you are stuck at a transition node or a decision node. There is no chance to display the error message and to return to the last page. 
> The solution idea: Use an exception handler in the jpdl pageflow, store some information, reposition the pageflow on a page node in a seam exception handler. 
> The other problem: When this can be done for pageflows, can this be done for conversations as well?
> The other solution idea: This should work when there is an exception in the invoke application phase (in the POST-Phase), but when there is a GET request (rendering the view in the GET after POST) redirecting to the indentical view could lead to a infinite loop.
> This is how I do it manually, maybe there is a chance to these things automatically in seam: 
> (1) place an exception handler in every pageflow
>   <exception-handler exception-class="javax.el.ELException">
>     <action class="de.plusfinanzservice.common.bean.ExceptionAction" />
>   </exception-handler>
> In a jpdl pageflow with seam we usually use EL expressions, therefore all exceptions we get here are wrapped in an EL Exception. First we unwrap them.
> We determine the source of the transition. If the source is a decision node (and not a page node), we will need to find the error handling page node. Our convention is to use a "failure" transition on every decision node to do exactly that. The data is saved on a new seam bean exception handler.
> (2) pick up all exceptions in pages.xml
> <exception class="java.lang.Exception">
>     <redirect view-id="#{exceptionHandler.getViewId('/iss/error.jspx')}">
>       <message severity="error">
>         #{messages[exceptionHandler.getMessage(org.jboss.seam.handledException)]}
>       </message>
>     </redirect>
>   </exception>
> After collection the right information in the exception action, reposition in the exception handler is easy:
>       if (node != null) {
>         Pageflow.instance().reposition(node);
>         retVal = Pageflow.instance().getPage().getViewId();
>       } 
> This exception handler tries to do "the right thing" even if you are not in a pageflow. For GET requests it assumes that the exception has been raised in the render view phase and no recovery is possible. If not, I tries to forward you to the last known view (using conversation information). The message to be displayed is extracted from the Exception. 
> Final thoughts: maybe it would be a good idea to create a two phase solution. One basic with exception handling. And another one that extends it that adds jpdl handling. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list