<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Blog - Atomikos</title>
  <subtitle>The Atomikos Blog</subtitle>
  <link href="https://www.atomikos.com/Blog" />
  <link href="https://www.atomikos.com/Blog/WebAtom?contenttype=text%2fxml" rel="self" />
  <updated>2026-04-01T21:03:00Z</updated>
  <logo>https://www.atomikos.com/pub/System/ProjectLogos/foswiki-logo.png</logo>
  <id>https://www.atomikos.com/Blog</id>
  <rights>Copyright 2026 Atomikos BVBA</rights>
  <entry>
	<title>ExtremeTransactions 6.0.116</title>
	<id>https://www.atomikos.com/Blog/ExtremeTransactions6dot0dot116</id>
	<link rel="alternate" type="text/html" href="https://www.atomikos.com/Blog/ExtremeTransactions6dot0dot116"/>
	<updated>2026-03-12T15:59:25Z</updated>
	<author><name>GuyPardon</name></author><category label="Release notes" term="ReleasesCategory" />
	<content type="html"><![CDATA[
<p></p>
<!--
Templates:
<p></p> <ul>
<li> You can now&#8230;
</li> <li> X now (no longer) does Y when Z
</li> <li> X now (no longer) does Y. This means you no longer (now) need to do Z.
</li></ul> 
<p></p>
Make sure you have a nice teaser section!!! This will be the part of the announcement
being displayed on the front page.
<p></p>
Style guides:
<p></p> <ul>
<li> be accurate, clear and consise (in that order)
</li> <li> be user focused 
</li> <li> give enough context but not too much; you may link out for more info
</li> <li> first expand the message then simplify
</li> <li> imagine you are talking / explaining to someone 
</li> <li> use a template
</li> <li> don't use "Fixed ..."
</li> <li> don't be too formal
</li> <li> don't be impersonal
</li> <li> don't go into great detail
</li></ul> 
<p></p>
-->
<p></p>
Release notes for ExtremeTransactions 6.1.116
<p></p>
<p></p>
<p></p>
<p></p>
<h2 id="CORE_IMPROVEMENTS:_A_SIMPLER_AND_SAFER_40AND_DOCUMENTED_41_CONCURRENCY_MODEL">  CORE IMPROVEMENTS: A SIMPLER AND SAFER (AND DOCUMENTED) CONCURRENCY MODEL </h2>
<p></p>
This release includes a <a href="/Documentation/ConcurrencyModel">optional safer threading and concurrency model</a> for the core engine and performance improvements that come with it. The following 2 improvements all contribute to this goal, and are activated / disabled together - via the following feature flag:
<p></p>
<pre>
com.atomikos.icatch.feature.207056&#61;true
</pre>
<p></p>
<h3 id="Feature207056_New_designs_for_TransactionService_and_CompositeTransactionManager_implementations">  <div class='atomikosIssue atomikosFeature'><span class='atomikosIssueLabel'>Feature</span>207056</div> New designs for TransactionService and CompositeTransactionManager implementations </h3>
<p></p>
The new concurrency model is implemented by 2 new core classes:
<p></p> <ul>
<li> DefaultTransactionService
</li> <li> DefaultCompositeTransactionManager
</li></ul> 
<p></p>
<h3 id="Feature205830_Performance_with_concurrent_maps">  <div class='atomikosIssue atomikosFeature'><span class='atomikosIssueLabel'>Feature</span>205830</div> Performance with concurrent maps </h3>
<p></p>
The new core classes also use concurrent hashmaps for increased performance, as outlined in this <a class='natExternalLink' href="https://github.com/atomikos/transactions-essentials/pull/200">contribution on GitHub</a>.
<p></p>
<h2 id="CORE_IMPROVEMENTS:_CORE_40SUB_41_TRANSACTION_SUPPORT">  CORE IMPROVEMENTS: CORE (SUB) TRANSACTION SUPPORT </h2>
<p></p>
<h3 id="Bug207055_Bug_in_timeout_47rollback_of_local_sub_transaction_followed_by_commit_of_its_parent">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>207055</div> Bug in timeout/rollback of local sub transaction followed by commit of its parent </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>4</td></tr><tr><th>Affected version(s):</th><td>5.0.x, 6.0.x</td></tr></table>
<p></p>
<h4 id="A_00NOTOC2_00_Description">  Description </h4>
<p></p>
We now check for timeout of a local sub transaction when the parent transaction commits.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_details">  Technical details </h4>
<p></p>
Before this fix, a sub transaction could timeout but this would not block prepare of the parent transaction, leading to unnecessary prepare work and log warnings.
<p></p>
We now check for timeout and fail early when prepare is attempted.
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impacting_client_API">  Changes impacting client API </h4>
<p></p>
None.
<p></p>
<h3 id="Bug209259_Improve_thread_45safety_of_CheckedExportingTransactionManager">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>209259</div> Improve thread-safety of CheckedExportingTransactionManager </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>2</td></tr><tr><th>Affected version(s):</th><td>6.0.x</td></tr></table>
<p></p>
See the full details <a class='natExternalLink' href="https://github.com/atomikos/transactions-essentials/issues/220">on GitHub</a>
<p></p>
<h2 id="CONNECTION_POOL_IMPROVEMENTS">  CONNECTION POOL IMPROVEMENTS </h2>
<p></p>
<h3 id="Feature223216_Add_support_for_non_45pooled_40one_45off_41_connection_use">  <div class='atomikosIssue atomikosFeature'><span class='atomikosIssueLabel'>Feature</span>223216</div> Add support for non-pooled (one-off) connection use </h3>
<p></p>
You can now use our JTA/XA connections with you own connection pools.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_deta_AN1">  Technical details </h4>
<p></p>
Our JTA/XA connection proxies would not work with external pools. This should now be possible.
<p></p>
<strong>Based on a contribution from Open J Proxy (OJP) - an open source database proxy that supports distributed transactions.</strong>
<p></p>
<p></p>
Courtesy of the Open J Proxy team - thanks for contributing!
<p></p>
Also see the full details on <a class='natExternalLink' href="https://github.com/atomikos/transactions-essentials/issues/247">GitHub</a>.
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impact_AN1">  Changes impacting client API </h4>
<p></p>
None, except using your own pools if you like.
<p></p>
<h3 id="Bug208965_Bug_in_borrowing_connection:_make_waiting_for_available_connections_fair_40er_41">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>208965</div> Bug in borrowing connection: make waiting for available connections fair(er) </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>3</td></tr><tr><th>Affected version(s):</th><td>6.0.x</td></tr></table>
<p></p>
<h4 id="A_00NOTOC2_00_Description_AN1">  Description </h4>
<p></p>
We now avoid that a growing pool's connections are "hijacked" by threads whose requests came in later than the waiting thread.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_deta_AN2">  Technical details </h4>
<p></p>
The details are explained <a class='natExternalLink' href="https://github.com/atomikos/transactions-essentials/issues/224">on GitHub.</a>
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impact_AN2">  Changes impacting client API </h4>
<p></p>
None.
<p></p>
<h2 id="INTEGRATION_IMPROVEMENTS">  INTEGRATION IMPROVEMENTS </h2>
<p></p>
<h3 id="Feature222983_Add_Spring_Boot_4_starter">  <div class='atomikosIssue atomikosFeature'><span class='atomikosIssueLabel'>Feature</span>222983</div> Add Spring Boot 4 starter </h3>
<p></p>
You can now use Atomikos with Spring Boot 4
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impact_AN3">  Changes impacting client API </h4>
<p></p>
Add the following dependency to your pom in order to use this starter:
<p></p>
<pre>
   &#60;dependency&#62;
     &#60;groupId&#62;com.atomikos&#60;/groupId&#62;
     &#60;artifactId&#62;transactions-spring-boot4-starter&#60;/artifactId&#62;
     &#60;version&#62;...&#60;/version&#62;
   &#60;/dependency&#62;
</pre>
<p></p>
<h3 id="Feature211078_Add_Spring_Boot_3.4_starter">  <div class='atomikosIssue atomikosFeature'><span class='atomikosIssueLabel'>Feature</span>211078</div> Add Spring Boot 3.4 starter </h3>
<p></p>
You can now use Atomikos with Spring Boot 3.4
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impact_AN4">  Changes impacting client API </h4>
<p></p>
Add the following dependency to your pom in order to use this starter:
<p></p>
<pre>
   &#60;dependency&#62;
     &#60;groupId&#62;com.atomikos&#60;/groupId&#62;
     &#60;artifactId&#62;transactions-spring-boot3.4-starter&#60;/artifactId&#62;
     &#60;version&#62;...&#60;/version&#62;
   &#60;/dependency&#62;
</pre>
<p></p>
<h3 id="Feature207758_Add_Hibernate_7_example">  <div class='atomikosIssue atomikosFeature'><span class='atomikosIssueLabel'>Feature</span>207758</div> Add Hibernate 7 example </h3>
<p></p>
You can now use our Hibernate 7 example for inspiration of your project.
<p></p>
<h3 id="Feature201715_Add_JakartaEE_example">  <div class='atomikosIssue atomikosFeature'><span class='atomikosIssueLabel'>Feature</span>201715</div> Add JakartaEE example </h3>
<p></p>
You can now check a basic JakartaEE example.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_deta_AN3">  Technical details </h4>
<p></p>
The 6.0 release line added support for JakartaEE, but without examples so far.
<p></p>
We have now added some.
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impact_AN5">  Changes impacting client API </h4>
<p></p>
None.
<p></p>
<h3 id="Feature203242_Retry_acquiring_log_file_lock_on_startup">  <div class='atomikosIssue atomikosFeature'><span class='atomikosIssueLabel'>Feature</span>203242</div> Retry acquiring log file lock on startup </h3>
<p></p>
We now retry obtaining a file lock on startup.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_deta_AN4">  Technical details </h4>
<p></p>
See the full details <a class='natExternalLink' href="https://github.com/atomikos/transactions-essentials/issues/189">on GitHub</a>.
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impact_AN6">  Changes impacting client API </h4>
<p></p>
None.
<p></p>
<h3 id="Bug202466_Interposed_Synchronisation_not_called_on_regular_rollback">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>202466</div> Interposed Synchronisation not called on regular rollback </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>4</td></tr><tr><th>Affected version(s):</th><td>6.0.x</td></tr></table>
<p></p>
<h4 id="A_00NOTOC2_00_Description_AN2">  Description </h4>
<p></p>
Interposed synchronisation instances are now also called on regular rollback.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_deta_AN5">  Technical details </h4>
<p></p>
For details, see the <a class='natExternalLink' href="https://github.com/atomikos/transactions-essentials/issues/185">original report on GitHub</a>.
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impact_AN7">  Changes impacting client API </h4>
<p></p>
None.
<p></p>
<h3 id="Bug209260_Move_AtomikosSQLException_to_public_package">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>209260</div> Move AtomikosSQLException to public package </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>4</td></tr><tr><th>Affected version(s):</th><td>6.0.x</td></tr></table>
<p></p>
<h4 id="A_00NOTOC2_00_Description_AN3">  Description </h4>
<p></p>
Our AtomikosSQLException is now in the public package of module transactions-jdbc.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_deta_AN6">  Technical details </h4>
<p></p>
This exception should not be in the "internal" package - for integration with OSGi this is the best solution. See the <a class='natExternalLink' href="https://github.com/atomikos/transactions-essentials/issues/219">full details on GitHub</a>.
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impact_AN8">  Changes impacting client API </h4>
<p></p>
We don't expect applications to literally catch this specific exception so the impact should be none. If you do catch this exception in your code then you will have to change the import from <strong>com.atomikos.jdbc.internal</strong> to <strong>com.atomikos.jdbc</strong>.
<p></p>
<h3 id="Bug201646_Spring_Boot_2_starter:_use_jta_and_jms_versions_of_Spring_Boot_39s_POM_for_the_starter_project">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>201646</div> Spring Boot 2 starter: use jta and jms versions of Spring Boot's POM for the starter project </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>4</td></tr><tr><th>Affected version(s):</th><td>6.0.x</td></tr></table>
<p></p>
<h4 id="A_00NOTOC2_00_Description_AN4">  Description </h4>
<p></p>
We (and you) now use the jta and jms versions of Spring Boot's POM for the starter project.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_deta_AN7">  Technical details </h4>
<p></p>
The JTA and JMS version dependencies are now aligned with Spring Boot.
<p></p>
We did this already for later Spring Boot integrations, but not yet for Spring Boot 2.
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impact_AN9">  Changes impacting client API </h4>
<p></p>
None.
<p></p>
<h3 id="BugINTERNAL_Use_h2_version_compatible_with_latest_hibernate_406_41_version">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>INTERNAL</div> Use h2 version compatible with latest hibernate (6) version </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>4</td></tr><tr><th>Affected version(s):</th><td>6.0.x</td></tr></table>
<p></p>
<h4 id="A_00NOTOC2_00_Description_AN5">  Description </h4>
<p></p>
We now use a more recent h2 version.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_deta_AN8">  Technical details </h4>
<p></p>
The pom of the Hibernate 6 examples project has been updated to use a better suitable h2 version.
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impac_AN10">  Changes impacting client API </h4>
<p></p>
None.
<p></p>
<h3 id="BugINTERNAL_Cleanup_pom_for_transactions_45eclipselink">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>INTERNAL</div> Cleanup pom for transactions-eclipselink </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>4</td></tr><tr><th>Affected version(s):</th><td>6.0.x</td></tr></table>
<p></p>
<h4 id="A_00NOTOC2_00_Description_AN6">  Description </h4>
<p></p>
Cleaned up the pom file for transactions-eclipselink.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_deta_AN9">  Technical details </h4>
<p></p>
The pom file used to reference an extra repository - but it turns out this was not needed with some minor tweaks in the pom.
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impac_AN11">  Changes impacting client API </h4>
<p></p>
None.
<p></p>
<h3 id="BugINTERNAL_OSGi_service_name_version_is_outdated">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>INTERNAL</div> OSGi service name version is outdated </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>4</td></tr><tr><th>Affected version(s):</th><td>6.0.x</td></tr></table>
<p></p>
<h4 id="A_00NOTOC2_00_Description_AN7">  Description </h4>
<p></p>
The OSGi service name now has the correct version.
<p></p>
<h2 id="MISCELLANEOUS">  MISCELLANEOUS  </h2>
<p></p>
<h3 id="FeatureINTERNAL_Add_support_for_feature_flags_in_the_configuration_properties">  <div class='atomikosIssue atomikosFeature'><span class='atomikosIssueLabel'>Feature</span>INTERNAL</div> Add support for feature flags in the configuration properties </h3>
<p></p>
Features can now be enabled/disabled via feature flag support in the configuration properties:
<p></p>
<pre>
com.atomikos.icatch.feature.&#60;ID&#62;&#61;...
</pre>
<p></p>
It can be set to true or false, and helps us with feature flags for risky code changes so we can always fallback to the previous behaviour.
<p></p>
<h3 id="Bug202474_Improve_message_when_transaction_was_marked_for_rollback_45only">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>202474</div> Improve message when transaction was marked for rollback-only </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>3</td></tr><tr><th>Affected version(s):</th><td>5.0.x, 6.0.x</td></tr></table>
<p></p>
<h4 id="A_00NOTOC2_00_Description_AN8">  Description </h4>
<p></p>
You now get a descriptive message that signals rollback-only instead of suggesting a timeout.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_det_AN10">  Technical details </h4>
<p></p>
The customer report is included with the full details below:
<p></p>
<pre>
some of our applications occasionally log Exceptions like this during execution:

WARN  c.a.j.internal.AtomikosSQLException - The transaction has timed out - try increasing the timeout if needed
WARN  c.a.j.i.AtomikosJdbcConnectionProxy - Error enlisting in transaction - connection might be broken? Please check the logs for more information...

com.atomikos.jdbc.internal.AtomikosSQLException: The transaction has timed out - try increasing the timeout if needed
        at com.atomikos.jdbc.internal.AtomikosSQLException.throwAtomikosSQLException(AtomikosSQLException.java:29)
        at com.atomikos.jdbc.internal.AtomikosSQLException.throwAtomikosSQLException(AtomikosSQLException.java:40)
        at com.atomikos.jdbc.internal.AtomikosJdbcConnectionProxy.enlist(AtomikosJdbcConnectionProxy.java:97)
        at com.atomikos.jdbc.internal.AtomikosJdbcConnectionProxy.updateTransactionContext(AtomikosJdbcConnectionProxy.java:61)
        at com.atomikos.jdbc.internal.AbstractJdbcConnectionProxy.prepareStatement(AbstractJdbcConnectionProxy.java:64)

At first glance, developers thought of an transaction timeout problem, trying to increase the tx-timeout. But in this, timeout increasing did not help.  The reason for this exception was previous SQLException which went through a Spring &#64;Transactional  method, marking the actual Transaction ‚rollback-only‘.
</pre>
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impac_AN12">  Changes impacting client API </h4>
<p></p>
Clearer reports in the log.
<p></p>
<h3 id="Bug207146_Avoid_keeping_the_same_open_JDBC_statements_multiple_times">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>207146</div> Avoid keeping the same open JDBC statements multiple times </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>3</td></tr><tr><th>Affected version(s):</th><td>6.0.x</td></tr></table>
<p></p>
<h4 id="A_00NOTOC2_00_Description_AN9">  Description </h4>
<p></p>
We now avoid adding the same statement many times to the collection of open statements.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_det_AN11">  Technical details </h4>
<p></p>
We keep a collection of open JDBC statements so they can be closed when the JDBC connection is closed.
<p></p>
Our AbstractJdbcConnectionProxy class used to add a same statement multiple times to the collection of open statements and could lead to high memory consumption over time. This was fixed.
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impac_AN13">  Changes impacting client API </h4>
<p></p>
None.
<p></p>
<h3 id="Bug207950_Unnecessary_XA_refresh_on_closing_resource">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>207950</div> Unnecessary XA refresh on closing resource </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>3</td></tr><tr><th>Affected version(s):</th><td>6.0.x</td></tr></table>
<p></p>
<h4 id="A_00NOTOC2_00_Description_AN10">  Description </h4>
<p></p>
We now avoid useless calls to the XAResource on close.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_det_AN12">  Technical details </h4>
<p></p>
Closing a resource would also remove it from the Configuration like this: 
<p></p>
<pre>
    public static RecoverableResource removeResource ( String name )
    {
        RecoverableResource ret &#61; null;
        if ( name !&#61; null ) {
              ret &#61; (RecoverableResource) resources&#95;.remove ( name );
              if ( ret !&#61; null ) resourceList&#95;.remove ( ret );

        }
        return ret;
    }
</pre>
<p></p>
In particular, the additional removal from the resourceList would trigger a call to <strong>equals</strong>, which in turn expects the XAResource to be available. But this is problematic if the resource was already closed.
<p></p>
Solution: we removed the resourceList since it was not really required.
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impac_AN14">  Changes impacting client API </h4>
<p></p>
None.
<p></p>
<h3 id="Bug212902_Improve_exception_message_on_enlist_47_timeout">  <div class='atomikosIssue atomikosBug'><span class='atomikosIssueLabel'>Bug</span>212902</div> Improve exception message on enlist / timeout </h3>
<p></p>
<table class='foswikiTable'><tr><th>Severity:</th><td>4</td></tr><tr><th>Affected version(s):</th><td>6.0.x</td></tr></table>
<p></p>
<h4 id="A_00NOTOC2_00_Description_AN11">  Description </h4>
<p></p>
You can now see more descriptive state information to assess timeout possibility.
<p></p>
<h4 id="A_00NOTOC2_00_Technical_det_AN13">  Technical details </h4>
<p></p>
Instead of suggesting a timeout, we now hint at timeout and show the actual transaction state in the exception. This allows developers to assess the right actionable steps to take.
<p></p>
For more info, see <a class='natExternalLink' href="https://github.com/atomikos/transactions-essentials/pull/229/changes/69cc7bd34e587c2512b3c071f03b6c57421c0772">GitHub</a>
<p></p>
<h4 id="A_00NOTOC2_00_Changes_impac_AN15">  Changes impacting client API </h4>
<p></p>
None.
<p></p>
<p></p>
<p></p>
<h2 id="Feature218192_Add_logCloudDsName_to_Spring_Boot_properties">  <div class='atomikosIssue atomikosFeature'><span class='atomikosIssueLabel'>Feature</span>218192</div> Add logCloudDsName to Spring Boot properties </h2>
<p></p>
You can now set the logCloudDsName via Spring Boot.
<p></p>
<h3 id="A_00NOTOC2_00_Technical_det_AN14">  Technical details </h3>
<p></p>
Quoting the customer's report:
<p></p>
Regarding the (JNDI) name of the LogCloud datasource bean used by Atomikos for datasource lookup, there is actually a property com.atomikos.icatch.logcloud_datasource_name. However, this cannot be set in Spring Boot applications via spring.jta.atomikos.properties&#8230;, because this property is missing in SpringJtaAtomikosProperties and AtomikosProperties.
<p></p>
<h3 id="A_00NOTOC2_00_Changes_impac_AN16">  Changes impacting client API </h3>
<p></p>
You can now set this in Spring Boot via the <strong>logcloudDatasourceName</strong> property.
<p></p>
<h2 id="Feature218193_Allow_using_Hikari_for_the_logCloudDataSource">  <div class='atomikosIssue atomikosFeature'><span class='atomikosIssueLabel'>Feature</span>218193</div> Allow using Hikari for the logCloudDataSource </h2>
<p></p>
You can now use a Hikari datasource for logging the the LogCloud. Just point to it via the logcloud datasource name property.
<p></p>
<p></p>
<h2 id="About_Severity">  About Severity </h2>
<p></p>
The severity levels we use are defined in our <a href="/Main/TermsAndConditions">support terms and conditions</a>.
<p></p>
<div class="alt" style="margin-top:3.5em">
<h2 id="Available_to_customers_only._Want_to_become_a_customer_63">  Available to customers only. Want to become a customer? </h2>
<p></p>
<a href="/Main/ExtremeTransactionsFreeTrial" class="atomikosOrangeButton atomikosFlatButton">Free Trial</a>
</div>
<p></p>
<p></p>
<p></p>
	]]></content>
	</entry>
  <entry>
	<title>ExtremeTransactions 6.0.115</title>
	<id>https://www.atomikos.com/Blog/ExtremeTransactions6dot0dot115</id>
	<link rel="alternate" type="text/html" href="https://www.atomikos.com/Blog/ExtremeTransactions6dot0dot115"/>
	<updated>2026-03-11T12:36:06Z</updated>
	<author><name>GuyPardon</name></author><category label="Release notes" term="ReleasesCategory" />
	<content type="html"><![CDATA[
<div class="foswikiInfoMessage">
This release was superseded by <a href="/Blog/ExtremeTransactions6dot0dot116">ExtremeTransactions6dot0dot116</a>
</div>
<p></p>
<p></p>
	]]></content>
	</entry>
  <entry>
	<title>The "Complexity Tax": Why Manual Data Integrity is Costing You More Than You Think</title>
	<id>https://www.atomikos.com/Blog/TheComplexityTaxWhyManualDataIntegrityIsCostingYouMoreThanYouThink</id>
	<link rel="alternate" type="text/html" href="https://www.atomikos.com/Blog/TheComplexityTaxWhyManualDataIntegrityIsCostingYouMoreThanYouThink"/>
	<updated>2026-01-27T09:44:20Z</updated>
	<author><name>Guy Pardon</name></author><category label="Tech tips" term="TechTipsCategory" />
        <category label="Vision" term="VisionCategory" /><category term="microservices" />
        <category term="saga" />
        <category term="xa" />
	<content type="html"><![CDATA[
<p></p>
<p></p>
Stop gambling with your data integrity.
<p></p>
From debunking the "XA is slow" myth to solving cloud-native recovery with LogCloud, we are showing you how to reclaim your developer productivity and bring 100% atomicity to your microservices.
<p></p>
<p></p>
Let’s face it: most "resilient" microservice designs are still losing data.
<p></p>
It is not that developers aren't trying. They are. You see it in the endless retry logic, idempotency tokens, and circuit breakers piled into every service. You see it in the apologetic conference talks explaining why "eventual consistency" is a feature, not a bug.
<p></p>
But here is the uncomfortable truth: these patterns are treating the symptoms, not the disease.
<p></p>
If you've ever faced duplicate charges, inconsistent state across services, or the dreaded "partial failure" where an inventory record is updated but the order vanishes into the ether, then you have seen the disease up close.
<p></p>
The root cause? <strong>We’ve stopped using transactions, and we’re paying a "Complexity Tax" to make up for it.</strong>
<h3 id="The_Rise_of_the_34Manual_Plumbing_34_Era">  The Rise of the "Manual Plumbing" Era </h3>
<p></p>
Somewhere along the road to microservices, the industry decided that XA (eXtended Architecture) was a "dinosaur." We were told it was too slow, too heavy, and unsuitable for the cloud. (*) 
<p></p>
The replacement? The Saga Pattern.
<p></p>
On paper, Sagas look clean. In reality, they are a developer’s nightmare. For every "Happy Path" you code, you now have to code a "Compensating Path"—the undo logic. <ul>
<li> <p>What if the "undo" fails?</p>
</li> <li> <p>What if the network blips during the compensation?</p>
</li> <li> <p>What if another process reads the partial data before you’ve rolled it back?</p>
</li></ul> 
You’ve essentially moved the complexity from the infrastructure (where it belongs) into your application code (where it becomes a maintenance liability). This is the Complexity Tax. Before you know it, your team is spending 40% of their sprint cycles writing plumbing instead of building business value.
<h3 id="Debunking_the_34XA_is_Slow_34_Myth">  Debunking the "XA is Slow" Myth </h3>
<p></p>
When people tell me XA is slow, they aren't usually talking about the protocol. They are remembering the bloated, heavyweight Application Servers of the 1990s.
<p></p>
Modern XA is different. At Atomikos, we’ve spent decades optimizing the "Data Integrity Control Plane." Through techniques like <strong>Smart XA</strong> (to reduce roundtrips), <strong>Batch JMS processing</strong>, and <strong>Threaded 2-Phase Commits</strong>, we’ve removed the overhead.
<p></p>
The result? You get the ACID guarantees of a monolith with the horizontal scale of microservices.
<h3 id="Introducing_the_Transaction_Control_Plane">  Introducing the Transaction Control Plane </h3>
<p></p>
We already use Control Planes for everything else. You have a Control Plane for your traffic (Service Mesh) and a Control Plane for your deployments (Kubernetes). Why don't you have a Control Plane for your data integrity?
<p></p>
A Service Mesh can retry a request, but it cannot ensure <strong>Atomicity</strong>. It’s just "brawn." Atomikos acts as the "brain"—the Transaction Control Plane that observes the outcome across all your resources (databases, brokers, and APIs) and makes the executive decision: <strong>Commit all, or Rollback all.</strong>
<h3 id="Cloud_45Native_Recovery_with_LogCloud">  Cloud-Native Recovery with LogCloud </h3>
<p></p>
The last remaining argument against transactions in the cloud was the "Single Point of Failure." If a node dies mid-transaction, the transaction log dies with it, right?
<p></p>
Not anymore. With <strong>LogCloud</strong>, we’ve decentralized recovery. In a cloud environment, your transaction state is stored and accessible so that if one node vanishes, another can pick up the "Control" duties and finish the recovery automatically. It makes your system "productively boring"—the way a production system should be.
<h3 id="Stop_Coding_for_Failure._Start_Scaling_for_Success.">  Stop Coding for Failure. Start Scaling for Success. </h3>
<p></p>
If your developers are spending their days writing manual rollback logic and idempotency layers, you are paying a tax you don’t owe.
<p></p>
It is time to stop pretending that eventual consistency is "easy" and start using the tools designed to handle distributed state correctly. Whether you are using our open-source <strong>TransactionsEssentials</strong> or our enterprise <strong>ExtremeTransactions</strong>, the goal is the same:
<p></p>
<strong>Focus on your features. Let us handle the integrity.</strong>
<p></p>
For a technical deep dive check out <a href="/Blog/DistributedTransactionsTutorial"><b data-index-in-node='60' data-path-to-node='7'>The Atomikos Distributed Transactions Tutorial.</b></a>
<p></p>
(*) Actually, the fact that microservices started as HTTP-based light-weight alternatives to SOAP-based web services meant there was no real alternative, so people started pretending XA was not really needed. Until they asked us to provide it.
<p></p>
<p>Tags: microservices, saga, xa</p>
	]]></content>
	</entry>
  <entry>
	<title>From Retries to Results: Fixing the Root Causes of Data Inconsistency in Microservices</title>
	<id>https://www.atomikos.com/Blog/FromRetriesToResultsFixingTheRootCausesOfDataInconsistencyInMicroservices</id>
	<link rel="alternate" type="text/html" href="https://www.atomikos.com/Blog/FromRetriesToResultsFixingTheRootCausesOfDataInconsistencyInMicroservices"/>
	<updated>2025-11-20T16:32:36Z</updated>
	<author><name>Guy Pardon</name></author><category label="Vision" term="VisionCategory" /><category term="idempotent consumer" />
        <category term="microservices" />
        <category term="xa" />
	<content type="html"><![CDATA[
<p></p>
Let's face it: most "resilient" microservice designs are still losing data.
<p></p>
It is not that developers aren't trying. They are. You see it in the endless retry
logic, idempotency tokens, and circuit breakers piled into every service. You see
it in all the apologetic blog posts explaining why 'eventual consistency' is a feature,
not a bug.
<p></p>
But here is the uncomfortable truth: these patterns are treating the symptoms, not
the disease. If you've ever faced duplicate messages, inconsistent state across services,
or the dreaded partial failure in a distributed system, then you have seen it up
close.
<p></p>
The root cause? Missing transactionality.
<p></p>
<p></p>
<h3 id="The_Retry_Trap">  The Retry Trap </h3>
<p></p>
Retries sound like a good idea - until they aren't.
<p></p>
Say a payment service calls an inventory service, and the call times out. Should
you retry? Maybe.
<p></p>
But what if the first call actually succeeded? Now you have deducted stock twice.
<p></p>
Congratulations, you just created a ghost sale.
<p></p>
Retries without atomicity are a gamble. And in distributed systems, the odds are
stacked against you.
<p></p>
<h3 id="What_the_XA_Model_Got_Right">  What the XA Model Got Right </h3>
<p></p>
Before microservices, we had XA transactions: coordinated, atomic, and consistent.
<p></p>
Yes, they had baggage (monolithic app servers, tight coupling, etc.), but they got
one thing right: you either committed everything, or nothing.
<p></p>
That is exactly what most microservices still need today. And that is exactly what
Atomikos brings to the table but without the heavy baggage.
<p></p>
<h3 id="Enter_Atomikos:_Lightweight_XA_43_Cloud_45Native_Recovery">  Enter Atomikos: Lightweight XA + Cloud-Native Recovery </h3>
<p></p>
Atomikos is a lightweight transaction manager designed for modern Java stacks - Spring
Boot, JDBC, JMS, Hibernate - you name it.
<p></p>
It coordinates distributed transactions across services without requiring a central
server.
<p></p>
And with LogCloud, Atomikos enables decentralized recovery and exactly-once delivery,
even in the face of crashes and network splits.
<p></p>
No more idempotency hacks. No more guesswork. Just results.
<p></p>
<h3 id="Case_in_Point:_Banking_44_Fintech_44_and_Gaming">  Case in Point: Banking, Fintech, and Gaming </h3>
<p></p>
Some of the most demanding systems in finance and gaming already rely on Atomikos.
Why? Because losing money - or state - is not an option. These are environments where
retries aren't a backup plan; they are a liability.
<p></p>
<h3 id="Retries_Are_a_Symptom._Atomicity_Is_the_Cure.">  Retries Are a Symptom. Atomicity Is the Cure. </h3>
<p></p> <ul>
<li> Retries &ne; reliability. They are a workaround, not a solution.
</li> <li> Exactly-once processing demands atomicity across services.
</li> <li> Atomikos gives you XA-style guarantees with a cloud-native, lightweight footprint.
</li> <li> With LogCloud, recovery is built-in and decentralized.
</li></ul> 
<p></p>
If you are tired of band-aids and boilerplate, maybe it's time to treat the disease.
<p></p>
Try Atomikos. See what happens when your transactions just work.
<p></p>
<p>Tags: idempotent consumer, microservices, xa</p>
	]]></content>
	</entry>
  <entry>
	<title>Why Financial Systems Need Eventual Consistency With XA</title>
	<id>https://www.atomikos.com/Blog/WhyFinancialSystemsCanTAffordEventualConsistencyAndWhatToUseInstead</id>
	<link rel="alternate" type="text/html" href="https://www.atomikos.com/Blog/WhyFinancialSystemsCanTAffordEventualConsistencyAndWhatToUseInstead"/>
	<updated>2025-10-13T20:46:58Z</updated>
	<author><name>Guy Pardon</name></author><category label="Vision" term="VisionCategory" /><category term="eventual consistency" />
        <category term="jms" />
        <category term="xa" />
	<content type="html"><![CDATA[
<p></p>
In the world of microservices and light-weight infrastructure, a lot of teams think they should roll their own eventual consistency "patterns" - let's call this "custom eventual consistency". So they end up coding a lot that needs to be tested for border-case scenarios. Even if this is done, the result rarely covers all cases, and not everybody wants to maintain this kind of code.
<p></p>
<p></p>
<h2 id="The_problem_with_34custom_eventual_consistency_34_in_finance">  The problem with "custom eventual consistency" in finance </h2>
<p></p>
Eventual consistency means accepting that different parts of your system might not agree on the same data right away. When done in-house this introduces dangerous failure modes: <ul>
<li> <p dir='ltr'>A transaction appears successful in the UI, but was never persisted</p>
</li> <li> <p dir='ltr'>A payment is withdrawn but not matched to an invoice</p>
</li> <li> <p dir='ltr'>A customer is notified about something that never happened</p>
</li> <li> <p dir='ltr'>Systems retry the same operation, <strong>causing double processing</strong> </p>
</li></ul> 
<p dir='ltr'>If that sounds familiar, you are not alone. Many teams try to mitigate these issues with retries, idempotency keys, or custom rollback logic. But those are workarounds, not guarantees.</p> <p dir='ltr'>And in finance, you need guarantees.</p> <h2 dir='ltr'>The hidden costs of eventual consistency</h2> <p dir='ltr'>When financial systems get out of sync, you don’t just lose correctness. You lose time, money, and credibility.</p> <ul>
<li> <p dir='ltr'>Engineers waste time diagnosing edge cases</p>
</li> <li> <p dir='ltr'>Operations teams step in to manually reconcile records</p>
</li> <li> <p dir='ltr'>Customers file complaints</p>
</li> <li> <p dir='ltr'>Auditors start asking hard questions</p>
</li></ul> 
<p dir='ltr'>Eventually consistent systems tend to accrue consistency debt: more compensating logic, more monitoring, and more risk.</p> <p dir='ltr'>As you grow, so do your coordination challenges. Scaling your architecture shouldn't mean scaling your uncertainty.</p> <h2 dir='ltr'>So what is the alternative?</h2> <p dir='ltr'>The alternative is to design for atomic consistency up front: either all steps of a transaction succeed, or none do.</p> <p dir='ltr'>That’s what XA (two-phase commit) protocols were designed for. But traditional XA has a bad reputation: it is too heavy, too slow, too tied to old-school app servers.</p> <p dir='ltr'>That is exactly why we built Atomikos: to bring modern, lightweight transaction coordination to JVM-based systems.</p> <h2 dir='ltr'>How Atomikos helps</h2> <p dir='ltr'>Atomikos lets you:</p> <ul>
<li> <p dir='ltr'>Coordinate database and messaging operations atomically</p>
</li> <li> <p dir='ltr'>Eliminate custom rollback code</p>
</li> <li> <p dir='ltr'>Guarantee exactly-once processing</p>
</li> <li> <p dir='ltr'>Avoid polling or outbox-based retries</p>
</li> <li> <p dir='ltr'>Scale horizontally without giving up control</p>
</li></ul> 
<p dir='ltr'>All without requiring a heavyweight platform or vendor lock-in.</p> <p dir='ltr'>You can even get started with our open source version and upgrade later if you need support or advanced features like LogCloud.</p> <h2 dir='ltr'>In summary</h2> <p dir='ltr'>If you are building financial systems, eventual consistency is a liability. It doesn’t fail loudly. It fails subtly, unpredictably, and at scale.</p> <p dir='ltr'>Atomic consistency isn’t old-fashioned. It is table stakes when money, risk, and trust are on the line.</p> <p dir='ltr'> <strong>Don’t duct-tape your consistency model. Design it in.</strong> </p> <p dir='ltr'>Want to see how Atomikos coordinates messaging and DB in one clean transaction and get eventual consistency done right?</p> <p dir='ltr'>Check this out: <a href="/Blog/TheSimpleSecretOfExactlyOnceDelivery">https://www.atomikos.com/Blog/TheSimpleSecretOfExactlyOnceDelivery</a> - it works better and it is simpler to do.</p>
<p></p>
<p>Tags: eventual consistency, jms, xa</p>
	]]></content>
	</entry>
</feed>