diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java index 08a800e254d..839412a0109 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java @@ -28,6 +28,7 @@ import org.springframework.transaction.support.AbstractPlatformTransactionManage import org.springframework.transaction.support.DefaultTransactionStatus; import org.springframework.transaction.support.ResourceTransactionManager; import org.springframework.transaction.support.TransactionSynchronizationManager; +import org.springframework.transaction.support.TransactionSynchronizationUtils; /** * {@link org.springframework.transaction.PlatformTransactionManager} @@ -87,6 +88,12 @@ import org.springframework.transaction.support.TransactionSynchronizationManager * DBCP connection pool). Switching between this local strategy and a JTA * environment is just a matter of configuration! * + *

As of 4.3.4, this transaction manager triggers flush callbacks on registered + * transaction synchronizations (if synchronization is generally active), assuming + * resources operating on the underlying JDBC {@code Connection}. This allows for + * setup analogous to {@code JtaTransactionManager}, in particular with respect to + * lazily registered ORM resources (e.g. a Hibernate {@code Session}). + * * @author Juergen Hoeller * @since 02.05.2003 * @see #setNestedTransactionAllowed @@ -368,6 +375,13 @@ public class DataSourceTransactionManager extends AbstractPlatformTransactionMan public boolean isRollbackOnly() { return getConnectionHolder().isRollbackOnly(); } + + @Override + public void flush() { + if (TransactionSynchronizationManager.isSynchronizationActive()) { + TransactionSynchronizationUtils.triggerFlush(); + } + } } } diff --git a/spring-tx/src/main/java/org/springframework/transaction/TransactionStatus.java b/spring-tx/src/main/java/org/springframework/transaction/TransactionStatus.java index 9a3e47df762..54112784ca5 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/TransactionStatus.java +++ b/spring-tx/src/main/java/org/springframework/transaction/TransactionStatus.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -80,6 +80,10 @@ public interface TransactionStatus extends SavepointManager, Flushable { /** * Flush the underlying session to the datastore, if applicable: * for example, all affected Hibernate/JPA sessions. + *

This is effectively just a hint and may be a no-op if the underlying + * transaction manager does not have a flush concept. A flush signal may + * get applied to the primary resource or to transaction synchronizations, + * depending on the underlying resource. */ @Override void flush();