Did you already file a Jira ticket for this one? On Wed, Nov 18, 2009 at 1:43 PM, Poitras Christian < christian.poit...@ircm.qc.ca> wrote:
> As a workaround, it is easy to create a custom TransactionFactory and > Transaction to make sure that the connection is closed properly and at the > right time. > I've just managed to do so with Spring. > > Christian > > ------------------------------ > *From:* Clinton Begin [mailto:clinton.be...@gmail.com] > *Sent:* Tuesday, November 10, 2009 10:26 AM > *To:* user-java@ibatis.apache.org > *Subject:* Re: Potential connection problem when using managed > transactions in iBATIS 3 > > That is a little odd. It looks like I intended for something else there. > I'll look at it. > > Clinton > > On Tue, Nov 10, 2009 at 8:09 AM, Poitras Christian < > christian.poit...@ircm.qc.ca> wrote: > >> What is the expected behaviour when calling dataSouce.getConnection() >> for managed transactions in iBATIS 3? >> >> I find suspicious that ResultLoader calls dataSouce.getConnection() at >> line 89 which could create an unexpected connection. And since managed >> transaction is used, the connection may never be closed. >> >> >> Christian >> >> >> Here is the code from ResultLoader which calls dataSouce.getConnection() : >> >> *private* Executor newExecutor() *throws* SQLException { >> >> Environment environment = >> configuration.getEnvironment(); >> >> *if* (environment == *null*) >> >> *throw* *new* ExecutorException("ResultLoader could not load lazily. >> Environment was not configured."); >> >> TransactionFactory txFactory = environment.getTransactionFactory(); >> >> *if* (txFactory == *null*) >> >> *throw* *new* ExecutorException("ResultLoader could not load lazily. >> Transaction Factory was not configured."); >> >> DataSource ds = environment.getDataSource(); >> >> *if* (ds == *null*) *throw* *new* ExecutorException("ResultLoader could >> not load lazily. DataSource was not configured."); >> >> Connection conn = ds.getConnection(); >> >> conn = wrapConnection(conn); >> >> Transaction tx = txFactory.newTransaction(conn, >> *false*); >> >> *return* configuration.newExecutor(tx, ExecutorType.*SIMPLE*); >> >> } >> > >