  | Mailing List | | Home | | Forum Home | | JBoss - Java Application Server | | Tomcat - JSP/Servlet container | | Struts - A MVC web framework | | iText - An open source PDF Java Library | | JDOM - JDOM XML Parser | | J2EE - A mailing list for Java(tm) 2 Platform, Enterprise Edition | | JSP - A mailing list about Java Server Pages specification and reference | | J2EE Pattern - An interest list for Sun Java Center J2EE Pattern Catalog | | Servlet - A mailing list for discussion about Sun Microsystem's Java Servlet API Technology | |
Struts & Hibernate
|
|
|
  | | | - Transaction is not active after rollback | - Transaction is not active after rollback 2007-08-10 - By X490812
Back The issue is that I have a stateless EJB using CMT with the following problem: a function X, having default transaction attribute (required) has a loop and calls another function Y with a transaction attribute of REQUIRES_NEW. Function Y does a SessionContext.setRollbackOnly. First itration calls Function Y, does rollback and exits. Second iteration of loop, function Y is called and I get the following; the error occurs during the getConnection() call in the JBPMDao .removeEndedProcesses(pidVec) function (see below)
anonymous wrote : org.jboss.util.NestedSQLException: Transaction is not active: tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=ro-0029aits/49, BranchQual=, localId=49]; - nested throwable: (javax.resource.ResourceException: Transaction is not active: tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=ro-0029aits/49 , BranchQual=, localId=49])
Here is the code
| /** | * Method: cleanupEndedProcesses | * Purpose: Called from a servlet to cleanup runtime data for ended processinstances | * @(protected) processId | */ | public void cleanupEndedProcesses(String processId) | { | | JbpmDAO jbpmDAO = null; | Vector<String> pidVec = new Vector<String>(); | List<String> tmpList; | int cnt = 0; | int BATCHSIZE = 500; | int endNdx = 0; | | try { | logger.debug("cleanupEndedProcesses:: start"); | jbpmDAO = new JbpmDAO(); | pidVec = jbpmDAO.getEndedProcesses(processId); | while (pidVec.size() > 0) | { | endNdx = pidVec.size() > BATCHSIZE? BATCHSIZE:pidVec.size(); | tmpList = new ArrayList<String>(pidVec.subList(0, endNdx)); | batchRemoveEndedProcesses(tmpList, jbpmDAO); | cnt += endNdx; | pidVec.removeAll(tmpList); | } | } | catch (Exception e) { | throw new WorkflowException(e); | } | logger.debug("cleanupEndedProcesses:: pids removed = " + cnt); | | } | | | /** | * Method: batchRemoveEndedProcesses | * Purpose: separated out so that we could batch deletes | * @(protected) pidVec | * @(protected) jbpmDAO | */ | @(protected)(javax.ejb.TransactionAttributeType.REQUIRES_NEW) | private void batchRemoveEndedProcesses(List<String> pidVec, JbpmDAO jbpmDAO) | { | try { | jbpmDAO.removeEndedProcesses(pidVec); | context.setRollbackOnly(); | } | catch (Exception e) { | throw new WorkflowException(e); | } | } |
| public void removeEndedProcesses(List<String> pidVec) | { | String strQuery = DELETE_JBPM_PROCESSINSTANCES; | Connection con = null; | PreparedStatement pstmt = null; | | try { | con = getJbpmDataSource().getConnection(); | String strInClause = constructInClause(pidVec); | strQuery = strQuery.replaceAll(":list", strInClause); | pstmt = con.prepareStatement(strQuery); | bindVarsToInClause(pidVec, 1, pstmt); | pstmt.executeUpdate(); | } | catch (SQLException e) { | throw new LoggableEJBException(e); | } | finally { | try { | if (pstmt != null) | pstmt.close(); | if (con != null) | con.close(); | } | catch (SQLException e) { | throw new LoggableEJBException(e); | } | } | | } |
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic &p=4073223#4073223
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode =reply&p=4073223 __ ____ ____ ____ ____ ____ ____ ____ ____ ____ jboss-user mailing list jboss-user@(protected) https://lists.jboss.org/mailman/listinfo/jboss-user
|
|
 |