Validation of existing transactions with transaction synchronization turned off not working (?) [SPR-15016] #19583
Labels
Comments
Juergen Hoeller commented I'm afraid this is by design: Without synchronization active, outer vs inner transaction scopes only communicate via the resources involved, not seeing each other's transaction definition metadata. Validating Spring transaction definitions across demarcation levels is indeed a feature that only comes in through the transaction synchronization arrangement. Also, we're only really using it for validation purposes around transaction hints here: The transaction read-only flag was never meant to be a hard constraint but rather just a soft hint for runtime optimizations in a read-only scenario. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Vojtech Toman opened SPR-15016 and commented
In out project, we have our own transaction manager implementation. In the test suite, we have a test that checks the various cases in transaction propagation, including the following (requesting a RW transaction while the current transaction is RO):
As expected, the call to
b.readWrite()
fails with anIllegalTransactionStateException
. However, when I disable transaction synchronization in our transaction manager, I don't get an exception any more. In the code ofAbstractPlatformTransactionManager.handleExistingtransaction()
, I see that the check for this case usesTransactionSynchronizationManager.isCurrentTransactionReadOnly()
which, obviously, returnsfalse
if transaction synchronization is turned off. I believe this is a bug. (It's possible that this follows from the semantics of transaction synchronization in which case I would be grateful if somebody could explain me the reasoning behind this).Affects: 4.3.4
Issue Links:
The text was updated successfully, but these errors were encountered: