ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Cornel Antohi" <cant...@kepler-rominfo.com>
Subject Re: autoCommit
Date Fri, 07 Jul 2006 12:53:14 GMT
Hi Jeff,

>From what I understood, iBatis is implemented like that:
- let's assume that we will always have a transaction so make 
connection.setAutoCommit("false");
- if there is a transaction ideed (an insert, update, or delete has been 
performed) than make connection.commit() at the end
- if not, let the connection as is (with setAutoCommit("false"))

... please correct me if I am wrong.

For me, it is a very strange behaviour ... more naturally would be:
- if I am starting a transaction (or I am willing to use a transaction), 
make connection.setAutoCommit("false");
- otherwise, let the connection with autoCommit=true, as it is default

I agree that current iBatis implementation works in many environments BUT I 
do not feel it clean and natural ... I do think that Websphere "feature" (if 
a connection that is returned to the pool has autoCommit=false and no 
connection.commit() was performed then do something -- "do something" is 
Websphere configurable, by default Websphere makes a rollback() --) is a 
good one and iBatis acts a little bit strange in this context.

Thank you,
Cornel



----- Original Message ----- 
From: "Jeff Butler" <jeffgbutler@gmail.com>
To: <user-java@ibatis.apache.org>
Sent: Friday, July 07, 2006 3:38 PM
Subject: Re: autoCommit


> As I said, iBATIS is trying to avoid extra commits when they are not
> needed.  So iBATIS sets auto commit to false, and then will commit the
> transaction if an insert, update, or delete has been performed.  This 
> works
> in many environments, but not WebSphere.
>
> This is precisely why there are options on the transaction managers -
> because all the different environments work a little differently.
>
> I added some information about this in the developer guide a few weeks 
> ago.
>
> Jeff Butler
>
>
> On 7/7/06, Cornel Antohi <cantohi@kepler-rominfo.com> wrote:
>>
>>  Hi Jeff,
>>
>> In order to avoid extra commits, shouldn't iBatis do:
>>
>> connection.setAutoCommit(*true*); ?
>>
>> But iBatis always make connection.setAutoCommit(*false*) which means that
>> we have to perform a connection.commit() at the end ... I do not
>> understand why iBatis is ALWAYS making:
>> connection.setAutoCommit(false);
>>
>> What is the reason?
>>
>> Thank you,
>>  Cornel
>>
>> ----- Original Message -----
>> *From:* Jeff Butler <jeffgbutler@gmail.com>
>> *To:* user-java@ibatis.apache.org
>> *Sent:* Friday, July 07, 2006 3:09 PM
>> *Subject:* Re: autoCommit
>>
>>
>> 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 <cantohi@kepler-rominfo.com> 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
>> >
>>
>>
> 


Mime
View raw message