List of usage examples for org.springframework.transaction.interceptor DefaultTransactionAttribute DefaultTransactionAttribute
public DefaultTransactionAttribute(int propagationBehavior)
From source file:org.springframework.test.context.jdbc.DatabaseInitializerTestExecutionListener.java
/** * Execute the SQL scripts configured via the supplied * {@link DatabaseInitializer @DatabaseInitializer} for the given * {@link ExecutionPhase} and {@link TestContext}. * * <p>Special care must be taken in order to properly support the * {@link DatabaseInitializer#requireNewTransaction requireNewTransaction} * flag.//from w ww. j av a 2 s. c o m * * @param databaseInitializer the {@code @DatabaseInitializer} to parse * @param executionPhase the current execution phase * @param testContext the current {@code TestContext} * @param classLevel {@code true} if {@link DatabaseInitializer @DatabaseInitializer} * was declared at the class level */ @SuppressWarnings("serial") private void executeDatabaseInitializer(DatabaseInitializer databaseInitializer, ExecutionPhase executionPhase, TestContext testContext, boolean classLevel) throws Exception { if (logger.isDebugEnabled()) { logger.debug(String.format("Processing %s for execution phase [%s] and test context %s.", databaseInitializer, executionPhase, testContext)); } if (executionPhase != databaseInitializer.executionPhase()) { return; } final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.setSqlScriptEncoding(databaseInitializer.encoding()); populator.setSeparator(databaseInitializer.separator()); populator.setCommentPrefix(databaseInitializer.commentPrefix()); populator.setBlockCommentStartDelimiter(databaseInitializer.blockCommentStartDelimiter()); populator.setBlockCommentEndDelimiter(databaseInitializer.blockCommentEndDelimiter()); populator.setContinueOnError(databaseInitializer.continueOnError()); populator.setIgnoreFailedDrops(databaseInitializer.ignoreFailedDrops()); String[] scripts = getScripts(databaseInitializer, testContext, classLevel); scripts = TestContextResourceUtils.convertToClasspathResourcePaths(testContext.getTestClass(), scripts); populator.setScripts( TestContextResourceUtils.convertToResources(testContext.getApplicationContext(), scripts)); if (logger.isDebugEnabled()) { logger.debug("Executing SQL scripts: " + ObjectUtils.nullSafeToString(scripts)); } final DataSource dataSource = TestContextTransactionUtils.retrieveDataSource(testContext, databaseInitializer.dataSource()); final PlatformTransactionManager transactionManager = TestContextTransactionUtils .retrieveTransactionManager(testContext, databaseInitializer.transactionManager()); int propagation = databaseInitializer.requireNewTransaction() ? TransactionDefinition.PROPAGATION_REQUIRES_NEW : TransactionDefinition.PROPAGATION_REQUIRED; TransactionAttribute transactionAttribute = TestContextTransactionUtils .createDelegatingTransactionAttribute(testContext, new DefaultTransactionAttribute(propagation)); new TransactionTemplate(transactionManager, transactionAttribute) .execute(new TransactionCallbackWithoutResult() { @Override public void doInTransactionWithoutResult(TransactionStatus status) { populator.execute(dataSource); }; }); }
From source file:org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener.java
/** * Execute the SQL scripts configured via the supplied {@link Sql @Sql} * annotation for the given {@link ExecutionPhase} and {@link TestContext}. * <p>Special care must be taken in order to properly support the configured * {@link SqlConfig#transactionMode}./*from ww w . j ava2s .c om*/ * @param sql the {@code @Sql} annotation to parse * @param executionPhase the current execution phase * @param testContext the current {@code TestContext} * @param classLevel {@code true} if {@link Sql @Sql} was declared at the class level */ private void executeSqlScripts(Sql sql, ExecutionPhase executionPhase, TestContext testContext, boolean classLevel) throws Exception { if (executionPhase != sql.executionPhase()) { return; } MergedSqlConfig mergedSqlConfig = new MergedSqlConfig(sql.config(), testContext.getTestClass()); if (logger.isDebugEnabled()) { logger.debug(String.format("Processing %s for execution phase [%s] and test context %s.", mergedSqlConfig, executionPhase, testContext)); } final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.setSqlScriptEncoding(mergedSqlConfig.getEncoding()); populator.setSeparator(mergedSqlConfig.getSeparator()); populator.setCommentPrefix(mergedSqlConfig.getCommentPrefix()); populator.setBlockCommentStartDelimiter(mergedSqlConfig.getBlockCommentStartDelimiter()); populator.setBlockCommentEndDelimiter(mergedSqlConfig.getBlockCommentEndDelimiter()); populator.setContinueOnError(mergedSqlConfig.getErrorMode() == ErrorMode.CONTINUE_ON_ERROR); populator.setIgnoreFailedDrops(mergedSqlConfig.getErrorMode() == ErrorMode.IGNORE_FAILED_DROPS); String[] scripts = getScripts(sql, testContext, classLevel); scripts = TestContextResourceUtils.convertToClasspathResourcePaths(testContext.getTestClass(), scripts); List<Resource> scriptResources = TestContextResourceUtils .convertToResourceList(testContext.getApplicationContext(), scripts); for (String stmt : sql.statements()) { if (StringUtils.hasText(stmt)) { stmt = stmt.trim(); scriptResources.add(new ByteArrayResource(stmt.getBytes(), "from inlined SQL statement: " + stmt)); } } populator.setScripts(scriptResources.toArray(new Resource[scriptResources.size()])); if (logger.isDebugEnabled()) { logger.debug("Executing SQL scripts: " + ObjectUtils.nullSafeToString(scriptResources)); } String dsName = mergedSqlConfig.getDataSource(); String tmName = mergedSqlConfig.getTransactionManager(); DataSource dataSource = TestContextTransactionUtils.retrieveDataSource(testContext, dsName); PlatformTransactionManager txMgr = TestContextTransactionUtils.retrieveTransactionManager(testContext, tmName); boolean newTxRequired = (mergedSqlConfig.getTransactionMode() == TransactionMode.ISOLATED); if (txMgr == null) { Assert.state(!newTxRequired, () -> String.format( "Failed to execute SQL scripts for test context %s: " + "cannot execute SQL scripts using Transaction Mode " + "[%s] without a PlatformTransactionManager.", testContext, TransactionMode.ISOLATED)); Assert.state(dataSource != null, () -> String.format("Failed to execute SQL scripts for test context %s: " + "supply at least a DataSource or PlatformTransactionManager.", testContext)); // Execute scripts directly against the DataSource populator.execute(dataSource); } else { DataSource dataSourceFromTxMgr = getDataSourceFromTransactionManager(txMgr); // Ensure user configured an appropriate DataSource/TransactionManager pair. if (dataSource != null && dataSourceFromTxMgr != null && !dataSource.equals(dataSourceFromTxMgr)) { throw new IllegalStateException(String.format( "Failed to execute SQL scripts for test context %s: " + "the configured DataSource [%s] (named '%s') is not the one associated with " + "transaction manager [%s] (named '%s').", testContext, dataSource.getClass().getName(), dsName, txMgr.getClass().getName(), tmName)); } if (dataSource == null) { dataSource = dataSourceFromTxMgr; Assert.state(dataSource != null, () -> String.format("Failed to execute SQL scripts for " + "test context %s: could not obtain DataSource from transaction manager [%s] (named '%s').", testContext, txMgr.getClass().getName(), tmName)); } final DataSource finalDataSource = dataSource; int propagation = (newTxRequired ? TransactionDefinition.PROPAGATION_REQUIRES_NEW : TransactionDefinition.PROPAGATION_REQUIRED); TransactionAttribute txAttr = TestContextTransactionUtils.createDelegatingTransactionAttribute( testContext, new DefaultTransactionAttribute(propagation)); new TransactionTemplate(txMgr, txAttr).execute(status -> { populator.execute(finalDataSource); return null; }); } }
From source file:se.vgregion.service.innovationsslussen.idea.IdeaServiceImpl.java
@Override public Idea addLike(long companyId, long groupId, long userId, String urlTitle) { TransactionStatus transaction = transactionManager .getTransaction(new DefaultTransactionAttribute(TransactionDefinition.PROPAGATION_REQUIRED)); boolean isIdeaUserLiked = getIsIdeaUserLiked(companyId, groupId, userId, urlTitle); Idea idea = findIdeaByUrlTitle(urlTitle); if (isIdeaUserLiked) { // User already likes the idea return idea; }//from w w w. j a v a 2 s . c o m IdeaUserLike ideaUserLike = new IdeaUserLike(companyId, groupId, userId); ideaUserLike.setIdea(idea); ideaUserLikeRepository.merge(ideaUserLike); ideaUserLikeRepository.flush(); transactionManager.commit(transaction); return ideaRepository.find(idea.getId()); }
From source file:se.vgregion.service.innovationsslussen.idea.IdeaServiceImpl.java
@Override //@Transactional(rollbackFor = BariumException.class) public UpdateFromBariumResult updateFromBarium(Idea idea) throws UpdateIdeaException { // Do the transaction manually since we may run this in a separate thread. TransactionStatus transaction = transactionManager .getTransaction(new DefaultTransactionAttribute(TransactionDefinition.PROPAGATION_REQUIRES_NEW)); try {// ww w .j a v a 2 s. co m UpdateFromBariumResult result = new UpdateFromBariumResult(); result.setOldIdea(find(idea.getId())); result.getOldIdea().getIdeaContentPrivate(); result.getOldIdea().getIdeaContentPublic(); LOGGER.info(" Update from Barium, idea: " + idea.getTitle()); // Idea idea = findIdeaByBariumId(id); final String ideaId = idea.getId(); String oldTitle = idea.getTitle(); // To know whether it has changed, in case we need to update in Barium // Make two calls asynchronously and simultaneously to speed up. Future<IdeaObjectFields> ideaObjectFieldsFuture = bariumService.asyncGetIdeaObjectFields(ideaId); Future<String> bariumIdeaPhase = bariumService.asyncGetIdeaPhaseFuture(ideaId); int bariumPhase = 0; int currentPhase = Integer.parseInt(idea.getPhase() == null ? "0" : idea.getPhase()); IdeaStatus oldStatus = idea.getStatus(); try { if (bariumIdeaPhase.get() == null) { throw new BariumException("bariumIdeaPhase is null"); } bariumPhase = Integer.parseInt(bariumIdeaPhase.get()); populateIdea(ideaObjectFieldsFuture.get(), idea); //Sync files if (idea.getIdeaContentPrivate() != null) { populateFile(idea, idea.getIdeaContentPrivate(), LIFERAY_CLOSED_DOCUMENTS); } if (idea.getIdeaContentPublic() != null) { populateFile(idea, idea.getIdeaContentPublic(), LIFERAY_OPEN_DOCUMENTS); } } catch (InterruptedException e) { throw new UpdateIdeaException(e); } catch (ExecutionException e) { throw new UpdateIdeaException(e); } result.setChanged(!isIdeasTheSame(idea, result.getOldIdea())); final String finalUrlTitle; if (!oldTitle.equals(idea.getTitle())) { finalUrlTitle = generateNewUrlTitle(idea.getTitle()); idea.setUrlTitle(finalUrlTitle); } else { idea.setUrlTitle(result.getOldIdea().getUrlTitle()); finalUrlTitle = null; } if (idea.getOriginalUserId() == null) { idea.setOriginalUserId(0L); } idea = ideaRepository.merge(idea); result.setNewIdea(idea); if (finalUrlTitle != null) { final Idea finalIdea = idea; // We may just as well do this asynchronously since we don't throw anything and don't return anything // from // here. executor.submit(new Runnable() { @Override public void run() { // We need to update the ideaSiteLink in Barium. String ideaSiteLink = generateIdeaSiteLink(schemeServerNameUrl, finalUrlTitle); try { bariumService.updateIdea(finalIdea.getId(), "siteLank", ideaSiteLink); } catch (BariumException e) { LOGGER.error("Failed to update idea " + finalIdea.getId() + " with new site link: " + ideaSiteLink, e); } } }); } if (currentPhase != bariumPhase) { idea.setPhase("" + (bariumPhase)); result.setChanged(true); } // Add auto-comments to the idea. idea = generateAutoComments(idea, oldStatus, currentPhase, bariumPhase); // Sync comments count idea.setCommentsCount(getPrivateCommentsCount(idea)); idea = ideaRepository.merge(idea); // Sync last comment date List<CommentItemVO> privateComments = getComments(idea.getIdeaContentPrivate()); if (privateComments.size() > 0) { Collections.sort(privateComments, new Comparator<CommentItemVO>() { @Override public int compare(CommentItemVO o1, CommentItemVO o2) { return -o1.getCreateDate().compareTo(o2.getCreateDate()); } }); idea.setLastPrivateCommentDate(privateComments.get(0).getCreateDate()); } if (transaction.isNewTransaction()) { transactionManager.commit(transaction); } return result; } catch (BariumException be) { transactionManager.rollback(transaction); LOGGER.warn(be.getMessage()); } finally { if (!transaction.isCompleted()) { //If this happens, a runtimeexception has likley occurred. transactionManager.rollback(transaction); LOGGER.warn("Rolledback transaction because of likely RunTimeException"); } } return null; }
From source file:se.vgregion.service.innovationsslussen.idea.IdeaServiceImpl.java
private Idea upgradeIfOldVersion(Idea idea) { // Upgrade potentially old ideas without the hidden attribute set if (idea.getHidden() == null) { idea.setHidden(false);//from www .j ava 2 s .c o m TransactionStatus transaction = null; try { // Do the transaction manually since we may run this in a separate thread. transaction = transactionManager.getTransaction( new DefaultTransactionAttribute(TransactionDefinition.PROPAGATION_REQUIRED)); // Merge here so we don't get unexpected consequences later when we will compare to decide whether // the idea has changed. This should not cause a change. ideaRepository.merge(idea); transactionManager.commit(transaction); } catch (RuntimeException e) { transactionManager.rollback(transaction); } } return idea; }
From source file:uk.ac.ebi.phenotype.solr.indexer.AbstractIndexer.java
protected void initialiseHibernateSession(ApplicationContext applicationContext) { // allow hibernate session to stay open the whole execution PlatformTransactionManager transactionManager = (PlatformTransactionManager) applicationContext .getBean("transactionManager"); DefaultTransactionAttribute transactionAttribute = new DefaultTransactionAttribute( TransactionDefinition.PROPAGATION_REQUIRED); transactionAttribute.setIsolationLevel(TransactionDefinition.ISOLATION_SERIALIZABLE); transactionManager.getTransaction(transactionAttribute); }