Ex­tremeTrans­ac­tions 6.0.117
XA time­out hard­en­ing

| | un­tagged

Two time­out-cor­rect­ness im­prove­ments for XA en­list­ment: an opt-in guard that re­fus­es to en­list a re­source on a trans­ac­tion that has al­ready timed out or been marked roll­back-only — in­ter­rupt­ing it be­fore XA START in­stead of fail­ing lat­er at com­mit — and a fix so an al­ready-timed-out co­or­di­na­tor no longer re­sets an en­list­ed re­source's own time­out to the back­end de­fault (which held XA re­sources longer than need­ed). Plus, you can now skip the lega­cy Or­a­cle AQ forceCon­nec­tionIn­toXaMode workaround on spec-com­pli­ant JMS providers and on Or­a­cle AQ 19c and lat­er.

Bug227307
Atomikos JTA time­out not im­me­di­ate­ly in­ter­rupt­ing on­go­ing trans­ac­tions

De­scrip­tion

Atomikos now re­fus­es to en­list a re­source on a trans­ac­tion that has al­ready timed out or been marked roll­back-only, in­ter­rupt­ing a doomed trans­ac­tion ear­ly rather than let­ting it pro­ceed and fail lat­er at com­mit. This be­hav­iour is opt-in and off by de­fault.

Tech­ni­cal de­tails

En­able it by adding com.atom­ikos.icatch.fea­ture.227307=true to your jta.prop­er­ties (off by de­fault in this re­lease for back­ward com­pat­i­bil­i­ty). With the flag on, the re­fusal hap­pens be­fore XA START, so no XA branch is ever start­ed: the doomed trans­ac­tion rolls back through the nor­mal path and the bor­rowed pooled con­nec­tion or JMS ses­sion re­turns to the pool via the man­aged life­cy­cle (no leak). On the JDBC side the re­fusal sur­faces to your code as an AtomikosSQLEx­cep­tion (a nor­mal SQLEx­cep­tion); on the JMS side as a JMSEx­cep­tion. The check is a cheap time­out/state test done be­fore XA START — for a doomed trans­ac­tion it ac­tu­al­ly saves the wast­ed round-trip to the back­end. Be­cause a flow that pre­vi­ous­ly re­lied on the late (com­mit-time) fail­ure will now fail fast at en­list­ment, we ship it off by de­fault; en­able it in a test en­vi­ron­ment first, then roll it out more broad­ly.

Changes im­pact­ing client API

None. The be­hav­iour is opt-in via a fea­ture flag and off by de­fault.

Bug228434
Timed-out co­or­di­na­tor re­sets an en­list­ed re­source's time­out to the back­end de­fault

De­scrip­tion

An al­ready-timed-out co­or­di­na­tor no longer re­sets an en­list­ed re­source's own trans­ac­tion time­out to the back­end de­fault. This means a re­source en­list­ed on an ex­pired trans­ac­tion is no longer held longer than nec­es­sary.

Tech­ni­cal de­tails

When a trans­ac­tion had al­ready timed out (getTime­out() < 0=), XARe­sourceTrans­ac­tion com­put­ed the re­main­ing time and passed it to XARe­source.setTrans­ac­tionTime­out. Per the JTA/XA con­tract, setTrans­ac­tionTime­out(0) means "re­set to the de­fault time­out", so the back­end did not learn that the trans­ac­tion had ex­pired and re­set its own time­out to the de­fault — hold­ing XA re­sources un­nec­es­sar­i­ly long. Atomikos now avoids pass­ing a zero-or-neg­a­tive val­ue, so it no longer re­sets the re­source time­out when the co­or­di­na­tor has al­ready timed out. (Sur­faced along­side the doomed-en­list­ment guard, also in this re­lease.)

Changes im­pact­ing client API

None.

Fea­ture226870
Skip the lega­cy Or­a­cle AQ forceCon­nec­tionIn­toXaMode workaround (opt-in fea­ture flag)

De­scrip­tion

You can now skip the lega­cy Or­a­cle AQ forceCon­nec­tionIn­toXaMode workaround, avoid­ing waste­ful per-ses­sion churn on spec-com­pli­ant JMS providers and on Or­a­cle AQ 19c and lat­er.

