@Test public void transactionTemplateEquality() { TestTransactionManager tm1 = new TestTransactionManager(false, true); TestTransactionManager tm2 = new TestTransactionManager(false, true); TransactionTemplate template1 = new TransactionTemplate(tm1); TransactionTemplate template2 = new TransactionTemplate(tm2); TransactionTemplate template3 = new TransactionTemplate(tm2); assertNotEquals(template1, template2); assertNotEquals(template1, template3); assertEquals(template2, template3); }
@Test public void transactionTemplate() { TestTransactionManager tm = new TestTransactionManager(false, true); TransactionTemplate template = new TransactionTemplate(tm); template.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { } }); assertTrue("triggered begin", tm.begin); assertTrue("triggered commit", tm.commit); assertTrue("no rollback", !tm.rollback); assertTrue("no rollbackOnly", !tm.rollbackOnly); }
@Test public void transactionTemplateWithError() { TestTransactionManager tm = new TestTransactionManager(false, true); TransactionTemplate template = new TransactionTemplate(tm); try { template.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { throw new Error("Some application error"); } }); fail("Should have propagated Error"); } catch (Error err) { // expected assertTrue("triggered begin", tm.begin); assertTrue("no commit", !tm.commit); assertTrue("triggered rollback", tm.rollback); assertTrue("no rollbackOnly", !tm.rollbackOnly); } }
@Test public void transactionTemplateWithException() { TestTransactionManager tm = new TestTransactionManager(false, true); TransactionTemplate template = new TransactionTemplate(tm); final RuntimeException ex = new RuntimeException("Some application exception"); try { template.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { throw ex; } }); fail("Should have propagated RuntimeException"); } catch (RuntimeException caught) { // expected assertTrue("Correct exception", caught == ex); assertTrue("triggered begin", tm.begin); assertTrue("no commit", !tm.commit); assertTrue("triggered rollback", tm.rollback); assertTrue("no rollbackOnly", !tm.rollbackOnly); } }
@Test public void rollbackWithoutExistingTransaction() { TestTransactionManager tm = new TestTransactionManager(false, true); TransactionStatus status = tm.getTransaction(null); tm.rollback(status); assertTrue("triggered begin", tm.begin); assertTrue("no commit", !tm.commit); assertTrue("triggered rollback", tm.rollback); assertTrue("no rollbackOnly", !tm.rollbackOnly); }
@Test public void commitWithoutExistingTransaction() { TestTransactionManager tm = new TestTransactionManager(false, true); TransactionStatus status = tm.getTransaction(null); tm.commit(status); assertTrue("triggered begin", tm.begin); assertTrue("triggered commit", tm.commit); assertTrue("no rollback", !tm.rollback); assertTrue("no rollbackOnly", !tm.rollbackOnly); }
@Test public void commitWithExistingTransaction() { TestTransactionManager tm = new TestTransactionManager(true, true); TransactionStatus status = tm.getTransaction(null); tm.commit(status); assertTrue("no begin", !tm.begin); assertTrue("no commit", !tm.commit); assertTrue("no rollback", !tm.rollback); assertTrue("no rollbackOnly", !tm.rollbackOnly); }
@Test public void rollbackWithExistingTransaction() { TestTransactionManager tm = new TestTransactionManager(true, true); TransactionStatus status = tm.getTransaction(null); tm.rollback(status); assertTrue("no begin", !tm.begin); assertTrue("no commit", !tm.commit); assertTrue("no rollback", !tm.rollback); assertTrue("triggered rollbackOnly", tm.rollbackOnly); }
@Test public void rollbackOnlyWithoutExistingTransaction() { TestTransactionManager tm = new TestTransactionManager(false, true); TransactionStatus status = tm.getTransaction(null); status.setRollbackOnly(); tm.commit(status); assertTrue("triggered begin", tm.begin); assertTrue("no commit", !tm.commit); assertTrue("triggered rollback", tm.rollback); assertTrue("no rollbackOnly", !tm.rollbackOnly); }
@Test public void rollbackOnlyWithExistingTransaction() { TestTransactionManager tm = new TestTransactionManager(true, true); TransactionStatus status = tm.getTransaction(null); status.setRollbackOnly(); tm.commit(status); assertTrue("no begin", !tm.begin); assertTrue("no commit", !tm.commit); assertTrue("no rollback", !tm.rollback); assertTrue("triggered rollbackOnly", tm.rollbackOnly); }
@Test public void noExistingTransaction() { PlatformTransactionManager tm = new TestTransactionManager(false, true); DefaultTransactionStatus status1 = (DefaultTransactionStatus) tm.getTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_SUPPORTS)); assertFalse("Must not have transaction", status1.hasTransaction()); DefaultTransactionStatus status2 = (DefaultTransactionStatus) tm.getTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED)); assertTrue("Must have transaction", status2.hasTransaction()); assertTrue("Must be new transaction", status2.isNewTransaction()); try { tm.getTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_MANDATORY)); fail("Should not have thrown NoTransactionException"); } catch (IllegalTransactionStateException ex) { // expected } }
@Test public void existingTransaction() { PlatformTransactionManager tm = new TestTransactionManager(true, true); DefaultTransactionStatus status1 = (DefaultTransactionStatus) tm.getTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_SUPPORTS)); assertTrue("Must have transaction", status1.getTransaction() != null); assertTrue("Must not be new transaction", !status1.isNewTransaction()); DefaultTransactionStatus status2 = (DefaultTransactionStatus) tm.getTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED)); assertTrue("Must have transaction", status2.getTransaction() != null); assertTrue("Must not be new transaction", !status2.isNewTransaction()); try { DefaultTransactionStatus status3 = (DefaultTransactionStatus) tm.getTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_MANDATORY)); assertTrue("Must have transaction", status3.getTransaction() != null); assertTrue("Must not be new transaction", !status3.isNewTransaction()); } catch (NoTransactionException ex) { fail("Should not have thrown NoTransactionException"); } }
@Test public void transactionTemplateInitialization() { TestTransactionManager tm = new TestTransactionManager(false, true); TransactionTemplate template = new TransactionTemplate(); template.setTransactionManager(tm);