iBATIS is trying to avoid extra commits when they are not needed, but that doesn't play well with WebSphere.  This is a "feature" of WebSphere.  See here:
 
http://opensource.atlassian.com/confluence/oss/display/IBATIS/Environment+Specific+Information
 
Other transaction managers are a little looser in their implementations.
 
In other words - that's just the way it is.
 
Jeff Butler

 
On 7/7/06, Cornel Antohi <[EMAIL PROTECTED]> wrote:
Hi,
 
I have found in com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransaction class, init method, the following lines of code:
 
// AutoCommit
if (connection .getAutoCommit()) {
    connection.setAutoCommit(false );
}
 
I do not understand why should it be set to "false" by default, even I am running simple SELECT statements !
 
Using Websphere as application server, I am receiving the following warning messages after each database call:
[7/7/06 13:40:41:111 EEST] 00000026 LocalTranCoor W   WLTC0032W: One or more local transaction resources were rolled back during the cleanup of a LocalTransactionContainment.
 
and sometimes errors like Websphere cannot cleanup the connection because it seems to be in a transaction !!!
 
One solution found on Internet is to setup in sql-map-config:
<
transactionManager type="JDBC" commitRequired="true" >
 
and iBatis will perform a commit() at the end (see SqlMapConfigParser and TransactionManager classes):
 
txManager.setForceCommit(
"true".equals(attributes.getProperty( "commitRequired")));
...
if
(session.isCommitRequired() || forceCommit ) {
    trans.commit();
    session.setCommitRequired(
false
);
}
 
My question is: why should I use "commitRequired=true" even if I am executing a simple SELECT statement ? I feel that this "commitRequired=true" is a workaround to a problem generated by wrong initialization of the JdbcTransaction!
 
Thank you,
Cornel

Reply via email to