Tech­ni­cal de­tails

The workaround opens a trans­act­ed JMS ses­sion and rolls it back be­fore every cre­ateXASes­sion() call, pure­ly to coax old­er Or­a­cle AQ into XA mode; for spec-com­pli­ant JMS providers (and Or­a­cle AQ 19c+) this is un­nec­es­sary churn. Con­trol it with com.atom­ikos.icatch.fea­ture.226870 in jta.prop­er­ties. The flag has in­vert­ed se­man­tics: true keeps the lega­cy workaround (re­quired for pre-19c Or­a­cle AQ), false skips it. In this re­lease the de­fault is true (workaround pre­served) for back­ward com­pat­i­bil­i­ty; set it to false if you run on Or­a­cle AQ 19c+ or a spec-com­pli­ant JMS provider.

Changes im­pact­ing client API

None. Be­hav­iour is con­trolled by an opt-in fea­ture flag; the de­fault pre­serves the pre­vi­ous be­hav­iour.

SBOM — run­time de­pen­den­cies are min­i­mal­is­tic

Con­cern­ing se­cu­ri­ty and vul­ner­a­bil­i­ties: the fol­low­ing are the run­time de­pen­den­cies (the SBOM) of our prod­uct. As you can see, the only tran­si­tive third-par­ty de­pen­den­cies are for the Spring Boot in­te­gra­tion mod­ules — be­cause that is the only way to in­te­grate with Spring Boot. All oth­er mod­ules / jars have no third-par­ty run­time de­pen­den­cies what­so­ev­er.

This is com­pile + run­time scope; pro­vid­ed, test and non-prop­a­gat­ing op­tion­al de­pen­den­cies are ex­clud­ed, so it is what your ap­pli­ca­tion ac­tu­al­ly re­ceives. Look up the mod­ule(s) your ap­pli­ca­tion de­pends on.

To re­pro­duce it your­self, run this in a project that de­pends on the Atomikos ar­ti­facts you use (use ex­act­ly this — not a bare de­pen­den­cy:tree, which would also list op­tion­al/pro­vid­ed li­braries you are not giv­en):

mvn dependency:list -DincludeScope=runtime

Mo­d­ules with no third-par­ty run­time de­pen­den­cies

transactions
transactions-api
transactions-eclipselink
transactions-hibernate2
subscription
transactions-hibernate3
transactions-hibernate4
transactions-jdbc
transactions-jms
transactions-jndi-provider
transactions-jta
transactions-osgi
transactions-remoting
atomikos-util
transactions-allegrograph
transactions-hazelcast
transactions-jmx
transactions-jsp
transactions-logcloud
transactions-logutil
transactions-micrometer
transactions-monitoring
transactions-monitoring-logs
transactions-monitoring-stderr
transactions-opentracing
transactions-osgi-axt
transactions-remoting-recovery
transactions-spring
transactions-spring-boot-logcloud
transactions-tomcat

Per-mod­ule third-par­ty run­time de­pen­den­cies (opt-in, cus­tomer-cho­sen)

The de­pen­den­cies be­low ap­pear ONLY if you choose to use the cor­re­spond­ing in­te­gra­tion mod­ule. They are the plat­form your ap­pli­ca­tion al­ready runs — you added, say, the Spring Boot starter be­cause you use Spring Boot. Th­ese are your own, cus­tomer-cho­sen de­pen­den­cies: Atomikos does not in­ject any­thing into your in­fra­struc­ture; you opt in by de­pend­ing on the mod­ule.

transactions-spring-boot
  org.springframework.boot:spring-boot:2.3.4.RELEASE
  org.springframework:spring-aop:5.2.9.RELEASE
  org.springframework:spring-beans:5.2.9.RELEASE
  org.springframework:spring-context:5.2.9.RELEASE
  org.springframework:spring-core:5.2.9.RELEASE
  org.springframework:spring-expression:5.2.9.RELEASE
  org.springframework:spring-jcl:5.2.9.RELEASE
  org.springframework:spring-tx:5.2.9.RELEASE

