Refine search
/** * If the given UserTransaction is not null, it is committed/rolledback, * and then returned to the UserTransactionHelper. */ private void resolveUserTransaction(UserTransaction userTransaction) { if (userTransaction != null) { try { if (userTransaction.getStatus() == Status.STATUS_MARKED_ROLLBACK) { userTransaction.rollback(); } else { userTransaction.commit(); } } catch (Throwable t) { getLog().error("Failed to resolve UserTransaction for plugin: " + getName(), t); } finally { UserTransactionHelper.returnUserTransaction(userTransaction); } } } }
@Test public void testAsyncAuditProducerTransactionalWithRollback() throws Exception { UserTransaction ut = InitialContext.doLookup("java:comp/UserTransaction"); ut.begin(); Environment env = createEnvironment(context); // load the process KieBase kbase = createKnowledgeBase(); // create a new session KieSession session = createSession(kbase, env); Map<String, Object> jmsProps = new HashMap<String, Object>(); jmsProps.put("jbpm.audit.jms.transacted", true); jmsProps.put("jbpm.audit.jms.connection.factory", factory); jmsProps.put("jbpm.audit.jms.queue", queue); AbstractAuditLogger logger = AuditLoggerFactory.newInstance(Type.JMS, session, jmsProps); Assertions.assertThat(logger).isNotNull(); Assertions.assertThat((logger instanceof AsyncAuditLogProducer)).isTrue(); // start process instance long processInstanceId = session.startProcess("com.sample.ruleflow").getId(); ut.rollback(); MessageReceiver receiver = new MessageReceiver(); List<Message> messages = receiver.receive(queue); Assertions.assertThat(messages).isNotNull(); Assertions.assertThat(messages.size()).isEqualTo(0); }
@Test public void testAsyncAuditProducerNonTransactionalWithRollback() throws Exception { UserTransaction ut = InitialContext.doLookup("java:comp/UserTransaction"); ut.begin(); Environment env = createEnvironment(context); // load the process KieBase kbase = createKnowledgeBase(); // create a new session KieSession session = createSession(kbase, env); Map<String, Object> jmsProps = new HashMap<String, Object>(); jmsProps.put("jbpm.audit.jms.transacted", false); jmsProps.put("jbpm.audit.jms.connection.factory", jmsServer.lookup("ConnectionFactory")); jmsProps.put("jbpm.audit.jms.queue", queue); AbstractAuditLogger logger = AuditLoggerFactory.newInstance(Type.JMS, session, jmsProps); Assertions.assertThat(logger).isNotNull(); Assertions.assertThat((logger instanceof AsyncAuditLogProducer)).isTrue(); // start process instance long processInstanceId = session.startProcess("com.sample.ruleflow").getId(); ut.rollback(); MessageReceiver receiver = new MessageReceiver(); List<Message> messages = receiver.receive(queue); Assertions.assertThat(messages).isNotNull(); Assertions.assertThat(messages.size()).isEqualTo(11); }
/** * If the given UserTransaction is not null, it is committed/rolledback, * and then returned to the UserTransactionHelper. */ private void resolveUserTransaction(UserTransaction userTransaction) { if (userTransaction != null) { try { if (userTransaction.getStatus() == Status.STATUS_MARKED_ROLLBACK) { userTransaction.rollback(); } else { userTransaction.commit(); } } catch (Throwable t) { getLog().error("Failed to resolve UserTransaction for plugin: " + getName(), t); } finally { UserTransactionHelper.returnUserTransaction(userTransaction); } } } }
@After public void after() throws Exception { EntityManagerFactory emf = (EntityManagerFactory) context.get(EnvironmentName.ENTITY_MANAGER_FACTORY); UserTransaction ut = InitialContext.doLookup("java:comp/UserTransaction"); ut.begin(); try { EntityManager em = emf.createEntityManager(); em.createQuery("delete from CorrelationPropertyInfo").executeUpdate(); em.createQuery("delete from CorrelationKeyInfo").executeUpdate(); ut.commit(); } catch (Exception ex) { ut.rollback(); Assert.fail("Exception thrown while trying to cleanup correlation data."); } cleanUp(context); }
@Test public void jtaTransactionManagerWithSystemExceptionOnRollback() throws Exception { UserTransaction ut = mock(UserTransaction.class); given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, Status.STATUS_ACTIVE); willThrow(new SystemException("system exception")).given(ut).rollback(); try { JtaTransactionManager ptm = newJtaTransactionManager(ut); TransactionTemplate tt = new TransactionTemplate(ptm); tt.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() { @Override public void afterCompletion(int status) { assertTrue("Correct completion status", status == TransactionSynchronization.STATUS_UNKNOWN); } }); status.setRollbackOnly(); } }); fail("Should have thrown TransactionSystemException"); } catch (TransactionSystemException ex) { // expected } verify(ut).begin(); }
@Before public void before() throws Exception { context = setupWithPoolingDataSource(JBPM_PERSISTENCE_UNIT_NAME); CorrelationKeyFactory factory = KieInternalServices.Factory.get().newCorrelationKeyFactory(); // populate table with test data EntityManagerFactory emf = (EntityManagerFactory) context.get(EnvironmentName.ENTITY_MANAGER_FACTORY); UserTransaction ut = InitialContext.doLookup("java:comp/UserTransaction"); ut.begin(); try { EntityManager em = emf.createEntityManager(); em.persist(factory.newCorrelationKey("test123")); List<String> props = new ArrayList<String>(); props.add("test123"); props.add("123test"); em.persist(factory.newCorrelationKey(props)); ut.commit(); } catch (Exception ex) { ut.rollback(); Assert.fail("Exception thrown while trying to prepare correlation data."); } }
@Test public void noProcessInstancesLeftWithPreTxKSessionAndRollback() throws Exception { long[] notProcess = new long[4]; StatefulKnowledgeSession ksession = reloadKnowledgeSession(); UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" ); ut.begin(); notProcess[0] = ksession.createProcessInstance("org.jbpm.processinstance.helloworld", null).getId(); notProcess[1] = ksession.createProcessInstance("org.jbpm.processinstance.helloworld", null).getId(); ut.rollback(); // Validate that proc inst mgr cache is also flushed on rollback assertEquals(0, ksession.getProcessInstances().size()); ksession = reloadKnowledgeSession(ksession); assertEquals(0, ksession.getProcessInstances().size()); ksession.dispose(); assertProcessInstancesNotExist(notProcess); }
ut.begin(); StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env ); ut.commit(); ut.begin(); ksession.setGlobal( "list", list ); ksession.insert( 1 ); ksession.insert( 2 ); ut.commit(); ut.begin(); ksession.insert( 3 ); ut.rollback(); ut.begin(); ksession.fireAllRules(); ut.commit(); assertEquals( 2, list.size() ); ksession.insert( 5 ); ksession.insert( 6 ); ut.rollback();
@Test public void noProcessInstancesLeftAfterRollback() throws Exception { long[] notProcess = new long[2]; UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" ); ut.begin(); StatefulKnowledgeSession ksession = reloadKnowledgeSession(); notProcess[0] = ksession.createProcessInstance("org.jbpm.processinstance.helloworld", null).getId(); notProcess[1] = ksession.createProcessInstance("org.jbpm.processinstance.helloworld", null).getId(); assertEquals(2, ksession.getProcessInstances().size()); ut.rollback(); // Validate that proc inst mgr cache is also flushed on rollback assertEquals(0, ksession.getProcessInstances().size()); ksession = reloadKnowledgeSession(ksession); assertEquals(0, ksession.getProcessInstances().size()); ksession.dispose(); assertProcessInstancesNotExist(notProcess); }
@Test public void jtaTransactionManagerWithRollbackAndSynchronizationNever() throws Exception { UserTransaction ut = mock(UserTransaction.class); given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, Status.STATUS_ACTIVE); JtaTransactionManager ptm = newJtaTransactionManager(ut); TransactionTemplate tt = new TransactionTemplate(ptm); ptm.setTransactionSynchronizationName("SYNCHRONIZATION_NEVER"); tt.setTimeout(10); ptm.afterPropertiesSet(); assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); tt.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); status.setRollbackOnly(); } }); assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); verify(ut).setTransactionTimeout(10); verify(ut).begin(); verify(ut, atLeastOnce()).getStatus(); verify(ut).rollback(); }