List of usage examples for org.springframework.transaction TransactionDefinition PROPAGATION_REQUIRES_NEW
int PROPAGATION_REQUIRES_NEW
To view the source code for org.springframework.transaction TransactionDefinition PROPAGATION_REQUIRES_NEW.
Click Source Link
From source file:com.newmainsoftech.spray.slingong.datastore.Slim3PlatformTransactionManager.java
@Override protected void doBegin(Object transaction, TransactionDefinition definition) throws TransactionException { // Validation on transaction argument ----------------------------------------------------- /* transaction Object should be either * null// w w w. j av a 2 s.co m * either TransactionDefinition.PROPAGATION_REQUIRED, * TransactionDefinition.PROPAGATION_REQUIRES_NEW or TransactionDefinition.PROPAGATION_NESTED * active GlobalTransactoin object (one before current one) * either TransactionDefinition.PROPAGATION_REQUIRES_NEW or * TransactionDefinition.PROPAGATION_NESTED * if TransactionDefinition.PROPAGATION_NESTED case, then * useSavepointForNestedTransaction method returns false */ GlobalTransaction gtx = (GlobalTransaction) transaction; Set<GlobalTransactionState> gtxStateSet = getGlobalTransactionStates(gtx); GlobalTransaction currentGtx = Datastore.getCurrentGlobalTransaction(); Set<GlobalTransactionState> currentGtxStateSet = getGlobalTransactionStates(currentGtx); if (!currentGtxStateSet.contains(GlobalTransactionState.ActiveGlobalTransaction)) { throw new IllegalTransactionStateException(String.format( "Unexpected system state: getCurrentGlobalTransaction method of Slim3 Datastore " + "returned inactive GlobalTransaction instance (ID:%3$s). Expected it to return " + "active GlobalTransaction instance as new GlobalTransaction instance has begun " + "by newTransactionStatus method.", (currentGtxStateSet.contains(GlobalTransactionState.GlobalTransactionInstance) ? currentGtx.getId() : "null"))); } String gtxIdStr = (gtxStateSet.contains(GlobalTransactionState.GlobalTransactionInstance) ? gtx.getId() : "null"); if (gtxIdStr.equals(currentGtx.getId())) { throw new IllegalTransactionStateException(String.format( "Unexpected system state: the transaction Object argument refers to current " + "active GlobalTransaction instance (ID:%1$s). Expected it not to refer to " + "current active GlobalTransaction instance rather refer to the GlobalTransaction " + "instance available before newTransaction method execution or hold null value.", gtxIdStr)); } if (!gtxStateSet.contains(GlobalTransactionState.GlobalTransactionInstance)) { switch (definition.getPropagationBehavior()) { case TransactionDefinition.PROPAGATION_REQUIRED: case TransactionDefinition.PROPAGATION_REQUIRES_NEW: case TransactionDefinition.PROPAGATION_NESTED: break; default: throw new IllegalTransactionStateException(String.format( "Unexpected system state: found that the %1$s propagation behavior (%2$d) was " + "specified when the transaction Object argument holds null value. Expected " + "propagation behavior to be either PROPAGATION_REQUIRED (%3$d), " + "PROPAGATION_REQUIRES_NEW (%4$d) or PROPAGATION_NESTED (%5$d) when the " + "transaction Object argument holds null value.", getPropagationBehaviorStr(definition.getPropagationBehavior()), definition.getPropagationBehavior(), TransactionDefinition.PROPAGATION_REQUIRED, TransactionDefinition.PROPAGATION_REQUIRES_NEW, TransactionDefinition.PROPAGATION_NESTED)); } // switch } else if (gtxStateSet.contains(GlobalTransactionState.ActiveGlobalTransaction)) { switch (definition.getPropagationBehavior()) { case TransactionDefinition.PROPAGATION_REQUIRES_NEW: case TransactionDefinition.PROPAGATION_NESTED: break; default: throw new IllegalTransactionStateException(String.format( "Unexpected system state: found that the %1$s propagation behavior (%2$d) was " + "specified when the transaction Object argument holds active " + "GlobalTransaction instance (ID:%3$s). Expected propagation behavior to be " + "either PROPAGATION_REQUIRES_NEW (%4$d) or PROPAGATION_NESTED (%5$d) when " + "the transaction Object argument holds active GlobalTransaction instance.", getPropagationBehaviorStr(definition.getPropagationBehavior()), definition.getPropagationBehavior(), gtx.getId(), TransactionDefinition.PROPAGATION_REQUIRES_NEW, TransactionDefinition.PROPAGATION_NESTED)); } // switch } else { throw new IllegalTransactionStateException( String.format("Unexpected system state: the transaction Object argument holds inactive " + "GlobalTransaction instance (ID:%1$s). Expected it to hold either null or " + "active GlobalTransaction instance.", gtx.getId())); } // ---------------------------------------------------------------------------------------- }
From source file:com._4dconcept.springframework.data.marklogic.datasource.DatabaseConnectorJtaTransactionTest.java
private void doTestJtaTransactionWithPropagationRequiresNewAndBeginException(boolean suspendException, final boolean openOuterConnection, final boolean useTransactionAwareContentSource) throws Exception { given(userTransaction.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, Status.STATUS_ACTIVE, Status.STATUS_ACTIVE); if (suspendException) { given(transactionManager.suspend()).willThrow(new SystemException()); } else {// ww w .ja va 2s . c om given(transactionManager.suspend()).willReturn(transaction); willThrow(new SystemException()).given(userTransaction).begin(); } given(session.getTransactionMode()).willReturn(Session.TransactionMode.QUERY); final ContentSource dsToUse = useTransactionAwareContentSource ? new TransactionAwareContentSourceProxy(contentSource) : contentSource; if (dsToUse instanceof TransactionAwareContentSourceProxy) { ((TransactionAwareContentSourceProxy) dsToUse).setReobtainTransactionalSessions(true); } JtaTransactionManager ptm = new JtaTransactionManager(userTransaction, transactionManager); final TransactionTemplate tt = new TransactionTemplate(ptm); tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(dsToUse)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); try { tt.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) throws RuntimeException { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(dsToUse)); assertTrue("JTA synchronizations active", TransactionSynchronizationManager.isSynchronizationActive()); assertTrue("Is new transaction", status.isNewTransaction()); Session c = ContentSourceUtils.getSession(dsToUse); assertTrue("Has thread session", TransactionSynchronizationManager.hasResource(dsToUse)); c.getTransactionMode(); ContentSourceUtils.releaseSession(c, dsToUse); c = ContentSourceUtils.getSession(dsToUse); assertTrue("Has thread session", TransactionSynchronizationManager.hasResource(dsToUse)); if (!openOuterConnection) { ContentSourceUtils.releaseSession(c, dsToUse); } try { tt.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) throws RuntimeException { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(dsToUse)); assertTrue("JTA synchronizations active", TransactionSynchronizationManager.isSynchronizationActive()); assertTrue("Is new transaction", status.isNewTransaction()); Session c = ContentSourceUtils.getSession(dsToUse); assertTrue("Has thread session", TransactionSynchronizationManager.hasResource(dsToUse)); ContentSourceUtils.releaseSession(c, dsToUse); c = ContentSourceUtils.getSession(dsToUse); assertTrue("Has thread session", TransactionSynchronizationManager.hasResource(dsToUse)); ContentSourceUtils.releaseSession(c, dsToUse); } }); } finally { if (openOuterConnection) { c.getTransactionMode(); ContentSourceUtils.releaseSession(c, dsToUse); } } } }); fail("Should have thrown TransactionException"); } catch (TransactionException ex) { // expected } assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(dsToUse)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); verify(userTransaction).begin(); if (suspendException) { verify(userTransaction).rollback(); } if (suspendException) { verify(session, atLeastOnce()).close(); } else { verify(session, never()).close(); } }
From source file:com.newmainsoftech.spray.slingong.datastore.Slim3PlatformTransactionManagerTest.java
protected void verifyNotGetNewTransactionProcess(boolean existingTransactionFlag, int isolationLevel, int propagationBehavior, int timeOutSec, boolean debugEnabled) { // public final TransactionStatus getTransaction(TransactionDefinition definition) mockedSlim3TxMangerInOrder.verify(slim3PlatformTransactionManager, Mockito.times(1)).doGetTransaction(); ArgumentCaptor<GlobalTransaction> globalTransactionArgumentCaptor = ArgumentCaptor .forClass(GlobalTransaction.class); mockedSlim3TxMangerInOrder.verify(slim3PlatformTransactionManager, Mockito.times(1)) .getGlobalTransactionStates(globalTransactionArgumentCaptor.capture()); GlobalTransaction gtx = globalTransactionArgumentCaptor.getValue(); if (existingTransactionFlag) { Assert.assertTrue(gtx instanceof GlobalTransaction); } else {// ww w. j a va 2s . co m Assert.assertNull(gtx); } ArgumentCaptor<Object> objectArgumentCaptor = ArgumentCaptor.forClass(Object.class); mockedSlim3TxMangerInOrder.verify(slim3PlatformTransactionManager, Mockito.times(1)) .isExistingTransaction(Mockito.eq(gtx)); mockedSlim3TxMangerInOrder.verify(slim3PlatformTransactionManager, Mockito.times(1)) .getGlobalTransactionStates(Mockito.eq(gtx)); if (existingTransactionFlag) { Assert.fail("Wrong usage of this test method; should be used for the case that " + "no GlobalTransaction is available"); /* The below codes are for the time to extend this test method to handle (active) GlobalTransaction is available. // private TransactionStatus handleExistingTransaction( TransactionDefinition definition, Object transaction, boolean debugEnabled) switch( propagationBehavior) { case TransactionAttribute.PROPAGATION_NEVER: // Do nothing since IllegalTransactionStateException should have been thrown at // AbstractPlatformTransactionManager.handleExistingTransaction method. break; case TransactionAttribute.PROPAGATION_NOT_SUPPORTED: case TransactionDefinition.PROPAGATION_REQUIRES_NEW: // Do nothing since, in this scenario, TransactionSuspensionNotSupportedException // should have been thrown at AbstractPlatformTransactionManager.doSuspend method // by following logic flow: // protected final SuspendedResourcesHolder suspend(Object transaction) // - TransactionSynchronizationManager.isSynchronizationActive() should always be false // due to Slim3PlatformTransactionManager does not support transaction synchronization currently. // - transaction argument to suspend method should not be null due to // value of existingTransactionFlag argument to this verifyNotGetNewTransactionProcess method. // protected Object doSuspend(Object transaction) // throws TransactionSuspensionNotSupportedException break; case TransactionDefinition.PROPAGATION_NESTED: // Do nothing since, in this scenario, NestedTransactionNotSupportedException should // have been thrown at AbstractPlatformTransactionManager.handleExistingTransaction // by following logic below // public final boolean isNestedTransactionAllowed() // Should return false because the use case of this verifyNotGetNewTransactionProcess // method is for not getting new transaction. break; default: // public final boolean isValidateExistingTransaction() // IllegalTransactionStateException can be thrown depends on value of isolation // public final int getTransactionSynchronization() // protected final DefaultTransactionStatus prepareTransactionStatus( TransactionDefinition definition, Object transaction, boolean newTransaction, boolean newSynchronization, boolean debug, Object suspendedResources) ArgumentCaptor<TransactionDefinition> transactionDefinitionArgumentCaptor = ArgumentCaptor.forClass( TransactionDefinition.class); ArgumentCaptor<Boolean> booleanArgumentCaptor = ArgumentCaptor.forClass( Boolean.class); mockedSlim3TxMangerInOrder.verify( slim3PlatformTransactionManager, Mockito.times( 1)) .newTransactionStatus( transactionDefinitionArgumentCaptor.capture(), // TransactionDefinition definition Mockito.eq( gtx), // Object transaction Mockito.eq( false), Mockito.eq( false), // boolean newTransaction, boolean newSynchronization Mockito.eq( debugEnabled), Mockito.eq( null) //boolean debug, Object suspendedResources ); TransactionDefinition transactionDefinition = transactionDefinitionArgumentCaptor.getValue(); Assert.assertEquals( isolationLevel, transactionDefinition.getIsolationLevel()); Assert.assertEquals( propagationBehavior, transactionDefinition.getPropagationBehavior()); Assert.assertEquals( timeOutSec, transactionDefinition.getTimeout()); // protected void prepareSynchronization(DefaultTransactionStatus status, TransactionDefinition definition) break; } // switch */ } else { switch (propagationBehavior) { case TransactionDefinition.PROPAGATION_REQUIRED: case TransactionDefinition.PROPAGATION_REQUIRES_NEW: case TransactionDefinition.PROPAGATION_NESTED: Assert.fail("Wrong usage of this test method; value of propagationBehavior argument should be " + "one among the nexts: PROPAGATION_SUPPORTS, PROPAGATION_NOT_SUPPORTED, " + "and PROPAGATION_NEVER"); /* The below codes are for the time to extend this test method to handle (active) GlobalTransaction is available. // protected final SuspendedResourcesHolder suspend(Object transaction) // suspend method should return null due to the following logic flow: // - TransactionSynchronizationManager.isSynchronizationActive() should always be false // due to Slim3PlatformTransactionManager does not support transaction synchronization currently. // - transaction argument to suspend method should be null due to // value of existingTransactionFlag argument to this verifyNotGetNewTransactionProcess method. // public final int getTransactionSynchronization() ArgumentCaptor<TransactionDefinition> transactionDefinitionArgumentCaptor = ArgumentCaptor.forClass( TransactionDefinition.class); ArgumentCaptor<Boolean> booleanArgumentCaptor = ArgumentCaptor.forClass( Boolean.class); mockedSlim3TxMangerInOrder.verify( slim3PlatformTransactionManager, Mockito.times( 1)) .newTransactionStatus( transactionDefinitionArgumentCaptor.capture(), // TransactionDefinition definition Mockito.eq( null), // Object transaction Mockito.eq( true), Mockito.eq( false), // boolean newTransaction, boolean newSynchronization Mockito.eq( debugEnabled), Mockito.eq( null) //boolean debug, Object suspendedResources ); TransactionDefinition transactionDefinition = transactionDefinitionArgumentCaptor.getValue(); Assert.assertEquals( isolationLevel, transactionDefinition.getIsolationLevel()); Assert.assertEquals( propagationBehavior, transactionDefinition.getPropagationBehavior()); Assert.assertEquals( timeOutSec, transactionDefinition.getTimeout()); // protected void doBegin( Object transaction, TransactionDefinition definition) // protected void prepareSynchronization(DefaultTransactionStatus status, TransactionDefinition definition) */ break; default: // Case of creating "empty" transaction: no actual transaction, but potentially synchronization. // public final int getTransactionSynchronization() // protected final DefaultTransactionStatus prepareTransactionStatus( TransactionDefinition definition, Object transaction, boolean newTransaction, boolean newSynchronization, boolean debug, Object suspendedResources) ArgumentCaptor<TransactionDefinition> transactionDefinitionArgumentCaptor = ArgumentCaptor .forClass(TransactionDefinition.class); final boolean newSynchronization = true; // value true is from result of comparison operation of // getTransactionSynchronization() == SYNCHRONIZATION_ALWAYS mockedSlim3TxMangerInOrder.verify(slim3PlatformTransactionManager, Mockito.times(1)) .newTransactionStatus(transactionDefinitionArgumentCaptor.capture(), Mockito.eq(null), Mockito.eq(true), Mockito.eq(newSynchronization), Mockito.eq(debugEnabled), Mockito.eq(null)); TransactionDefinition transactionDefinition = transactionDefinitionArgumentCaptor.getValue(); Assert.assertEquals(isolationLevel, transactionDefinition.getIsolationLevel()); Assert.assertEquals(propagationBehavior, transactionDefinition.getPropagationBehavior()); Assert.assertEquals(timeOutSec, transactionDefinition.getTimeout()); mockedSlim3TxMangerInOrder.verify(slim3PlatformTransactionManager, Mockito.times(1)) .validateIsolationLevel(Mockito.eq(isolationLevel)); mockedSlim3TxMangerInOrder.verify(slim3PlatformTransactionManager, Mockito.times(1)) .getGlobalTransactionStates(null); // protected void prepareSynchronization(DefaultTransactionStatus status, TransactionDefinition definition) break; } // switch } }
From source file:com.jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.HibernateRepositoryCache.java
protected CachedItem getCachedItem(ExecutionContext context, FileResource resource, RepositoryCacheableItem cacheableItem) { if (log.isDebugEnabled()) { log.debug("Looking in repository cache \"" + cacheableItem.getCacheName() + "\" for resource \"" + resource.getURIString() + "\", version " + resource.getVersion() + "\", version date " + resource.getCreationDate()); }//from ww w .j a v a 2s. co m LockHandle lock = lock(resource, cacheableItem); //Because of bug #25373 we need to manually manipulate with transaction: //open it AFTER thread acquires lock //and commit BEFORE thread releases the lock. TransactionStatus transaction = null; try { transaction = transactionManager.getTransaction( new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRES_NEW)); CachedItem cachedItem = getCachedItem(resource.getURIString(), cacheableItem, true); if (cachedItem == null || cachedItem.getVersion() < resource.getVersion() || cachedItem.getVersionDate() == null || cachedItem.getVersionDate().before(resource.getCreationDate())) { if (resource.isReference()) { cachedItem = saveRefence(context, resource, cachedItem, cacheableItem); } else { cachedItem = saveData(context, resource, cachedItem, cacheableItem); } } else if (resource.isReference()) { //load the reference to force updates FileResource ref = (FileResource) repository.getResource(context, resource.getReferenceURI()); CachedItem refItem = getCachedItem(context, ref, cacheableItem); if (!refItem.equals(cachedItem.getReference())) { updateReference(cachedItem, refItem); } } transactionManager.commit(transaction); return cachedItem; } finally { if (transaction != null && !transaction.isCompleted()) { try { transactionManager.rollback(transaction); } catch (Exception e) { // suppress exception throwing log.error(e.getMessage(), e); } } unlock(lock); } }
From source file:com.jaspersoft.jasperserver.api.metadata.user.service.impl.RoleManagerServiceImpl.java
public PaginatedOperationResult getUsersWithoutRole(final ExecutionContext context, final String roleName, final String userName, Set assignedUserNameSet, Set unassignedUserNameSet, int firstResult, int maxResults) { PaginatedOperationResult result;/*www. j a va2 s . c o m*/ TransactionStatus transaction = null; try { // start transaction transaction = transactionManager.getTransaction( new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRES_NEW)); userService.assignUsers(context, roleName, assignedUserNameSet); userService.unassignUsers(context, roleName, unassignedUserNameSet); getHibernateTemplate().flush(); result = PaginationHelper.paginatedGetOperationResult(firstResult, maxResults, new PaginationHelper.JasperService() { public List getResultList(int firstResult, int maxResults) { return userService.getUsersWithoutRole(context, roleName, userName, firstResult, maxResults); } public int getResultCount() { return userService.getUsersCountWithoutRole(context, roleName, userName); } }); } finally { if (transaction != null && !transaction.isCompleted()) { try { // rollback transactionManager.rollback(transaction); } catch (Exception e) { // suppress exception } } } return result; }
From source file:com.jaspersoft.jasperserver.api.metadata.user.service.impl.RoleManagerServiceImpl.java
public PaginatedOperationResult getUsersWithRole(final ExecutionContext context, final String roleName, final String userName, Set assignedUserNameSet, Set unassignedUserNameSet, int firstResult, int maxResults) { PaginatedOperationResult result;//from w w w . j a va2 s . co m TransactionStatus transaction = null; try { // start transaction transaction = transactionManager.getTransaction( new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRES_NEW)); userService.assignUsers(context, roleName, assignedUserNameSet); userService.unassignUsers(context, roleName, unassignedUserNameSet); getHibernateTemplate().flush(); result = PaginationHelper.paginatedGetOperationResult(firstResult, maxResults, new PaginationHelper.JasperService() { public List getResultList(int firstResult, int maxResults) { return userService.getUsersWithRole(context, roleName, userName, firstResult, maxResults); } public int getResultCount() { return userService.getUsersCountWithRole(context, roleName, userName); } }); } finally { if (transaction != null && !transaction.isCompleted()) { try { // rollback transactionManager.rollback(transaction); } catch (Exception e) { // suppress exception } } } return result; }
From source file:com.netsteadfast.greenstep.bsc.util.MeasureDataCalendarUtils.java
/** * method ? Expression , ??LogicService ? Transaction * // w w w . java2 s .c o m * @param kpiId * @param date * @param frequency * @param orgaId * @param emplId * @return * @throws ServiceException * @throws Exception */ @SuppressWarnings("rawtypes") public static MeasureDataVO findMeasureData(String kpiId, String date, String frequency, String orgaId, String emplId) throws ServiceException, Exception { transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); transactionTemplate.setIsolationLevel(TransactionDefinition.ISOLATION_DEFAULT); transactionTemplate.setReadOnly(true); MeasureDataVO measureData = null; try { measureData = (MeasureDataVO) transactionTemplate.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { MeasureDataVO value = new MeasureDataVO(); value.setKpiId(kpiId); value.setDate(date); value.setFrequency(frequency); value.setOrgId(orgaId); value.setEmpId(emplId); try { DefaultResult<MeasureDataVO> mdResult = measureDataService.findByUK(value); if (mdResult.getValue() != null) { value = mdResult.getValue(); } else { value = null; } } catch (Exception e) { e.printStackTrace(); value = null; } return value; } }); } catch (Exception e) { throw e; } return measureData; }
From source file:nl.nn.adapterframework.core.PipeLine.java
public boolean isTransacted() { // return transacted; int txAtt = getTransactionAttributeNum(); return txAtt == TransactionDefinition.PROPAGATION_REQUIRED || txAtt == TransactionDefinition.PROPAGATION_REQUIRES_NEW || txAtt == TransactionDefinition.PROPAGATION_MANDATORY; }
From source file:nl.nn.adapterframework.receivers.PullingListenerContainer.java
public void configure() { if (receiver.getNumThreadsPolling() > 0 && receiver.getNumThreadsPolling() < receiver.getNumThreads()) { pollToken = new Semaphore(receiver.getNumThreadsPolling()); }//from w ww . j ava2 s .c o m processToken = new Semaphore(receiver.getNumThreads()); maxThreadCount = receiver.getNumThreads(); if (receiver.isTransacted()) { DefaultTransactionDefinition txDef = new DefaultTransactionDefinition( TransactionDefinition.PROPAGATION_REQUIRES_NEW); if (receiver.getTransactionTimeout() > 0) { txDef.setTimeout(receiver.getTransactionTimeout()); } txNew = txDef; } }