From 19b080b73f3d4ae78fc2aae31ca8782b573beafc Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 26 Nov 2025 15:06:22 +0100 Subject: [PATCH] Clarify JMS sessionTransacted flag for local versus global transaction Closes gh-35897 (cherry picked from commit 9d4abb63d8151265f96449a625810f4b7390847a) --- .../org/springframework/jms/support/JmsAccessor.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java b/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java index 57b2e554b68..4927bd74d55 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java @@ -102,12 +102,6 @@ public abstract class JmsAccessor implements InitializingBean { /** * Set the transaction mode that is used when creating a JMS {@link Session}. * Default is "false". - *

Note that within a JTA transaction, the parameters passed to - * {@code create(Queue/Topic)Session(boolean transacted, int acknowledgeMode)} - * method are not taken into account. Depending on the Jakarta EE transaction context, - * the container makes its own decisions on these values. Analogously, these - * parameters are not taken into account within a locally managed transaction - * either, since the accessor operates on an existing JMS Session in this case. *

Setting this flag to "true" will use a short local JMS transaction * when running outside a managed transaction, and a synchronized local * JMS transaction in case of a managed transaction (other than an XA @@ -115,6 +109,11 @@ public abstract class JmsAccessor implements InitializingBean { * transaction being managed alongside the main transaction (which might * be a native JDBC transaction), with the JMS transaction committing * right after the main transaction. + *

Note that this flag is meant to remain at its default value "false" for + * participating in a global JTA/XA transaction in a Jakarta EE environment. + * While the server may leniently ignore local Session-level transaction + * management in such a scenario, it may also throw unexpected exceptions + * on commit/rollback in case of this Session-level flag being set to "true". * @see jakarta.jms.Connection#createSession(boolean, int) */ public void setSessionTransacted(boolean sessionTransacted) {