Trigger late commit in JmsResourceSynchronization.afterCompletion if necessary

Closes gh-20817
This commit is contained in:
Juergen Hoeller
2023-07-14 11:50:31 +02:00
parent d24c131130
commit 6957ac5324

View File

@@ -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();