Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Cannot call cleanup on a ManagedConnection while it is still in a transaction

1,096 views
Skip to first unread message

bsch...@excite.com

unread,
Jun 5, 2007, 9:06:51 PM6/5/07
to
Hi,

I am using a datasource to connect to my oracle database. Everything goes ok for select operations but the moment I perform some update/insert, I get the following error during my connection.close() method.

-------------------------------------------------------------
[6/4/07 14:49:46:440 PDT] 00000025 MCWrapper E J2CA0081E: Method cleanup failed while trying to execute method cleanup on ManagedConnection WSRdbManagedConnectionImpl@16781678 from resource jdbc/testDS. Caught exception: com.ibm.ws.exception.WsException: DSRA0080E: An exception was received by the Data Store Adapter. See original exception message: Cannot call 'cleanup' on a ManagedConnection while it is still in a transaction..
at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAdapterException.java:236)
at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAdapterException.java:185)
at com.ibm.ws.rsadapter.AdapterUtil.createDataStoreAdapterException(AdapterUtil.java:305)
at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.cleanupTransactions(WSRdbManagedConnectionImpl.java:3504)
at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.cleanup(WSRdbManagedConnectionImpl.java:3146)
at com.ibm.ejs.j2c.MCWrapper.cleanup(MCWrapper.java:1416)
at com.ibm.ejs.j2c.FreePool.returnToFreePool(FreePool.java:476)
at com.ibm.ejs.j2c.PoolManager.release(PoolManager.java:1598)
at com.ibm.ejs.j2c.MCWrapper.releaseToPoolManager(MCWrapper.java:2243)
at com.ibm.ejs.j2c.ConnectionEventListener.connectionClosed(ConnectionEventListener.java:288)
at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.processConnectionClosedEvent(WSRdbManagedConnectionImpl.java:1523)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.closeWrapper(WSJdbcConnection.java:770)
at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.close(WSJdbcObject.java:180)
at com.ibm.ws.rsadapter.jdbc.WSJdbcObject.close(WSJdbcObject.java:139)
at com.princess.shipstar.util.DBHandler.releaseConnection(DBHandler.java:132)
at com.princess.shipstar.domain.PaxPD.readAcctTransTypeList(PaxPD.java:63)
at com.princess.shipstar.action.PaxAcctChargeAction.prepare(PaxAcctChargeAction.java:43)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.intercept(PrepareInterceptor.java:112)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:507)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:701)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:646)
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.invokeFilters(DefaultExtensionProcessor.java:628)
at com.ibm.ws.wswebcontainer.extension.DefaultExtensionProcessor.invokeFilters(DefaultExtensionProcessor.java:145)
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:595)
at com.ibm.ws.wswebcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:111)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3129)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:238)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:811)
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1433)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:93)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:394)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:152)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:213)
at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions(AbstractAsyncFuture.java:195)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:194)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:741)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:863)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1510)
-------------------------------------------------------------

I don't get the above error and things work perfect if I don't use the datasource. I also get the following error along with the above error:

----------------------------------------------------------
J2CA0081E: Method destroy failed while trying to execute method destroy on ManagedConnection WSRdbManagedConnectionImpl@16781678 from resource No longer available. Caught exception: java.lang.NullPointerException
----------------------------------------------------------

Somebody suggested to increase the statement cache size but it didn't work. I am committing my connection before trying to close it. Can anyone please suggest anything, this is pretty critical.

Thanks,
BS

Paul Ilechko

unread,
Jun 5, 2007, 9:45:43 PM6/5/07
to
bsch...@excite.com wrote:

> Somebody suggested to increase the statement cache size but it didn't
> work. I am committing my connection before trying to close it.

What do you mean, you are committing your connection? How exactly are
you doing that ?

bsch...@excite.com

unread,
Jun 6, 2007, 12:58:55 PM6/6/07
to
I have a simple JDBC scenario where I open my connection with autoCommit=false (so as to support transactions with multiple queries). Then I execute my queries and at the end I perform connection.commit(). In case of an exception I do a connection.rollback(). In the finally block I am releasing the connection.

Everything goes fine till this point. Now after calling the above update method, I do a select from the database. In the finally block of this select method, I am releasing the connection and thats where I get this error.

bsch...@excite.com

unread,
Jun 6, 2007, 1:14:41 PM6/6/07
to
Following are the two methods from my business class. First I call updateUser() function and everything goes fine. Then I call the readUsers() method and I get the "Cannot call cleanup on a ManagedConnection while it is still in a transaction
" error in the finally block where I try to release the connection. Strangely data is returned fine from the readUsers() method and everything is happening ok. Its just that I see these errors by tons in my error log for every read method that I perform after the update method.

Btw, I am using an Oracle data source.

public void updateUser() throws ApplicationException {
int[] iArrCnt = null;

try {
conn = DBUtil.getDBConnection(); // Return connection from the data source with autoCommit=false
userDao = new UserDao(conn);
daoClass.update1();
daoClass.update2();
conn.commit();
} catch(SQLException se) {
DBUtil.rollback(conn);
throw new ApplicationException(se.getMessage());
} finally {
DBUtil.releaseConnection(conn);
}
}

public List readUsers() throws ApplicationException {
try {
conn = DBUtil.getDBConnection();
userDao = new userDao(conn);
return userDao.read();
} catch(SQLException se) {
throw new ApplicationException(se.getMessage());
} finally {
DBUtil.releaseConnection(conn);
}
}

Ken Hygh

unread,
Jun 6, 2007, 2:58:40 PM6/6/07
to
What's DBUtil.releaseConnection(Connection conn) do?
Ken

bsch...@excite.com

unread,
Jun 6, 2007, 3:27:03 PM6/6/07
to
Here is the releaseConnection() method:

public static void releaseConnection(Connection conn) {
try {
if ((conn != null) && (!conn.isClosed())) {
conn.close();
}
} catch (SQLException sqle) {

}
}


Thanks

Ken Hygh

unread,
Jun 6, 2007, 3:34:14 PM6/6/07
to

From your original posting, your exception is happening in
...
at
com.princess.shipstar.util.DBHandler.releaseConnection(DBHandler.java:132)
...

yet this is code from DBUtil. I think you're looking in the wrong spot :-)

Ken

Paul Ilechko

unread,
Jun 6, 2007, 4:28:47 PM6/6/07
to
bsch...@excite.com wrote:
> I have a simple JDBC scenario where I open my connection with
> autoCommit=false (so as to support transactions with multiple
> queries). Then I execute my queries and at the end I perform
> connection.commit(). In case of an exception I do a
> connection.rollback(). In the finally block I am releasing the
> connection.

That's your problem. You're not allowed to do connection.commit under a
WAS global transaction. Take that out, and let WAS commit for you.

bsch...@excite.com

unread,
Jun 6, 2007, 5:08:48 PM6/6/07
to
Hi Ken,

Sorry for creating the confusion. Actually I changed the file name in the function that I pasted in my last message. Otherwise its the same file.

Thanks
BSC

qshl...@163.com

unread,
Sep 9, 2009, 5:13:51 AM9/9/09
to
}
0 new messages