Trigger late commit in JmsResourceSynchronization.afterCompletion if necessary
Closes gh-20817
This commit is contained in:
@@ -419,6 +419,8 @@ public abstract class ConnectionFactoryUtils {
|
||||
|
||||
private final boolean transacted;
|
||||
|
||||
private boolean commitProcessed;
|
||||
|
||||
public JmsResourceSynchronization(JmsResourceHolder resourceHolder, Object resourceKey, boolean transacted) {
|
||||
super(resourceHolder, resourceKey);
|
||||
this.transacted = transacted;
|
||||
@@ -431,6 +433,7 @@ public abstract class ConnectionFactoryUtils {
|
||||
|
||||
@Override
|
||||
protected void processResourceAfterCommit(JmsResourceHolder resourceHolder) {
|
||||
this.commitProcessed = true;
|
||||
try {
|
||||
resourceHolder.commitAll();
|
||||
}
|
||||
@@ -439,6 +442,16 @@ public abstract class ConnectionFactoryUtils {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterCompletion(int status) {
|
||||
if (status == STATUS_COMMITTED && this.transacted && !this.commitProcessed) {
|
||||
// JmsResourceSynchronization registered in afterCommit phase of other synchronization
|
||||
// -> late local JMS transaction commit here, otherwise it would silently get dropped.
|
||||
afterCommit();
|
||||
}
|
||||
super.afterCompletion(status);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void releaseResource(JmsResourceHolder resourceHolder, Object resourceKey) {
|
||||
resourceHolder.closeAll();
|
||||
|
||||
Reference in New Issue
Block a user