@Override protected int getKnowledgeSessionsCount() { boolean transactionOwner = false; if( useTransactions ) { transactionOwner = txm.begin(); } int size = emf.createEntityManager().createQuery( "FROM SessionInfo" ).getResultList().size(); if( useTransactions ) { txm.commit(transactionOwner); } return size; }
@SuppressWarnings("unchecked") public static ArrayList<ProcessInstanceInfo> retrieveProcessInstanceInfo(EntityManagerFactory emf) { JtaTransactionManager txm = new JtaTransactionManager(null, null, null); boolean txOwner = txm.begin(); EntityManager em = emf.createEntityManager(); ArrayList<ProcessInstanceInfo> procInstInfoList = new ArrayList<ProcessInstanceInfo>(); List<Object> mdList = em.createQuery("SELECT p FROM ProcessInstanceInfo p").getResultList(); for( Object resultObject : mdList ) { ProcessInstanceInfo procInstInfo = (ProcessInstanceInfo) resultObject; procInstInfoList.add(procInstInfo); logger.trace("> {}", procInstInfo); } txm.commit(txOwner); return procInstInfoList; }
protected void addInterceptors(KieSession ksession) { PersistableRunner runner = (PersistableRunner) ((CommandBasedStatefulKnowledgeSession) ksession).getRunner(); runner.addInterceptor(new OptimisticLockRetryInterceptor()); // even though it's added always TransactionLockInterceptor is by default disabled so won't do anything runner.addInterceptor(new TransactionLockInterceptor(ksession.getEnvironment())); runner.addInterceptor(new ExecutionErrorHandlerInterceptor(ksession.getEnvironment())); }
@Test public void basicTransactionRollbackTest() { Environment env = createEnvironment(context); //TransactionManager txm = (TransactionManager) env.get( EnvironmentName.TRANSACTION_MANAGER ); javax.transaction.TransactionManager tm = (javax.transaction.TransactionManager) env.get( EnvironmentName.TRANSACTION_MANAGER ); TransactionManager txm = new JtaTransactionManager( env.get( EnvironmentName.TRANSACTION ), env.get( EnvironmentName.TRANSACTION_SYNCHRONIZATION_REGISTRY ), tm ); // Create linked transactionTestObjects TransactionTestObject mainObject = new TransactionTestObject(); mainObject.setName("main"); TransactionTestObject subObject = new TransactionTestObject(); subObject.setName("sub"); mainObject.setSubObject(subObject); Cache<Serializable, Object> cache = cm.getCache("jbpm-configured-cache"); try { boolean notTxOwner = txm.begin(); Serializable s = generateId(mainObject); mainObject.setId(Long.valueOf(s.toString())); cache.put(s, mainObject); txm.rollback(notTxOwner); } catch ( Exception e ) { fail("There should not be an exception thrown here: " + e.getMessage()); } }
@Before public void setUp() throws Exception { context = PersistenceUtil.setupWithPoolingDataSource(JBPM_PERSISTENCE_UNIT_NAME); emf = (EntityManagerFactory) context.get(ENTITY_MANAGER_FACTORY); if( useTransactions() ) { useTransactions = true; Environment env = createEnvironment(context); Object tm = env.get( EnvironmentName.TRANSACTION_MANAGER ); this.txm = new JtaTransactionManager( env.get( EnvironmentName.TRANSACTION ), env.get( EnvironmentName.TRANSACTION_SYNCHRONIZATION_REGISTRY ), tm ); } }
@Test public void testSingleSessionCommandServiceAndJtaTransactionManagerTogether() { // Initialize drools environment stuff Environment env = createEnvironment(context); KieBase kbase = initializeKnowledgeBase(simpleRule); StatefulKnowledgeSession commandKSession = InfinispanKnowledgeService.newStatefulKnowledgeSession( kbase, null, env ); PersistableRunner commandService = (PersistableRunner) ((CommandBasedStatefulKnowledgeSession) commandKSession).getRunner(); InfinispanPersistenceContextManager jpm = (InfinispanPersistenceContextManager) getValueOfField("jpm", commandService); jpm.getApplicationScopedPersistenceContext(); @SuppressWarnings("unchecked") Cache<String, EntityHolder> cache = (Cache<String, EntityHolder>) getValueOfField("appScopedCache", jpm); TransactionTestObject mainObject = new TransactionTestObject(); mainObject.setName("mainCommand"); TransactionTestObject subObject = new TransactionTestObject(); subObject.setName("subCommand"); mainObject.setSubObject(subObject); HashMap<String, Object> emEnv = new HashMap<String, Object>(); emEnv.put(COMMAND_ENTITY_MANAGER_FACTORY, cm); emEnv.put(COMMAND_ENTITY_MANAGER, cache); TransactionTestCommand txTestCmd = new TransactionTestCommand(mainObject, subObject, emEnv); commandKSession.execute(txTestCmd); }
public JtaTransactionManager(Object ut, Object tsr, Object tm) { if ( ut instanceof UserTransaction ) { this.ut = ( UserTransaction ) ut; } else { this.ut = ( UserTransaction ) ( (ut != null) ? ut : findUserTransaction() ); } if ( tm instanceof javax.transaction.TransactionManager ) { this.tm = ( javax.transaction.TransactionManager ) tm; } else { this.tm = ( javax.transaction.TransactionManager ) ( (tm != null) ? tm : findTransactionManager( this.ut ) ); } this.tsr = (tsr != null) ? tsr : findTransactionSynchronizationRegistry( this.ut, this.tm ); }
@Override public void afterCompletion(int status) { if (isRollback(status)) { final long currentThreadId = Thread.currentThread().getId(); final boolean isRegistrationThread = currentThreadId == registrationThreadId; if ( ! isRegistrationThread ) { logger.debug("Attempt to unlock from different thread {} while owner is {}, requesting force unlock", currentThreadId, registrationThreadId ); forceUnlock.add(registrationThreadId); return; } } doRelease(); }
protected void release(TransactionManager txm) { try { TransactionManagerHelper.registerTransactionSyncInContainer(txm, new ReleaseLockTransactionSynchronization(Thread.currentThread().getId(), 100, releaseTxKey)); } catch (Throwable e) { logger.debug("Error happened releasing directly by {} due to {}", Thread.currentThread().getName(), e.getMessage()); doRelease(); } }
public TransactionTestCommand(Object mainObject, Object subObject, HashMap<String, Object> env) { this.mainObject = mainObject; this.subObject = subObject; setPersistenceFields(env); }
public static void registerTransactionSynchronization(final Object tsro, final TransactionSynchronization ts) { TransactionSynchronizationRegistry tsr = ( TransactionSynchronizationRegistry ) tsro; tsr.registerInterposedSynchronization( new JtaTransactionSynchronizationAdapter( ts ) ); }
assertEquals(TransactionLockInterceptor.class, internalCommandService.getClass()); internalCommandService = (ChainableRunner) ((TransactionLockInterceptor) internalCommandService).getNext(); assertEquals(OptimisticLockRetryInterceptor.class, internalCommandService.getClass());
protected UserTransaction getUt() { if (this.ut == null) { this.ut = findUserTransaction(); } return ut; }
protected void releaseAfterFailure() { if (forceUnlock.remove(Thread.currentThread().getId())) { logger.debug("Forcibly unlocking as it was requested by a reaper thread (transaction timeout)"); doRelease(); } }
@Override public TransactionManager newTransactionManager() { return new JtaTransactionManager(null, null, null); }
protected void addInterceptors(KieSession ksession) { PersistableRunner runner = (PersistableRunner) ((CommandBasedStatefulKnowledgeSession) ksession).getRunner(); runner.addInterceptor(new OptimisticLockRetryInterceptor()); // even though it's added always TransactionLockInterceptor is by default disabled so won't do anything runner.addInterceptor(new TransactionLockInterceptor(ksession.getEnvironment())); runner.addInterceptor(new ExecutionErrorHandlerInterceptor(ksession.getEnvironment())); }
public TransactionTestCommand(Object mainObject, HashMap<String, Object> env) { this.mainObject = mainObject; this.subObject = null; setPersistenceFields(env); }
public void registerTransactionSynchronization(final TransactionSynchronization ts) { if ( this.tsr != null ) { TransactionSynchronizationRegistryHelper.registerTransactionSynchronization( this.tsr, ts ); } else if ( this.tm != null ) { try { this.tm.getTransaction().registerSynchronization( new JtaTransactionSynchronizationAdapter( ts ) ); } catch ( Exception e ) { // No JTA TransactionManager available - log a warning. logger.warn( "Participating in existing JTA transaction, but no JTA TransactionManager or TransactionSychronizationRegistry available: ", e ); } } else { // No JTA TransactionManager available - log a warning. logger.warn( "Participating in existing JTA transaction, but no JTA TransactionManager or TransactionSychronizationRegistry available: " ); } }
/** * Creates a {@link JtaTransactionManager} instance using any of the {@link javax.transaction.UserTransaction}, * {@link javax.transaction.TransactionSynchronizationRegistry}, and {@link javax.transaction.TransactionManager} * present in {@code env}. * * @param env */ @Override public TransactionManager newTransactionManager(Environment env) { return new JtaTransactionManager( env.get(EnvironmentName.TRANSACTION), env.get(EnvironmentName.TRANSACTION_SYNCHRONIZATION_REGISTRY), env.get(EnvironmentName.TRANSACTION_MANAGER )); } }