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):
class A {
@Autowired
private B b;
@Transactional(readOnly = true)
public void readOnly() {
b.readWrite();
}
}
class B {
@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public void readWrite() {
...
}
}
As expected, the call to b.readWrite() fails with an IllegalTransactionStateException. However, when I disable transaction synchronization in our transaction manager, I don't get an exception any more. In the code of AbstractPlatformTransactionManager.handleExistingtransaction(), I see that the check for this case uses TransactionSynchronizationManager.isCurrentTransactionReadOnly() which, obviously, returns false 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:
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, returnsfalseif 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: