Skip to content

Topic messages are not sent when using transacted JmsTemplate in 'TransactionSynchronization.afterCommit' phase [SPR-16270] #20817

@spring-projects-issues

Description

@spring-projects-issues

ofer baranes opened SPR-16270 and commented

On the following scenario, an attempt to send message to a TOPIC using JmsTemplate is not effective (the message is never sent and there is no error):

  1. Open Transaction using spring framework
  2. Register TransactionSynchronization to the active Transaction
  3. On the TransactionSynchronization, implement the 'afterCommit' as below:
  • create JmsTemplate and set it to be 'transacted'
  • send a message to a topic
  1. commit the Transaction

The expectation is that the message would be send and the subscriber would handle it.
On real, the message is never handled by the subscriber. The reason is that the message wasn't truly send.

Other observations:
The expectation is fulfilled and the subscriber gets the message if:
a) Using 'afterCompletion' instead of 'afterCommit',
b) Using none transacted JmsTemplate (on the 'afterCommit')

It appears that Spring determines the existence of an ongoing transaction by checking state

_TransactionSynchronizationManager
public static boolean isSynchronizationActive() {
return synchronizations.get() != null;
}
_

Since the 'synchronizations' thread local is not cleared when executing the 'afterCommit' callback, Spring mistakenly assumes that there is ongoing transaction and hence bounds the JMS operation to the ongoing transaction (instead of commiting it immediately) and since there is no ongoing transaction the JMS operation would never be committed.
(When using 'afterCompletion' it works since the 'synchronizations' thread local was cleared)


Affects: 4.3.11

Issue Links:

Metadata

Metadata

Assignees

Labels

in: messagingIssues in messaging modules (jms, messaging)type: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions