Skip to content

Commit d7de91c

Browse files
samebGuice Team
authored andcommitted
Update the persist service to ignore multiple start/stop calls, so it matches its javadoc. Fixes #1214, fixes #972, fixes #598.
PiperOrigin-RevId: 525538767
1 parent 5c95376 commit d7de91c

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

extensions/persist/src/com/google/inject/persist/jpa/JpaPersistService.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,9 @@ synchronized void start(EntityManagerFactory emFactory) {
103103

104104
@Override
105105
public synchronized void start() {
106-
Preconditions.checkState(null == emFactory, "Persistence service was already initialized.");
106+
if (null != emFactory) {
107+
return;
108+
}
107109

108110
if (null != persistenceProperties) {
109111
this.emFactory =
@@ -115,8 +117,9 @@ public synchronized void start() {
115117

116118
@Override
117119
public synchronized void stop() {
118-
Preconditions.checkState(emFactory.isOpen(), "Persistence service was already shut down.");
119-
emFactory.close();
120+
if (null != emFactory && emFactory.isOpen()) {
121+
emFactory.close();
122+
}
120123
}
121124

122125
@Singleton

extensions/persist/test/com/google/inject/persist/jpa/JpaWorkManagerTest.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@
2929
import junit.framework.TestCase;
3030
import org.hibernate.HibernateException;
3131

32-
/** @author Dhanji R. Prasanna ([email protected]) */
32+
/**
33+
* @author Dhanji R. Prasanna ([email protected])
34+
*/
3335

3436
public class JpaWorkManagerTest extends TestCase {
3537
private Injector injector;
@@ -41,9 +43,6 @@ public class JpaWorkManagerTest extends TestCase {
4143
@Override
4244
public void setUp() {
4345
injector = Guice.createInjector(new JpaPersistModule("testUnit"));
44-
45-
//startup persistence
46-
injector.getInstance(PersistService.class).start();
4746
}
4847

4948
@Override
@@ -56,6 +55,7 @@ public void tearDown() {
5655
}
5756

5857
public void testWorkManagerInSession() {
58+
injector.getInstance(PersistService.class).start();
5959
injector.getInstance(UnitOfWork.class).begin();
6060
try {
6161
injector.getInstance(TransactionalObject.class).runOperationInTxn();
@@ -89,15 +89,24 @@ public void testWorkManagerInSession() {
8989
}
9090
}
9191

92+
public void testStartMoreThanOnce() {
93+
injector.getInstance(PersistService.class).start();
94+
// No exception is thrown on subsequent start.
95+
injector.getInstance(PersistService.class).start();
96+
}
97+
9298
public void testCloseMoreThanOnce() {
99+
injector.getInstance(PersistService.class).start();
100+
injector.getInstance(PersistService.class).stop();
101+
// No exception is thrown on subsequent stop.
93102
injector.getInstance(PersistService.class).stop();
103+
}
94104

95-
try {
96-
injector.getInstance(PersistService.class).stop();
97-
fail();
98-
} catch (IllegalStateException e) {
99-
// Ignored.
100-
}
105+
public void testCloseWithoutStart() {
106+
// No exception.
107+
injector.getInstance(PersistService.class).stop();
108+
// (but also start it so we can have one tearDown that unconditionally stops started things)
109+
injector.getInstance(PersistService.class).start();
101110
}
102111

103112
public static class TransactionalObject {

0 commit comments

Comments
 (0)