From f5cfcbd56e8096945c535cf53521beb17bb92323 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 31 Oct 2017 10:49:35 +1300 Subject: [PATCH] #1187 - Fix connection leak regression introduced in 11.2.3 for findEach() with invalid SQL --- .../server/core/OrmQueryRequest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java b/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java index dc76fe050..6dff33aec 100644 --- a/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java +++ b/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java @@ -29,6 +29,8 @@ import io.ebeaninternal.server.loadcontext.DLoadContext; import io.ebeaninternal.server.query.CQueryPlan; import io.ebeaninternal.server.query.CancelableQuery; import io.ebeaninternal.server.transaction.DefaultPersistenceContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.persistence.PersistenceException; import java.sql.SQLException; @@ -47,6 +49,8 @@ import java.util.function.Predicate; */ public final class OrmQueryRequest extends BeanRequest implements BeanQueryRequest, SpiOrmQueryRequest { + private static final Logger log = LoggerFactory.getLogger(OrmQueryRequest.class); + private final BeanDescriptor beanDescriptor; private final OrmQueryEngine queryEngine; @@ -232,6 +236,22 @@ public final class OrmQueryRequest extends BeanRequest implements BeanQueryRe loadContext = new DLoadContext(this, secondaryQueries); } + /** + * Rollback the transaction if it was created for this request. + */ + public void rollbackTransIfRequired() { + if (createdTransaction) { + try { + transaction.end(); + } catch (Exception e) { + // Just log this and carry on. A previous exception has been + // thrown and if this rollback throws exception it likely means + // that the connection is broken (and the dataSource and db will cleanup) + log.error("Error trying to rollback a transaction (after a prior exception thrown)", e); + } + } + } + /** * Return the JsonReadOptions taking into account lazy loading and persistence context. */