diff --git a/org.springframework.transaction/src/main/java/org/springframework/transaction/support/TransactionSynchronizationUtils.java b/org.springframework.transaction/src/main/java/org/springframework/transaction/support/TransactionSynchronizationUtils.java index e44c3c255f7..4ccd5fd9730 100644 --- a/org.springframework.transaction/src/main/java/org/springframework/transaction/support/TransactionSynchronizationUtils.java +++ b/org.springframework.transaction/src/main/java/org/springframework/transaction/support/TransactionSynchronizationUtils.java @@ -23,6 +23,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.core.InfrastructureProxy; import org.springframework.util.Assert; +import org.springframework.aop.scope.ScopedObject; /** * Utility methods for triggering specific {@link TransactionSynchronization} @@ -55,7 +56,13 @@ public abstract class TransactionSynchronizationUtils { */ static Object unwrapResourceIfNecessary(Object resource) { Assert.notNull(resource, "Resource must not be null"); - return (resource instanceof InfrastructureProxy ? ((InfrastructureProxy) resource).getWrappedObject() : resource); + Object resourceRef = resource; + if (resource instanceof ScopedObject) { + // First unwrap a scoped proxy. + resourceRef = ((ScopedObject) resource).getTargetObject(); + } + // Now unwrap infrastructure proxy + return (resourceRef instanceof InfrastructureProxy ? ((InfrastructureProxy) resourceRef).getWrappedObject() : resourceRef); }