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
  |      * @param 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
  |      * @param pidVec
  |      * @param jbpmDAO
  |      */
  |     @TransactionAttribute(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
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to