transactions-spring-boot-starter
  org.springframework.boot:spring-boot:2.3.4.RELEASE
  org.springframework:spring-aop:5.2.9.RELEASE
  org.springframework:spring-beans:5.2.9.RELEASE
  org.springframework:spring-context:5.2.9.RELEASE
  org.springframework:spring-core:5.2.9.RELEASE
  org.springframework:spring-expression:5.2.9.RELEASE
  org.springframework:spring-jcl:5.2.9.RELEASE
  org.springframework:spring-tx:5.2.9.RELEASE

transactions-spring-boot3
  jakarta.jms:jakarta.jms-api:3.1.0
  jakarta.transaction:jakarta.transaction-api:2.0.1
  org.springframework.boot:spring-boot:3.0.1
  org.springframework:spring-aop:6.0.3
  org.springframework:spring-beans:6.0.3
  org.springframework:spring-context:6.0.3
  org.springframework:spring-core:6.0.3
  org.springframework:spring-expression:6.0.3
  org.springframework:spring-jcl:6.0.3
  org.springframework:spring-tx:6.0.3

transactions-spring-boot3-starter
  jakarta.jms:jakarta.jms-api:3.1.0
  jakarta.transaction:jakarta.transaction-api:2.0.1
  org.springframework.boot:spring-boot:3.0.1
  org.springframework:spring-aop:6.0.3
  org.springframework:spring-beans:6.0.3
  org.springframework:spring-context:6.0.3
  org.springframework:spring-core:6.0.3
  org.springframework:spring-expression:6.0.3
  org.springframework:spring-jcl:6.0.3
  org.springframework:spring-tx:6.0.3

transactions-spring-boot3.4
  io.micrometer:micrometer-commons:1.12.0
  io.micrometer:micrometer-observation:1.12.0
  jakarta.jms:jakarta.jms-api:3.1.0
  jakarta.transaction:jakarta.transaction-api:2.0.1
  org.springframework.boot:spring-boot:3.2.0
  org.springframework:spring-aop:6.1.1
  org.springframework:spring-beans:6.1.1
  org.springframework:spring-context:6.1.1
  org.springframework:spring-core:6.1.1
  org.springframework:spring-expression:6.1.1
  org.springframework:spring-jcl:6.1.1
  org.springframework:spring-tx:6.1.1

transactions-spring-boot3.4-starter
  io.micrometer:micrometer-commons:1.12.0
  io.micrometer:micrometer-observation:1.12.0
  jakarta.jms:jakarta.jms-api:3.1.0
  jakarta.transaction:jakarta.transaction-api:2.0.1
  org.springframework.boot:spring-boot:3.2.0
  org.springframework:spring-aop:6.1.1
  org.springframework:spring-beans:6.1.1
  org.springframework:spring-context:6.1.1
  org.springframework:spring-core:6.1.1
  org.springframework:spring-expression:6.1.1
  org.springframework:spring-jcl:6.1.1
  org.springframework:spring-tx:6.1.1

