From eb2dbec1273e52d4258ed2b183106ca8d098ed94 Mon Sep 17 00:00:00 2001 From: Mark Struberg Date: Sun, 18 Apr 2021 23:05:50 +0200 Subject: [PATCH] OPENJPA-2789 close connection after bulk delete while ResultSetResult closes the underlying connection we did loose this handling in JDBCStoreQuery when XROP sharding got added. --- .../openjpa/jdbc/kernel/JDBCStoreQuery.java | 3 +- .../persistence/kernel/TestBulkDelete.java | 50 +++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestBulkDelete.java diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java index 9bec429d5..ce69d3634 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java @@ -603,8 +603,7 @@ public class JDBCStoreQuery } } finally { try { - if (conn.getAutoCommit()) - conn.close(); + conn.close(); } catch (SQLException se) { } diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestBulkDelete.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestBulkDelete.java new file mode 100644 index 000000000..9d4586305 --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestBulkDelete.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.openjpa.persistence.kernel; + +import javax.persistence.EntityManager; +import javax.persistence.TypedQuery; + +import org.apache.openjpa.persistence.common.utils.AbstractTestCase; +import org.apache.openjpa.persistence.kernel.common.apps.CalendarFields; +import org.apache.openjpa.persistence.kernel.common.apps.RuntimeTest1; + +/** + * OPENJPA-2789 connection didn't get closed properly + */ +public class TestBulkDelete extends AbstractTestCase { + + + @Override + public void setUp() throws Exception { + super.setUp(CalendarFields.class); + } + + public void testConnectionClosing() throws Exception { + for (int i = 0; i < 30; i++) { + EntityManager em = getEmf().createEntityManager(); + em.getTransaction().begin(); + final TypedQuery qry + = em.createQuery("delete from CalendarFields e where e.id = :val", CalendarFields.class); + qry.setParameter("val", 12345); + qry.executeUpdate(); + + em.getTransaction().commit(); + em.close(); + } + } +}