Skip to content

Commit 530285f

Browse files
committed
add tests for session closure in regular and JPA bootstrap
1 parent 8a93c9e commit 530285f

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.autoclose;
6+
7+
import jakarta.persistence.EntityManager;
8+
import org.hibernate.SessionFactory;
9+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
10+
import org.hibernate.testing.orm.junit.Jpa;
11+
import org.junit.jupiter.api.Test;
12+
13+
import static org.junit.jupiter.api.Assertions.assertFalse;
14+
import static org.junit.jupiter.api.Assertions.assertTrue;
15+
16+
@Jpa
17+
class AutoCloseEntityManagerTest {
18+
@Test void testAutoClose(EntityManagerFactoryScope scope) {
19+
SessionFactory factory = scope.getEntityManagerFactory().unwrap( SessionFactory.class );
20+
EntityManager session = factory.withOptions().autoClose( true ).openSession();
21+
var tx = session.getTransaction();
22+
tx.begin();
23+
tx.commit();
24+
assertFalse( session.isOpen() );
25+
}
26+
27+
@Test void testNoAutoClose(EntityManagerFactoryScope scope) {
28+
SessionFactory factory = scope.getEntityManagerFactory().unwrap( SessionFactory.class );
29+
EntityManager session = factory.withOptions().autoClose( false ).openSession();
30+
var tx = session.getTransaction();
31+
tx.begin();
32+
tx.commit();
33+
assertTrue( session.isOpen() );
34+
session.close();
35+
}
36+
37+
@Test void testCloseWithTx(EntityManagerFactoryScope scope) {
38+
EntityManager session = scope.getEntityManagerFactory().createEntityManager();
39+
var tx = session.getTransaction();
40+
tx.begin();
41+
// this is tolerated in JPA bootstrap
42+
session.close();
43+
tx.commit();
44+
assertFalse( session.isOpen() );
45+
}
46+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.autoclose;
6+
7+
import org.hibernate.Session;
8+
import org.hibernate.testing.orm.junit.DomainModel;
9+
import org.hibernate.testing.orm.junit.SessionFactory;
10+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
11+
import org.junit.jupiter.api.Test;
12+
13+
import static org.junit.jupiter.api.Assertions.assertFalse;
14+
import static org.junit.jupiter.api.Assertions.assertThrows;
15+
import static org.junit.jupiter.api.Assertions.assertTrue;
16+
17+
@SessionFactory
18+
@DomainModel
19+
class AutoCloseSessionTest {
20+
@Test void testAutoClose(SessionFactoryScope scope) {
21+
org.hibernate.SessionFactory factory = scope.getSessionFactory();
22+
Session session = factory.withOptions().autoClose( true ).openSession();
23+
var tx = session.beginTransaction();
24+
tx.commit();
25+
assertFalse( session.isOpen() );
26+
}
27+
28+
@Test void testNoAutoClose(SessionFactoryScope scope) {
29+
org.hibernate.SessionFactory factory = scope.getSessionFactory();
30+
Session session = factory.withOptions().autoClose( false ).openSession();
31+
var tx = session.beginTransaction();
32+
tx.commit();
33+
assertTrue( session.isOpen() );
34+
session.close();
35+
}
36+
37+
@Test void testCloseWithTx(SessionFactoryScope scope) {
38+
Session session = scope.getSessionFactory().openSession();
39+
var tx = session.beginTransaction();
40+
session.close();
41+
assertThrows( IllegalStateException.class, tx::commit );
42+
assertFalse( session.isOpen() );
43+
}
44+
}

0 commit comments

Comments
 (0)