22 changed files with 938 additions and 0 deletions
@ -0,0 +1,85 @@
@@ -0,0 +1,85 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.testng.transaction.ejb; |
||||
|
||||
import javax.ejb.EJB; |
||||
|
||||
import javax.persistence.EntityManager; |
||||
import javax.persistence.PersistenceContext; |
||||
|
||||
import org.springframework.test.annotation.DirtiesContext; |
||||
import org.springframework.test.annotation.DirtiesContext.ClassMode; |
||||
import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests; |
||||
import org.springframework.test.context.transaction.ejb.dao.TestEntityDao; |
||||
|
||||
import org.testng.annotations.AfterMethod; |
||||
import org.testng.annotations.Test; |
||||
|
||||
import static org.testng.AssertJUnit.*; |
||||
|
||||
/** |
||||
* Abstract base class for all TestNG-based tests involving EJB transaction |
||||
* support in the TestContext framework. |
||||
* |
||||
* @author Sam Brannen |
||||
* @author Xavier Detant |
||||
* @since 4.0.1 |
||||
*/ |
||||
@DirtiesContext(classMode = ClassMode.AFTER_CLASS) |
||||
public abstract class AbstractEjbTxDaoTestNGTests extends AbstractTransactionalTestNGSpringContextTests { |
||||
|
||||
protected static final String TEST_NAME = "test-name"; |
||||
|
||||
@EJB |
||||
protected TestEntityDao dao; |
||||
|
||||
@PersistenceContext |
||||
protected EntityManager em; |
||||
|
||||
|
||||
@Test |
||||
public void test1InitialState() { |
||||
int count = dao.getCount(TEST_NAME); |
||||
assertEquals("New TestEntity should have count=0.", 0, count); |
||||
} |
||||
|
||||
@Test(dependsOnMethods = "test1InitialState") |
||||
public void test2IncrementCount1() { |
||||
int count = dao.incrementCount(TEST_NAME); |
||||
assertEquals("Expected count=1 after first increment.", 1, count); |
||||
} |
||||
|
||||
/** |
||||
* The default implementation of this method assumes that the transaction |
||||
* for {@link #test2IncrementCount1()} was committed. Therefore, it is |
||||
* expected that the previous increment has been persisted in the database. |
||||
*/ |
||||
@Test(dependsOnMethods = "test2IncrementCount1") |
||||
public void test3IncrementCount2() { |
||||
int count = dao.getCount(TEST_NAME); |
||||
assertEquals("Expected count=1 after test2IncrementCount1().", 1, count); |
||||
|
||||
count = dao.incrementCount(TEST_NAME); |
||||
assertEquals("Expected count=2 now.", 2, count); |
||||
} |
||||
|
||||
@AfterMethod(alwaysRun = true) |
||||
public void synchronizePersistenceContext() { |
||||
em.flush(); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.testng.transaction.ejb; |
||||
|
||||
import org.springframework.test.context.ContextConfiguration; |
||||
import org.springframework.test.context.transaction.TransactionConfiguration; |
||||
import org.springframework.test.context.transaction.TransactionalTestExecutionListener; |
||||
import org.springframework.test.context.transaction.ejb.dao.RequiredEjbTxTestEntityDao; |
||||
import org.testng.annotations.Test; |
||||
|
||||
/** |
||||
* Concrete subclass of {@link AbstractEjbTxDaoTestNGTests} which uses the |
||||
* {@link RequiredEjbTxTestEntityDao} and sets the default rollback semantics |
||||
* for the {@link TransactionalTestExecutionListener} to {@code false} (i.e., |
||||
* <em>commit</em>). |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 4.0.1 |
||||
*/ |
||||
@Test(suiteName = "Commit for REQUIRED") |
||||
@ContextConfiguration("/org/springframework/test/context/transaction/ejb/required-tx-config.xml") |
||||
@TransactionConfiguration(defaultRollback = false) |
||||
public class CommitForRequiredEjbTxDaoTestNGTests extends AbstractEjbTxDaoTestNGTests { |
||||
|
||||
/* test methods in superclass */ |
||||
|
||||
} |
||||
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.testng.transaction.ejb; |
||||
|
||||
import org.springframework.test.context.ContextConfiguration; |
||||
import org.springframework.test.context.transaction.TransactionConfiguration; |
||||
import org.springframework.test.context.transaction.TransactionalTestExecutionListener; |
||||
import org.springframework.test.context.transaction.ejb.dao.RequiresNewEjbTxTestEntityDao; |
||||
import org.testng.annotations.Test; |
||||
|
||||
/** |
||||
* Concrete subclass of {@link AbstractEjbTxDaoTestNGTests} which uses the |
||||
* {@link RequiresNewEjbTxTestEntityDao} and sets the default rollback semantics |
||||
* for the {@link TransactionalTestExecutionListener} to {@code false} (i.e., |
||||
* <em>commit</em>). |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 4.0.1 |
||||
*/ |
||||
@Test(suiteName = "Commit for REQUIRES_NEW") |
||||
@ContextConfiguration("/org/springframework/test/context/transaction/ejb/requires-new-tx-config.xml") |
||||
@TransactionConfiguration(defaultRollback = false) |
||||
public class CommitForRequiresNewEjbTxDaoTestNGTests extends AbstractEjbTxDaoTestNGTests { |
||||
|
||||
/* test methods in superclass */ |
||||
|
||||
} |
||||
@ -0,0 +1,78 @@
@@ -0,0 +1,78 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.testng.transaction.ejb; |
||||
|
||||
import org.springframework.test.context.transaction.TransactionConfiguration; |
||||
import org.springframework.test.context.transaction.TransactionalTestExecutionListener; |
||||
import org.testng.annotations.Test; |
||||
|
||||
import static org.testng.AssertJUnit.*; |
||||
|
||||
/** |
||||
* Extension of {@link CommitForRequiredEjbTxDaoTestNGTests} which sets the default |
||||
* rollback semantics for the {@link TransactionalTestExecutionListener} to |
||||
* {@code true}. The transaction managed by the TestContext framework will be |
||||
* rolled back after each test method. Consequently, any work performed in |
||||
* transactional methods that participate in the test-managed transaction will |
||||
* be rolled back automatically. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 4.0.1 |
||||
*/ |
||||
@Test(suiteName = "Rollback for REQUIRED") |
||||
@TransactionConfiguration(defaultRollback = true) |
||||
public class RollbackForRequiredEjbTxDaoTestNGTests extends CommitForRequiredEjbTxDaoTestNGTests { |
||||
|
||||
/** |
||||
* Redeclared to ensure test method execution order. Simply delegates to super. |
||||
*/ |
||||
@Test |
||||
@Override |
||||
public void test1InitialState() { |
||||
super.test1InitialState(); |
||||
} |
||||
|
||||
/** |
||||
* Redeclared to ensure test method execution order. Simply delegates to super. |
||||
*/ |
||||
@Test(dependsOnMethods = "test1InitialState") |
||||
@Override |
||||
public void test2IncrementCount1() { |
||||
super.test2IncrementCount1(); |
||||
} |
||||
|
||||
/** |
||||
* Overrides parent implementation in order to change expectations to align with |
||||
* behavior associated with "required" transactions on repositories/DAOs and |
||||
* default rollback semantics for transactions managed by the TestContext |
||||
* framework. |
||||
*/ |
||||
@Test(dependsOnMethods = "test2IncrementCount1") |
||||
@Override |
||||
public void test3IncrementCount2() { |
||||
int count = dao.getCount(TEST_NAME); |
||||
// Expecting count=0 after test2IncrementCount1() since REQUIRED transactions
|
||||
// participate in the existing transaction (if present), which in this case is the
|
||||
// transaction managed by the TestContext framework which will be rolled back
|
||||
// after each test method.
|
||||
assertEquals("Expected count=0 after test2IncrementCount1().", 0, count); |
||||
|
||||
count = dao.incrementCount(TEST_NAME); |
||||
assertEquals("Expected count=1 now.", 1, count); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.testng.transaction.ejb; |
||||
|
||||
import org.springframework.test.context.transaction.TransactionConfiguration; |
||||
import org.springframework.test.context.transaction.TransactionalTestExecutionListener; |
||||
import org.testng.annotations.Test; |
||||
|
||||
/** |
||||
* Extension of {@link CommitForRequiresNewEjbTxDaoTestNGTests} which sets the default |
||||
* rollback semantics for the {@link TransactionalTestExecutionListener} to |
||||
* {@code true}. The transaction managed by the TestContext framework will be |
||||
* rolled back after each test method. Consequently, any work performed in |
||||
* transactional methods that participate in the test-managed transaction will |
||||
* be rolled back automatically. On the other hand, any work performed in |
||||
* transactional methods that do <strong>not</strong> participate in the |
||||
* test-managed transaction will not be affected by the rollback of the |
||||
* test-managed transaction. For example, such work may in fact be committed |
||||
* outside the scope of the test-managed transaction. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 4.0.1 |
||||
*/ |
||||
@Test(suiteName = "Rollback for REQUIRES_NEW") |
||||
@TransactionConfiguration(defaultRollback = true) |
||||
public class RollbackForRequiresNewEjbTxDaoTestNGTests extends CommitForRequiresNewEjbTxDaoTestNGTests { |
||||
|
||||
/* test methods in superclass */ |
||||
|
||||
} |
||||
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > |
||||
|
||||
<suite name="EJB-TX-Package" verbose="1"> |
||||
<test name="Package"> |
||||
<packages> |
||||
<package name="org.springframework.test.context.testng.transaction.ejb" /> |
||||
</packages> |
||||
</test> |
||||
</suite> |
||||
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > |
||||
|
||||
<suite name="EJB-TX-Separate" verbose="1"> |
||||
<test name="RollbackForRequiredEjbTxDaoTestNGTests"> |
||||
<classes> |
||||
<class name="org.springframework.test.context.testng.transaction.ejb.RollbackForRequiredEjbTxDaoTestNGTests" /> |
||||
</classes> |
||||
</test> |
||||
<test name="CommitForRequiredEjbTxDaoTestNGTests"> |
||||
<classes> |
||||
<class name="org.springframework.test.context.testng.transaction.ejb.CommitForRequiredEjbTxDaoTestNGTests" /> |
||||
</classes> |
||||
</test> |
||||
<test name="CommitForRequiresNewEjbTxDaoTestNGTests"> |
||||
<classes> |
||||
<class name="org.springframework.test.context.testng.transaction.ejb.CommitForRequiresNewEjbTxDaoTestNGTests" /> |
||||
</classes> |
||||
</test> |
||||
<test name="RollbackForRequiresNewEjbTxDaoTestNGTests"> |
||||
<classes> |
||||
<class name="org.springframework.test.context.testng.transaction.ejb.RollbackForRequiresNewEjbTxDaoTestNGTests" /> |
||||
</classes> |
||||
</test> |
||||
</suite> |
||||
@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > |
||||
|
||||
<suite name="EJB-TX-Together" verbose="1"> |
||||
<test name="Together"> |
||||
<classes> |
||||
<class name="org.springframework.test.context.testng.transaction.ejb.RollbackForRequiredEjbTxDaoTestNGTests" /> |
||||
<class name="org.springframework.test.context.testng.transaction.ejb.CommitForRequiredEjbTxDaoTestNGTests" /> |
||||
<class name="org.springframework.test.context.testng.transaction.ejb.CommitForRequiresNewEjbTxDaoTestNGTests" /> |
||||
<class name="org.springframework.test.context.testng.transaction.ejb.RollbackForRequiresNewEjbTxDaoTestNGTests" /> |
||||
</classes> |
||||
</test> |
||||
</suite> |
||||
@ -0,0 +1,88 @@
@@ -0,0 +1,88 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.transaction.ejb; |
||||
|
||||
import javax.ejb.EJB; |
||||
|
||||
import javax.persistence.EntityManager; |
||||
import javax.persistence.PersistenceContext; |
||||
|
||||
import org.junit.After; |
||||
import org.junit.FixMethodOrder; |
||||
import org.junit.Test; |
||||
import org.junit.runners.MethodSorters; |
||||
|
||||
import org.springframework.test.annotation.DirtiesContext; |
||||
import org.springframework.test.annotation.DirtiesContext.ClassMode; |
||||
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; |
||||
import org.springframework.test.context.transaction.ejb.dao.TestEntityDao; |
||||
|
||||
import static org.junit.Assert.*; |
||||
|
||||
/** |
||||
* Abstract base class for all tests involving EJB transaction support in the |
||||
* TestContext framework. |
||||
* |
||||
* @author Sam Brannen |
||||
* @author Xavier Detant |
||||
* @since 4.0.1 |
||||
*/ |
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING) |
||||
@DirtiesContext(classMode = ClassMode.AFTER_CLASS) |
||||
public abstract class AbstractEjbTxDaoTests extends AbstractTransactionalJUnit4SpringContextTests { |
||||
|
||||
protected static final String TEST_NAME = "test-name"; |
||||
|
||||
@EJB |
||||
protected TestEntityDao dao; |
||||
|
||||
@PersistenceContext |
||||
protected EntityManager em; |
||||
|
||||
|
||||
@Test |
||||
public void test1InitialState() { |
||||
int count = dao.getCount(TEST_NAME); |
||||
assertEquals("New TestEntity should have count=0.", 0, count); |
||||
} |
||||
|
||||
@Test |
||||
public void test2IncrementCount1() { |
||||
int count = dao.incrementCount(TEST_NAME); |
||||
assertEquals("Expected count=1 after first increment.", 1, count); |
||||
} |
||||
|
||||
/** |
||||
* The default implementation of this method assumes that the transaction |
||||
* for {@link #test2IncrementCount1()} was committed. Therefore, it is |
||||
* expected that the previous increment has been persisted in the database. |
||||
*/ |
||||
@Test |
||||
public void test3IncrementCount2() { |
||||
int count = dao.getCount(TEST_NAME); |
||||
assertEquals("Expected count=1 after test2IncrementCount1().", 1, count); |
||||
|
||||
count = dao.incrementCount(TEST_NAME); |
||||
assertEquals("Expected count=2 now.", 2, count); |
||||
} |
||||
|
||||
@After |
||||
public void synchronizePersistenceContext() { |
||||
em.flush(); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.transaction.ejb; |
||||
|
||||
import org.springframework.test.context.ContextConfiguration; |
||||
import org.springframework.test.context.transaction.TransactionConfiguration; |
||||
import org.springframework.test.context.transaction.TransactionalTestExecutionListener; |
||||
import org.springframework.test.context.transaction.ejb.dao.RequiredEjbTxTestEntityDao; |
||||
|
||||
/** |
||||
* Concrete subclass of {@link AbstractEjbTxDaoTests} which uses the |
||||
* {@link RequiredEjbTxTestEntityDao} and sets the default rollback semantics |
||||
* for the {@link TransactionalTestExecutionListener} to {@code false} (i.e., |
||||
* <em>commit</em>). |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 4.0.1 |
||||
*/ |
||||
@ContextConfiguration("required-tx-config.xml") |
||||
@TransactionConfiguration(defaultRollback = false) |
||||
public class CommitForRequiredEjbTxDaoTests extends AbstractEjbTxDaoTests { |
||||
|
||||
/* test methods in superclass */ |
||||
|
||||
} |
||||
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.transaction.ejb; |
||||
|
||||
import org.springframework.test.context.ContextConfiguration; |
||||
import org.springframework.test.context.transaction.TransactionConfiguration; |
||||
import org.springframework.test.context.transaction.TransactionalTestExecutionListener; |
||||
import org.springframework.test.context.transaction.ejb.dao.RequiresNewEjbTxTestEntityDao; |
||||
|
||||
/** |
||||
* Concrete subclass of {@link AbstractEjbTxDaoTests} which uses the |
||||
* {@link RequiresNewEjbTxTestEntityDao} and sets the default rollback semantics |
||||
* for the {@link TransactionalTestExecutionListener} to {@code false} (i.e., |
||||
* <em>commit</em>). |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 4.0.1 |
||||
*/ |
||||
@ContextConfiguration("requires-new-tx-config.xml") |
||||
@TransactionConfiguration(defaultRollback = false) |
||||
public class CommitForRequiresNewEjbTxDaoTests extends AbstractEjbTxDaoTests { |
||||
|
||||
/* test methods in superclass */ |
||||
|
||||
} |
||||
@ -0,0 +1,80 @@
@@ -0,0 +1,80 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.transaction.ejb; |
||||
|
||||
import org.junit.FixMethodOrder; |
||||
import org.junit.Test; |
||||
import org.junit.runners.MethodSorters; |
||||
import org.springframework.test.context.transaction.TransactionConfiguration; |
||||
import org.springframework.test.context.transaction.TransactionalTestExecutionListener; |
||||
|
||||
import static org.junit.Assert.*; |
||||
|
||||
/** |
||||
* Extension of {@link CommitForRequiredEjbTxDaoTests} which sets the default |
||||
* rollback semantics for the {@link TransactionalTestExecutionListener} to |
||||
* {@code true}. The transaction managed by the TestContext framework will be |
||||
* rolled back after each test method. Consequently, any work performed in |
||||
* transactional methods that participate in the test-managed transaction will |
||||
* be rolled back automatically. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 4.0.1 |
||||
*/ |
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING) |
||||
@TransactionConfiguration(defaultRollback = true) |
||||
public class RollbackForRequiredEjbTxDaoTests extends CommitForRequiredEjbTxDaoTests { |
||||
|
||||
/** |
||||
* Redeclared to ensure test method execution order. Simply delegates to super. |
||||
*/ |
||||
@Test |
||||
@Override |
||||
public void test1InitialState() { |
||||
super.test1InitialState(); |
||||
} |
||||
|
||||
/** |
||||
* Redeclared to ensure test method execution order. Simply delegates to super. |
||||
*/ |
||||
@Test |
||||
@Override |
||||
public void test2IncrementCount1() { |
||||
super.test2IncrementCount1(); |
||||
} |
||||
|
||||
/** |
||||
* Overrides parent implementation in order to change expectations to align with |
||||
* behavior associated with "required" transactions on repositories/DAOs and |
||||
* default rollback semantics for transactions managed by the TestContext |
||||
* framework. |
||||
*/ |
||||
@Test |
||||
@Override |
||||
public void test3IncrementCount2() { |
||||
int count = dao.getCount(TEST_NAME); |
||||
// Expecting count=0 after test2IncrementCount1() since REQUIRED transactions
|
||||
// participate in the existing transaction (if present), which in this case is the
|
||||
// transaction managed by the TestContext framework which will be rolled back
|
||||
// after each test method.
|
||||
assertEquals("Expected count=0 after test2IncrementCount1().", 0, count); |
||||
|
||||
count = dao.incrementCount(TEST_NAME); |
||||
assertEquals("Expected count=1 now.", 1, count); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.transaction.ejb; |
||||
|
||||
import org.springframework.test.context.transaction.TransactionConfiguration; |
||||
import org.springframework.test.context.transaction.TransactionalTestExecutionListener; |
||||
|
||||
/** |
||||
* Extension of {@link CommitForRequiresNewEjbTxDaoTests} which sets the default |
||||
* rollback semantics for the {@link TransactionalTestExecutionListener} to |
||||
* {@code true}. The transaction managed by the TestContext framework will be |
||||
* rolled back after each test method. Consequently, any work performed in |
||||
* transactional methods that participate in the test-managed transaction will |
||||
* be rolled back automatically. On the other hand, any work performed in |
||||
* transactional methods that do <strong>not</strong> participate in the |
||||
* test-managed transaction will not be affected by the rollback of the |
||||
* test-managed transaction. For example, such work may in fact be committed |
||||
* outside the scope of the test-managed transaction. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 4.0.1 |
||||
*/ |
||||
@TransactionConfiguration(defaultRollback = true) |
||||
public class RollbackForRequiresNewEjbTxDaoTests extends CommitForRequiresNewEjbTxDaoTests { |
||||
|
||||
/* test methods in superclass */ |
||||
|
||||
} |
||||
@ -0,0 +1,63 @@
@@ -0,0 +1,63 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.transaction.ejb.dao; |
||||
|
||||
import javax.ejb.TransactionAttribute; |
||||
import javax.persistence.EntityManager; |
||||
import javax.persistence.PersistenceContext; |
||||
|
||||
import org.springframework.test.context.transaction.ejb.model.TestEntity; |
||||
|
||||
/** |
||||
* Abstract base class for EJB implementations of {@link TestEntityDao} which |
||||
* declare transaction semantics for {@link #incrementCount(String)} via |
||||
* {@link TransactionAttribute}. |
||||
* |
||||
* @author Sam Brannen |
||||
* @author Xavier Detant |
||||
* @since 4.0.1 |
||||
* @see RequiredEjbTxTestEntityDao |
||||
* @see RequiresNewEjbTxTestEntityDao |
||||
*/ |
||||
public abstract class AbstractEjbTxTestEntityDao implements TestEntityDao { |
||||
|
||||
@PersistenceContext |
||||
protected EntityManager entityManager; |
||||
|
||||
|
||||
protected final TestEntity getTestEntity(String name) { |
||||
TestEntity te = entityManager.find(TestEntity.class, name); |
||||
if (te == null) { |
||||
te = new TestEntity(name, 0); |
||||
entityManager.persist(te); |
||||
} |
||||
return te; |
||||
} |
||||
|
||||
protected final int getCountInternal(String name) { |
||||
return getTestEntity(name).getCount(); |
||||
} |
||||
|
||||
protected final int incrementCountInternal(String name) { |
||||
TestEntity te = getTestEntity(name); |
||||
int count = te.getCount(); |
||||
count++; |
||||
te.setCount(count); |
||||
return count; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,50 @@
@@ -0,0 +1,50 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.transaction.ejb.dao; |
||||
|
||||
import javax.ejb.Local; |
||||
import javax.ejb.Stateless; |
||||
import javax.ejb.TransactionAttribute; |
||||
import javax.ejb.TransactionAttributeType; |
||||
|
||||
/** |
||||
* EJB implementation of {@link TestEntityDao} which declares transaction |
||||
* semantics for {@link #incrementCount(String)} with |
||||
* {@link TransactionAttributeType#REQUIRED}. |
||||
* |
||||
* @author Sam Brannen |
||||
* @author Xavier Detant |
||||
* @since 4.0.1 |
||||
* @see RequiresNewEjbTxTestEntityDao |
||||
*/ |
||||
@Stateless |
||||
@Local(TestEntityDao.class) |
||||
@TransactionAttribute(TransactionAttributeType.MANDATORY) |
||||
public class RequiredEjbTxTestEntityDao extends AbstractEjbTxTestEntityDao { |
||||
|
||||
@Override |
||||
public int getCount(String name) { |
||||
return super.getCountInternal(name); |
||||
} |
||||
|
||||
@TransactionAttribute(TransactionAttributeType.REQUIRED) |
||||
@Override |
||||
public int incrementCount(String name) { |
||||
return super.incrementCountInternal(name); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,50 @@
@@ -0,0 +1,50 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.transaction.ejb.dao; |
||||
|
||||
import javax.ejb.Local; |
||||
import javax.ejb.Stateless; |
||||
import javax.ejb.TransactionAttribute; |
||||
import javax.ejb.TransactionAttributeType; |
||||
|
||||
/** |
||||
* EJB implementation of {@link TestEntityDao} which declares transaction |
||||
* semantics for {@link #incrementCount(String)} with |
||||
* {@link TransactionAttributeType#REQUIRES_NEW}. |
||||
* |
||||
* @author Sam Brannen |
||||
* @author Xavier Detant |
||||
* @since 4.0.1 |
||||
* @see RequiredEjbTxTestEntityDao |
||||
*/ |
||||
@Stateless |
||||
@Local(TestEntityDao.class) |
||||
@TransactionAttribute(TransactionAttributeType.MANDATORY) |
||||
public class RequiresNewEjbTxTestEntityDao extends AbstractEjbTxTestEntityDao { |
||||
|
||||
@Override |
||||
public int getCount(String name) { |
||||
return super.getCountInternal(name); |
||||
} |
||||
|
||||
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) |
||||
@Override |
||||
public int incrementCount(String name) { |
||||
return super.incrementCountInternal(name); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,32 @@
@@ -0,0 +1,32 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.transaction.ejb.dao; |
||||
|
||||
/** |
||||
* Test DAO for EJB transaction support in the TestContext framework. |
||||
* |
||||
* @author Xavier Detant |
||||
* @author Sam Brannen |
||||
* @since 4.0.1 |
||||
*/ |
||||
public interface TestEntityDao { |
||||
|
||||
int getCount(String name); |
||||
|
||||
int incrementCount(String name); |
||||
|
||||
} |
||||
@ -0,0 +1,68 @@
@@ -0,0 +1,68 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed 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.springframework.test.context.transaction.ejb.model; |
||||
|
||||
import javax.persistence.Column; |
||||
import javax.persistence.Entity; |
||||
import javax.persistence.Id; |
||||
import javax.persistence.Table; |
||||
|
||||
/** |
||||
* Test entity for EJB transaction support in the TestContext framework. |
||||
* |
||||
* @author Xavier Detant |
||||
* @author Sam Brannen |
||||
* @since 4.0.1 |
||||
*/ |
||||
@Entity |
||||
@Table(name = TestEntity.TABLE_NAME) |
||||
public class TestEntity { |
||||
|
||||
public static final String TABLE_NAME = "TEST_ENTITY"; |
||||
|
||||
@Id |
||||
@Column(name = "TE_NAME", nullable = false) |
||||
private String name; |
||||
|
||||
@Column(name = "TE_COUNT", nullable = false) |
||||
private int count; |
||||
|
||||
|
||||
public TestEntity() { |
||||
} |
||||
|
||||
public TestEntity(String name, int count) { |
||||
this.name = name; |
||||
this.count = count; |
||||
} |
||||
|
||||
public String getName() { |
||||
return this.name; |
||||
} |
||||
|
||||
public void setName(String name) { |
||||
this.name = name; |
||||
} |
||||
|
||||
public int getCount() { |
||||
return this.count; |
||||
} |
||||
|
||||
public void setCount(int count) { |
||||
this.count = count; |
||||
} |
||||
} |
||||
@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" default-lazy-init="true" xmlns:context="http://www.springframework.org/schema/context" |
||||
xmlns:jdbc="http://www.springframework.org/schema/jdbc" |
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd |
||||
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd |
||||
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd |
||||
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> |
||||
|
||||
<context:annotation-config /> |
||||
|
||||
<tx:annotation-driven /> |
||||
|
||||
<jdbc:embedded-database id="dataSource" /> |
||||
|
||||
<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> |
||||
<property name="showSql" value="false" /> |
||||
<property name="generateDdl" value="true" /> |
||||
<property name="database" value="HSQL" /> |
||||
</bean> |
||||
|
||||
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> |
||||
<property name="dataSource" ref="dataSource" /> |
||||
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" /> |
||||
<property name="packagesToScan" value="org.springframework.test.context.transaction.ejb.model" /> |
||||
</bean> |
||||
|
||||
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> |
||||
<property name="entityManagerFactory" ref="entityManagerFactory" /> |
||||
<property name="dataSource" ref="dataSource" /> |
||||
</bean> |
||||
|
||||
</beans> |
||||
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> |
||||
|
||||
<import resource="common-config.xml" /> |
||||
|
||||
<bean class="org.springframework.test.context.transaction.ejb.dao.RequiredEjbTxTestEntityDao" /> |
||||
|
||||
</beans> |
||||
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> |
||||
|
||||
<import resource="common-config.xml" /> |
||||
|
||||
<bean class="org.springframework.test.context.transaction.ejb.dao.RequiresNewEjbTxTestEntityDao" /> |
||||
|
||||
</beans> |
||||
Loading…
Reference in new issue