> endTransaction after every query.
YES! It is by design that you have to GUARANTEE to call
endTransaction() if startTransaction() is called. So make sure to
call it in a finally block. Here's the example from the docs (again):
try {
sqlMap.startTransaction ();
// .... do work
sqlMap.commitTransaction ();
} finally {
sqlMap.endTransaction ();
}
Or, if you just call one of the work methods (queryForX, insert,
update, delete etc.), then iBATIS does this for you (i.e. you don't
call startTransaction()).
This is not a "leak" or a bug as described.
Clinton
On Tue, 28 Dec 2004 14:55:35 +0100, Baldur Norddahl
<[EMAIL PROTECTED]> wrote:
> Hi,
>
> I have had alot of problems with orion lockups where I would get a ton
> of messages like:
>
> DriverManagerConnectionPoolConnection not closed, check your code!
>
> I have finally traced it to a session leak in ibatis. The first time a
> thread makes a query, ibatis will allocate a session for that thread.
> And then never release that session again unless you explicitly call
> endTransaction(). So if you have a system that regularly creates new
> threads, you will eventually run out of sessions.
>
> For now I have managed to work around this problem by making an
> endTransaction after every query. This simple change fixed all my lockup
> problems, and reduced the number of open database connections tremendiously.
>
> Another application that did not have problems with lockup, went from
> using 15+ database connections to 1. I suppose this is because now the
> connections actually get put back into the pool, instead of being
> claimed indefinitly by ibatis for all my threads.
>
> Baldur
>
>