[jboss-user] [EJB 3.0] - Transaction is not active after rollback
X490812
do-not-reply at jboss.com
Fri Aug 10 19:02:02 EDT 2007
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
More information about the jboss-user
mailing list