ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Clinton Begin" <clinton.be...@gmail.com>
Subject RE: queryForList/Map/Object... rollbacks
Date Wed, 05 Mar 2008 17:54:05 GMT
That's a good point as well, Chris.  If you use Spring, it will manage the
transaction fully, using whatever JDBC driver/datasource combination it has
configured.  You could also use setUserConnection() if you want to bypass
the transaction manager entirely.  

The one exception is that you'll still need to provide datasource
configuration for lazy loaded mappings, as iBATIS will allow you to lazy
load associations after closing a session.  That's an anti-pattern though,
so it should be rare that you actually do that (and iBATIS 3 may not even
support it).

Clinton

-----Original Message-----
From: Christopher Lamey [mailto:clamey@localmatters.com] 
Sent: March-05-08 10:45 AM
To: user-java@ibatis.apache.org
Subject: Re: queryForList/Map/Object... rollbacks

Doh!  Forgot about "commitRequired" - been using Spring for everything
lately.

Sorry about that.


On 3/4/08 7:46 PM, "" <> wrote:

> Actually, it is the default behaviour. :-/
> 
> It's a combination of both the iBATIS transaction manager default
> configuration and SimpleDataSource.
> 
> To make a long story short, in the good old days, some JDBC drivers
> literally required a rollback to "reset" the connection.  *cough* Sybase
> *cough*  But other drivers hissed and booed at the excessive rollbacks.
> 
> Thus we added a flag to the iBATIS transaction manager, called
> commitRequired (because commits are equally as aggressive).  Try this:
> 
> <transactionManager ...  commitRequired="false">
> 
> That combined with a container managed DataSource should eliminate all
> unnecessary rollbacks. If it was already set to false, it is entirely
> possible that SimpleDataSource was entirely responsible for the aggressive
> rollbacks -- thus we should probably make that configurable too.
> 
> Clinton
> 
> -----Original Message-----
> From: Christopher Lamey [mailto:clamey@localmatters.com]
> Sent: March-04-08 5:07 PM
> To: user-java@ibatis.apache.org
> Subject: Re: queryForList/Map/Object... rollbacks
> 
> That is not the default iBATIS behavior, I'm guessing your container is
> getting involved.
> 
> From what I understand, the SIMPLE datasource type is generally for
> standalone programs, not for apps running in a container.
> 
> On 3/4/08 4:20 PM, "Tom Henricksen" <TomH@A-t-g.com> wrote:
> 
>> Currently we are using JDBC with simple datasource.
>> 
>> 
>> 
>> <transactionManager type="JDBC">
>> 
>>             <dataSource type="SIMPLE">
>> 
>> 
>> 
>> But we are transitioning to JNDI datasource.
>> 
>> 
>> 
>> This is just a web application.  I will take a look at the Wiki.
>> 
>> 
>> 
>> So is this default behavior of iBatis to create a transaction and roll
>> it back for even a select?
>> 
>> 
>> 
>> Would JTA change this?
>> 
>> 
>> 
>> Thanks,
>> 
>> Tom
>> 
>> 
>> 
>> 
>> 
>> -----Original Message-----
>> From: Jeff Butler [mailto:jeffgbutler@gmail.com]
>> Sent: Tuesday, March 04, 2008 3:53 PM
>> To: user-java@ibatis.apache.org
>> Subject: Re: queryForList/Map/Object... rollbacks
>> 
>> 
>> 
>> What transaction manager are you using?
>> 
>> Is this an EJB application with CMT, or just a web application?
>> 
>> Have you read the information in the WIKI about configuring iBATIS on
>> WebSphere?
>> 
>> 
>> 
>> http://opensource.atlassian.com/confluence/oss/display/IBATIS/Environmen
>> t+Specific+Information
>> 
>> 
>> 
>> Jeff Butler
>> 
>> 
>> 
>> 
>> 
>> On Tue, Mar 4, 2008 at 3:32 PM, Tom Henricksen <TomH@a-t-g.com> wrote:
>> 
>> We are performance monitoring our application and my DBA let me know
>> that we had over 3 MILLION rollbacks in a single day.  We are using
>> WebSphere to DB2 on Win2k3 servers.
>> 
>> I looked in our code and could not find anything.  Used p6spy and found
>> that every time queryForXXX is called I received a rollback.  Stepping
>> through the queryForList code in SqlMapExecutorDelegate.java the
>> autoStartTransaction starts a transaction if none is present and since
>> we don't have commitRequired set, the autoEndTransaction will cause a
>> rollback.
>> 
>> I assume there is a good reason to start the transaction here.  It seems
>> like extra work creating a transaction that will always be rolled back.
>> Can someone explain why this is good to me so I can forward the
>> information to my DBA?  Any links supporting the argument would be
>> great.  Is there a way to use the queryForXXX without creating a
>> transaction?  I assume it is better to not have commitRequired?
>> 
>> Thanks for your time.
>> 
>> 
>> 
>> Tom Henricksen
>> Consultant
>> Advanced Technologies Group, Inc.
>> 
>> 
>> 
>> 
>> 
> 


Mime
View raw message