[seam-issues] [JBoss JIRA] (SEAMFACES-249) Transaction not closed when using view parameters

Bryn Cooke (JIRA) jira-events at lists.jboss.org
Wed Aug 8 04:33:07 EDT 2012


    [ https://issues.jboss.org/browse/SEAMFACES-249?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12710417#comment-12710417 ] 

Bryn Cooke commented on SEAMFACES-249:
--------------------------------------


In transaction phase listener a transaction is started at the render response phase.

TransactionPhaseListener.java
public void handleTransactionsBeforePhase(final PhaseEvent event) {
        PhaseId phaseId = event.getPhaseId();
        if (seamManagedTransactionStatus(phaseId)) {
            if (phaseId == RENDER_RESPONSE) {
                persistenceContexts.beforeRender();
                begin(phaseId);
            }
        }
    }

But then it is only closed if in the invoke application phase, faces context render response is true or faces context response complete is true.

    public void handleTransactionsAfterPhase(final PhaseEvent event) {
        PhaseId phaseId = event.getPhaseId();
        if (seamManagedTransactionStatus(phaseId)) {
            boolean commitTran = (phaseId == PhaseId.INVOKE_APPLICATION) || event.getFacesContext().getRenderResponse()
                    || event.getFacesContext().getResponseComplete();

            if (commitTran) {
                commitOrRollback(phaseId);  // we commit before destroying contexts,
                                            // cos the contexts have the PC in them
            }
        }
    }

Usually render response is set to true for get requests, but using Mojarra this is not the case for views with parameters so the transaction is not committed:

RestoreViewPhase.java:224
ViewMetadata metadata = vdl.getViewMetadata(facesContext, viewId);
  
    if (metadata != null) { // perhaps it's not supported
    // and use it to create the ViewRoot.  This will have, at most
    // the UIViewRoot and its metadata facet.
    viewRoot = metadata.createMetadataView(facesContext);
     
    // Only skip to render response if there are no view parameters
    Collection<UIViewParameter> params =
                               ViewMetadata.getViewParameters(viewRoot);
    if (params.isEmpty()) {
      facesContext.renderResponse();
    }
  }


                
> Transaction not closed when using view parameters
> -------------------------------------------------
>
>                 Key: SEAMFACES-249
>                 URL: https://issues.jboss.org/browse/SEAMFACES-249
>             Project: Seam Faces
>          Issue Type: Bug
>         Environment: Linux, Tomcat7, Mojarra 2.1.11, Seam Faces 3.1.0
>            Reporter: Bryn Cooke
>
> When using the view parameters the transaction created by the TransactionPhaseListener in the render response phase is not closed. This results in the transaction being marked as close on commit and in our web site we run out of connections to the database.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the seam-issues mailing list