transactions-spring-boot4
  ch.qos.logback:logback-classic:1.5.21
  ch.qos.logback:logback-core:1.5.21
  com.zaxxer:HikariCP:7.0.2
  commons-logging:commons-logging:1.3.5
  io.micrometer:micrometer-commons:1.16.0
  io.micrometer:micrometer-observation:1.16.0
  jakarta.annotation:jakarta.annotation-api:3.0.0
  jakarta.jms:jakarta.jms-api:3.1.0
  jakarta.transaction:jakarta.transaction-api:2.0.1
  org.apache.logging.log4j:log4j-api:2.25.2
  org.apache.logging.log4j:log4j-to-slf4j:2.25.2
  org.jspecify:jspecify:1.0.0
  org.slf4j:jul-to-slf4j:2.0.17
  org.slf4j:slf4j-api:2.0.17
  org.springframework.boot:spring-boot-autoconfigure:4.0.0
  org.springframework.boot:spring-boot-data-commons:4.0.0
  org.springframework.boot:spring-boot-data-jdbc:4.0.0
  org.springframework.boot:spring-boot-jdbc:4.0.0
  org.springframework.boot:spring-boot-jms:4.0.0
  org.springframework.boot:spring-boot-persistence:4.0.0
  org.springframework.boot:spring-boot-sql:4.0.0
  org.springframework.boot:spring-boot-starter-data-jdbc:4.0.0
  org.springframework.boot:spring-boot-starter-jdbc:4.0.0
  org.springframework.boot:spring-boot-starter-jms:4.0.0
  org.springframework.boot:spring-boot-starter-logging:4.0.0
  org.springframework.boot:spring-boot-starter:4.0.0
  org.springframework.boot:spring-boot-transaction:4.0.0
  org.springframework.boot:spring-boot:4.0.0
  org.springframework.data:spring-data-commons:4.0.0
  org.springframework.data:spring-data-jdbc:4.0.0
  org.springframework.data:spring-data-relational:4.0.0
  org.springframework:spring-aop:7.0.1
  org.springframework:spring-beans:7.0.0
  org.springframework:spring-context:7.0.1
  org.springframework:spring-core:7.0.0
  org.springframework:spring-expression:7.0.1
  org.springframework:spring-jdbc:7.0.1
  org.springframework:spring-jms:7.0.1
  org.springframework:spring-messaging:7.0.1
  org.springframework:spring-tx:7.0.0
  org.yaml:snakeyaml:2.5

transactions-spring-boot4-starter
  ch.qos.logback:logback-classic:1.5.21
  ch.qos.logback:logback-core:1.5.21
  com.zaxxer:HikariCP:7.0.2
  commons-logging:commons-logging:1.3.5
  io.micrometer:micrometer-commons:1.16.0
  io.micrometer:micrometer-observation:1.16.0
  jakarta.annotation:jakarta.annotation-api:3.0.0
  jakarta.jms:jakarta.jms-api:3.1.0
  jakarta.transaction:jakarta.transaction-api:2.0.1
  org.apache.logging.log4j:log4j-api:2.25.2
  org.apache.logging.log4j:log4j-to-slf4j:2.25.2
  org.jspecify:jspecify:1.0.0
  org.slf4j:jul-to-slf4j:2.0.17
  org.slf4j:slf4j-api:2.0.17
  org.springframework.boot:spring-boot-autoconfigure:4.0.0
  org.springframework.boot:spring-boot-data-commons:4.0.0
  org.springframework.boot:spring-boot-data-jdbc:4.0.0
  org.springframework.boot:spring-boot-jdbc:4.0.0
  org.springframework.boot:spring-boot-jms:4.0.0
  org.springframework.boot:spring-boot-persistence:4.0.0
  org.springframework.boot:spring-boot-sql:4.0.0
  org.springframework.boot:spring-boot-starter-data-jdbc:4.0.0
  org.springframework.boot:spring-boot-starter-jdbc:4.0.0
  org.springframework.boot:spring-boot-starter-jms:4.0.0
  org.springframework.boot:spring-boot-starter-logging:4.0.0
  org.springframework.boot:spring-boot-starter:4.0.0
  org.springframework.boot:spring-boot-transaction:4.0.0
  org.springframework.boot:spring-boot:4.0.0
  org.springframework.data:spring-data-commons:4.0.0
  org.springframework.data:spring-data-jdbc:4.0.0
  org.springframework.data:spring-data-relational:4.0.0
  org.springframework:spring-aop:7.0.1
  org.springframework:spring-beans:7.0.0
  org.springframework:spring-context:7.0.1
  org.springframework:spring-core:7.0.0
  org.springframework:spring-expression:7.0.1
  org.springframework:spring-jdbc:7.0.1
  org.springframework:spring-jms:7.0.1
  org.springframework:spring-messaging:7.0.1
  org.springframework:spring-tx:7.0.0
  org.yaml:snakeyaml:2.5

RSS

Comments

Add a comment

Corporate Information

Atomikos Corporate Headquarters
Hoveniersstraat, 39/1, 2800
Mechelen, Belgium

Contact Us

Copyright 2026 Atomikos BVBA | Our Privacy Policy
By using this site you agree to our cookies. More info. That's Fine