Author: sclassen
Date: Thu Jun 19 21:24:04 2014
New Revision: 1604035
URL: http://svn.apache.org/r1604035
Log:
onami-persist: added extracted BaseMultiplePuTest and added
TransactionalMultiplePuTest
Added:
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/BaseMultiplePuTest.java
(with props)
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/TransactionalMultiplePuTest.java
(with props)
Modified:
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/SimpleMultiplePuTest.java
Added:
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/BaseMultiplePuTest.java
URL:
http://svn.apache.org/viewvc/onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/BaseMultiplePuTest.java?rev=1604035&view=auto
==============================================================================
---
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/BaseMultiplePuTest.java
(added)
+++
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/BaseMultiplePuTest.java
Thu Jun 19 21:24:04 2014
@@ -0,0 +1,80 @@
+package org.apache.onami.persist.test.multipersistenceunits;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Key;
+import org.apache.onami.persist.EntityManagerProvider;
+import org.apache.onami.persist.PersistenceModule;
+import org.apache.onami.persist.PersistenceService;
+import org.apache.onami.persist.UnitOfWork;
+import org.junit.After;
+import org.junit.Before;
+
+import java.lang.annotation.Annotation;
+
+public abstract class BaseMultiplePuTest
+{
+ protected EntityManagerProvider firstEmp;
+
+ protected EntityManagerProvider secondEmp;
+
+ private Injector injector;
+
+ @Before
+ public void setUp()
+ {
+ final PersistenceModule pm = createPersistenceModuleForTest();
+ injector = Guice.createInjector( pm );
+
+ //startup persistence
+ injector.getInstance( Key.get( PersistenceService.class, FirstPU.class
) ).start();
+ injector.getInstance( Key.get( PersistenceService.class,
SecondPU.class ) ).start();
+
+ firstEmp = injector.getInstance( Key.get( EntityManagerProvider.class,
FirstPU.class ) );
+ secondEmp = injector.getInstance( Key.get(
EntityManagerProvider.class, SecondPU.class ) );
+ }
+
+ private PersistenceModule createPersistenceModuleForTest()
+ {
+ return new PersistenceModule()
+ {
+
+ @Override
+ protected void configurePersistence()
+ {
+ bindApplicationManagedPersistenceUnit( "firstUnit"
).annotatedWith( FirstPU.class );
+ bindApplicationManagedPersistenceUnit( "secondUnit"
).annotatedWith( SecondPU.class );
+ }
+ };
+ }
+
+ @After
+ public void tearDown()
+ throws Exception
+ {
+ injector.getInstance( Key.get( PersistenceService.class, FirstPU.class
) ).stop();
+ injector.getInstance( Key.get( PersistenceService.class,
SecondPU.class ) ).stop();
+ }
+
+ protected void beginUnitOfWork()
+ {
+ getInstance( UnitOfWork.class, FirstPU.class ).begin();
+ getInstance( UnitOfWork.class, SecondPU.class ).begin();
+ }
+
+ protected void endUnitOfWork()
+ {
+ getInstance( UnitOfWork.class, FirstPU.class ).end();
+ getInstance( UnitOfWork.class, SecondPU.class ).end();
+ }
+
+ protected <T> T getInstance(Class<T> type)
+ {
+ return injector.getInstance( type );
+ }
+
+ protected <T> T getInstance(Class<T> type, Class<? extends Annotation>
anno)
+ {
+ return injector.getInstance( Key.get( type, anno ) );
+ }
+}
Propchange:
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/BaseMultiplePuTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/BaseMultiplePuTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/BaseMultiplePuTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/SimpleMultiplePuTest.java
URL:
http://svn.apache.org/viewvc/onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/SimpleMultiplePuTest.java?rev=1604035&r1=1604034&r2=1604035&view=diff
==============================================================================
---
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/SimpleMultiplePuTest.java
(original)
+++
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/SimpleMultiplePuTest.java
Thu Jun 19 21:24:04 2014
@@ -19,13 +19,6 @@ package org.apache.onami.persist.test.mu
* under the License.
*/
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.Key;
-import org.apache.onami.persist.EntityManagerProvider;
-import org.apache.onami.persist.PersistenceModule;
-import org.apache.onami.persist.PersistenceService;
-import org.apache.onami.persist.UnitOfWork;
import org.apache.onami.persist.test.TestEntity;
import org.junit.After;
import org.junit.Before;
@@ -35,57 +28,24 @@ import static org.junit.Assert.assertNot
import static org.junit.Assert.assertNull;
public class SimpleMultiplePuTest
+ extends BaseMultiplePuTest
{
- private Injector injector;
-
- private EntityManagerProvider firstEmp;
-
- private EntityManagerProvider secondEmp;
-
@Before
public void setUp()
{
- final PersistenceModule pm = createPersistenceModuleForTest();
- injector = Guice.createInjector( pm );
-
- //startup persistence
- injector.getInstance( Key.get( PersistenceService.class, FirstPU.class
) ).start();
- injector.getInstance( Key.get( PersistenceService.class,
SecondPU.class ) ).start();
-
- injector.getInstance( Key.get( UnitOfWork.class, FirstPU.class )
).begin();
- injector.getInstance( Key.get( UnitOfWork.class, SecondPU.class )
).begin();
-
- firstEmp = injector.getInstance( Key.get( EntityManagerProvider.class,
FirstPU.class ) );
- secondEmp = injector.getInstance( Key.get(
EntityManagerProvider.class, SecondPU.class ) );
+ super.setUp();
+ beginUnitOfWork();
}
@After
public void tearDown()
throws Exception
{
- injector.getInstance( Key.get( UnitOfWork.class, FirstPU.class )
).end();
- injector.getInstance( Key.get( UnitOfWork.class, SecondPU.class )
).end();
-
- injector.getInstance( Key.get( PersistenceService.class, FirstPU.class
) ).stop();
- injector.getInstance( Key.get( PersistenceService.class,
SecondPU.class ) ).stop();
- }
-
- private PersistenceModule createPersistenceModuleForTest()
- {
- return new PersistenceModule()
- {
-
- @Override
- protected void configurePersistence()
- {
- bindApplicationManagedPersistenceUnit( "firstUnit"
).annotatedWith( FirstPU.class );
- bindApplicationManagedPersistenceUnit( "secondUnit"
).annotatedWith( SecondPU.class );
- }
- };
+ endUnitOfWork();
+ super.tearDown();
}
-
@Test
public void storeUnitsInTwoPersistenceUnits()
throws Exception
Added:
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/TransactionalMultiplePuTest.java
URL:
http://svn.apache.org/viewvc/onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/TransactionalMultiplePuTest.java?rev=1604035&view=auto
==============================================================================
---
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/TransactionalMultiplePuTest.java
(added)
+++
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/TransactionalMultiplePuTest.java
Thu Jun 19 21:24:04 2014
@@ -0,0 +1,263 @@
+package org.apache.onami.persist.test.multipersistenceunits;
+
+/*
+ * 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.
+ */
+
+import com.google.inject.Inject;
+import org.apache.onami.persist.EntityManagerProvider;
+import org.apache.onami.persist.Transactional;
+import org.apache.onami.persist.test.TestEntity;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+public class TransactionalMultiplePuTest
+ extends BaseMultiplePuTest
+{
+
+ private TestEntity firstEntity;
+
+ private TestEntity secondEntity;
+
+ @Before
+ public void setUp()
+ {
+ super.setUp();
+
+ firstEntity = new TestEntity();
+ secondEntity = new TestEntity();
+ }
+
+ @Test
+ public void storeUnitsInTwoPersistenceUnits()
+ throws Exception
+ {
+ // when
+ runServices( FirstServiceNotRollingBack.class,
SecondServiceNotRollingBack.class );
+
+ // then
+ beginUnitOfWork();
+ assertNotNull( firstEmp.get().find( TestEntity.class,
firstEntity.getId() ) );
+ assertNotNull( secondEmp.get().find( TestEntity.class,
secondEntity.getId() ) );
+ assertNull( firstEmp.get().find( TestEntity.class,
secondEntity.getId() ) );
+ assertNull( secondEmp.get().find( TestEntity.class,
firstEntity.getId() ) );
+ endUnitOfWork();
+ }
+
+ @Test
+ public void storeUnitsInTwoPersistenceUnitsAndRollBackBoth()
+ throws Exception
+ {
+ // when
+ runServices( FirstServiceRollingBack.class,
SecondServiceRollingBack.class );
+
+ // then
+ beginUnitOfWork();
+ assertNull( firstEmp.get().find( TestEntity.class, firstEntity.getId()
) );
+ assertNull( secondEmp.get().find( TestEntity.class,
secondEntity.getId() ) );
+ assertNull( firstEmp.get().find( TestEntity.class,
secondEntity.getId() ) );
+ assertNull( secondEmp.get().find( TestEntity.class,
firstEntity.getId() ) );
+ endUnitOfWork();
+ }
+
+ @Test
+ public void storeUnitsInTwoPersistenceUnitsAndRollBackOnlyFirst()
+ throws Exception
+ {
+ // when
+ runServices( FirstServiceRollingBack.class,
SecondServiceNotRollingBack.class );
+
+ // then
+ beginUnitOfWork();
+ assertNull( firstEmp.get().find( TestEntity.class, firstEntity.getId()
) );
+ assertNotNull( secondEmp.get().find( TestEntity.class,
secondEntity.getId() ) );
+ assertNull( firstEmp.get().find( TestEntity.class,
secondEntity.getId() ) );
+ assertNull( secondEmp.get().find( TestEntity.class,
firstEntity.getId() ) );
+ endUnitOfWork();
+ }
+
+ @Test
+ public void storeUnitsInTwoPersistenceUnitsAndRollBackOnlySecond()
+ throws Exception
+ {
+ // when
+ runServices( FirstServiceNotRollingBack.class,
SecondServiceRollingBack.class );
+
+ // then
+ beginUnitOfWork();
+ assertNotNull( firstEmp.get().find( TestEntity.class,
firstEntity.getId() ) );
+ assertNull( secondEmp.get().find( TestEntity.class,
secondEntity.getId() ) );
+ assertNull( firstEmp.get().find( TestEntity.class,
secondEntity.getId() ) );
+ assertNull( secondEmp.get().find( TestEntity.class,
firstEntity.getId() ) );
+ endUnitOfWork();
+ }
+
+ private void runServices( Class<? extends FirstService> firstServiceClass,
+ Class<? extends SecondService>
secondServiceClass )
+ {
+ final FirstService fistService = getInstance( firstServiceClass );
+ final SecondService secondService = getInstance( secondServiceClass );
+
+ try {
+ fistService.setSecondService( secondService );
+ secondService.setException( new RuntimeException() );
+ fistService.run( firstEntity, secondEntity );
+ }
+ catch ( RuntimeException e ) {
+ // ignore
+ }
+ }
+
+ interface FirstService
+ {
+ void setSecondService(SecondService secondService);
+
+ void run(TestEntity firstEntity, TestEntity secondEntity);
+ }
+
+ static class FirstServiceRollingBack
+ implements FirstService
+ {
+
+ private final EntityManagerProvider emp;
+
+ private SecondService secondService;
+
+ @Inject
+ public FirstServiceRollingBack( @FirstPU EntityManagerProvider emp )
+ {
+ this.emp = emp;
+ }
+
+ // @Override
+ public void setSecondService( SecondService secondService )
+ {
+ this.secondService = secondService;
+ }
+
+ // @Override
+ @Transactional( onUnits = FirstPU.class )
+ public void run(TestEntity firstEntity, TestEntity secondEntity)
+ {
+ emp.get().persist( firstEntity );
+ secondService.run(secondEntity);
+ }
+ }
+
+ static class FirstServiceNotRollingBack
+ implements FirstService
+ {
+
+ private final EntityManagerProvider emp;
+
+ private SecondService secondService;
+
+ @Inject
+ public FirstServiceNotRollingBack( @FirstPU EntityManagerProvider emp )
+ {
+ this.emp = emp;
+ }
+
+ // @Override
+ public void setSecondService( SecondService secondService )
+ {
+ this.secondService = secondService;
+ }
+
+ // @Override
+ @Transactional( onUnits = FirstPU.class, ignore =
RuntimeException.class)
+ public void run(TestEntity firstEntity, TestEntity secondEntity)
+ {
+ emp.get().persist( firstEntity );
+ secondService.run(secondEntity);
+ }
+ }
+
+ interface SecondService
+ {
+ void setException(RuntimeException exception);
+
+ void run(TestEntity secondEntity);
+ }
+
+ static class SecondServiceRollingBack
+ implements SecondService
+ {
+
+ private final EntityManagerProvider emp;
+
+ private RuntimeException ex;
+
+ @Inject
+ public SecondServiceRollingBack( @SecondPU EntityManagerProvider emp )
+ {
+ this.emp = emp;
+ }
+
+ // @Override
+ public void setException(RuntimeException ex)
+ {
+ this.ex = ex;
+ }
+
+ // @Override
+ @Transactional( onUnits = SecondPU.class )
+ public void run( TestEntity secondEntity )
+ {
+ emp.get().persist( secondEntity );
+ if (ex != null) {
+ throw ex;
+ }
+ }
+ }
+
+ static class SecondServiceNotRollingBack
+ implements SecondService
+ {
+
+ private final EntityManagerProvider emp;
+
+ private RuntimeException ex;
+
+ @Inject
+ public SecondServiceNotRollingBack( @SecondPU EntityManagerProvider
emp )
+ {
+ this.emp = emp;
+ }
+
+ // @Override
+ public void setException(RuntimeException ex)
+ {
+ this.ex = ex;
+ }
+
+ // @Override
+ @Transactional( onUnits = SecondPU.class, ignore =
RuntimeException.class )
+ public void run( TestEntity secondEntity )
+ {
+ emp.get().persist( secondEntity );
+ if (ex != null) {
+ throw ex;
+ }
+ }
+ }
+
+}
Propchange:
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/TransactionalMultiplePuTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/TransactionalMultiplePuTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
onami/trunk/persist/src/test/java/org/apache/onami/persist/test/multipersistenceunits/TransactionalMultiplePuTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain