One of the most ex­cit­ing new re­leas­es of Trans­ac­tion­sEssen­tials!

TCC

We've open-sourced TCC for REST ( Try-Con­firm/Can­cel) so it be­comes ac­ces­si­ble to every­one. We (and many oth­ers who gave us feed­back) are con­vinced that TCC is the ul­ti­mate trans­ac­tion mod­el for REST. We would be ho­n­oured if you (re)used our im­ple­men­ta­tion for your needs, and please let us know if you see any ways of im­prov­ing it. In case you won­der if we are giv­ing up on mon­etis­ing TCC: we're not - rather, we in­tend to pro­vide com­mer­cial val­ue-add mod­ules for var­i­ous cloud de­ploy­ments that are not pro­vid­ed by the pure open source dis­tri­b­u­tion.

Redesigned Re­cov­ery and Log­ging

We've com­plete­ly re­de­fined how log­ging and re­cov­ery work. As an added bonus, this new de­sign also sim­pli­fies the reg­u­lar trans­ac­tion pro­cess­ing code (re­cov­ery is no longer a con­cern) and should re­duce mem­o­ry us­age dur­ing nor­mal op­er­a­tion - while also mak­ing heuris­tic cas­es less of a bur­den.

The .epoch file mech­a­nism is no longer used - which in turn im­proves cloud friend­li­ness of our prod­uct.

The logs are now in a hu­man-read­able text for­mat for op­ti­mal com­fort dur­ing ad­min­is­tra­tion.

API Redesign

Ex­ten­si­bil­i­ty

On the im­ple­men­ta­tion side, we've re­designed the trans­ac­tions-api mod­ule and the trans­ac­tions core to be based on a plu­g­in ar­chi­tec­ture so the core can be ag­nos­tic about the var­i­ous ex­ten­sions (such as JTA, RMI and TCC). This means that we now have a gener­ic trans­ac­tion mod­el in our core, which can be adapt­ed to spe­cif­ic needs via ex­ter­nal plu­g­ins of which the core needs to have no knowl­edge. We're hop­ing that fu­ture con­tri­bu­tions as well as our own com­mer­cial ex­ten­sions can ben­e­fit from this new de­sign. Ex­ten­sions are based on the Ser­viceLoad­er mech­a­nism. The TSLis­ten­er in­ter­face has been refac­tored and re­named to Trans­ac­tionSer­vicePlu­g­in and it has be­come the main plu­g­in in­ter­face for this ar­chi­tec­ture.

In the same style, we've added core event no­ti­fi­ca­tions to our API, so plu­g­ins and ex­ter­nal mod­ules can be no­ti­fied about sig­nif­i­cant trans­ac­tion events. This makes it pos­si­ble to build mon­i­tor­ing util­i­ties on top of our prod­uct - both by the com­mu­ni­ty and com­mer­cial­ly by us.

Redesign of init prop­er­ty lookup

Ini­tial­iza­tion prop­er­ties are now re­solved in the fol­low­ing or­der (for in­spi­ra­tion from the com­mu­ni­ty, see this fo­rum post):

  • de­faults are loaded from the class­path
  • any over­rides from trans­ac­tions.prop­er­ties (if found in the class­path) are ap­plied
  • any over­rides from jta.prop­er­ties (if found in the class­path) are ap­plied
  • any over­rides in a prop­er­ties file spec­i­fied by the op­tion­al sys­tem prop­er­ty com.atom­ikos.icatch.file are ap­plied
  • any over­rides set in a pro­gram­mat­ic way are ap­plied
  • any over­rides set a sys­tem prop­er­ties are ap­plied
  • place­hold­er sub­sti­tu­tion is done for the re­sult­ing set of prop­er­ties

Re­moved SubTxThread func­tion­al­i­ty

This func­tion­al­i­ty seemed a bit ex­ot­ic to car­ry on in our code­base, so we've op­ti­misti­cal­ly re­moved it for now. Should there be com­pelling use cas­es to add them again, we will do so at a lat­er time. Most of our user base ad­heres to the JTA/JDBC/JMS API and will not be af­fect­ed at all by this re­moval.

New con­fig­u­ra­tion prop­er­ties

See Doc­u­men­ta­tion.JtaProp­er­ties for spe­cif­ic changes as of 4.x.

Cus­tom JNDI Provider

To fa­cil­i­tate in­te­gra­tion we now also have a cus­tom JNDI fac­to­ry in mod­ule trans­ac­tions-jndi-provider. Among oth­er things, it makes it eas­i­er to have Hiber­nate find our data­sources if you're not us­ing Spring.

Re-or­gan­ised JMX sup­port into trans­ac­tions-jmx and trans­ac­tions-jmx-jta

JMX sup­port is now di­vid­ed across 2 mod­ules; one trans­ac­tions-jmx (core) mod­ule and also trans­ac­tions-jmx-jta for specifics rel­e­vant to JTA.

Modern Hiber­nate Ex­am­ples

Last but not least: we now have a Hiber­nate 4 ex­am­ple in­clud­ed - thanks to Torsten Krah! There is now also a stand­alone Hiber­nate ex­am­ple to show how our JNDI provider works.

Sys­tem Re­quire­ments

This re­lease re­quires at least Java 1.7 to run. We do not guar­an­tee com­pat­i­bil­i­ty with old­er ver­sions of the JDK.

How To Up­grade

Make sure to shut down in no-force mode first, and delete the logs of your old ver­sion (which is safe af­ter no-force shut­down).

If you don't use the trans­ac­tions-api di­rect­ly then your ap­pli­ca­tion should work fine (still, be sure to check our new init prop­er­ty lookup!).

If you do use our trans­ac­tions-api then you might want to check the fol­low­ing:

  • The Con­fig­u­ra­tion class was moved to pack­age com.atom­ikos.icatch.con­fig.
  • The UserTrans­ac­tionSer­vice no longer has the init(TSInitIn­fo) method: ini­tial­i­sa­tion now takes ei­ther no ar­gu­ments, or a java.util.Prop­er­ties ar­gu­ment.

Fur­ther De­tails

Var­i­ous de­tails are ex­plained be­low... En­joy!

149775: TCC par­tic­i­pants: fix date type

We've changed the JSON date type to some­thing more com­fort­able: ISO-8601. See http://www.hansel­man.com/blog/OnTheNight­mareThatIsJSONDatesPlusJSONNETAndASPNETWe­bAPI.aspx for some back­ground in­for­ma­tion.

72517: Add com­mon in­ter­face for JMS sender tem­plates

You can now use the com­ment in­ter­face Jm­sSen­derTem­plate in your de­pen­den­cy in­jec­tion so you don't de­pend on con­crete class­es.

133319: Al­low java.lang.Ob­ject meth­ods af­ter con­nec­tion is closed

For com­pat­i­bil­i­ty with third-par­ty code ex­pec­ta­tions we now al­low meth­ods like hashCode to be called on closed con­nec­tion han­dles.

142795: Op­ti­mi­sa­tion for con­cur­rent load with Tem­po­raryXATrans­ac­tion­alRe­source

Con­tributed by Christoph Sch­midt-Cas­dorf, Deutsche Post.

119178: Make setTrans­ac­tionTime­out thread-lo­cal

The setTrans­ac­tionTime­out is now thread-lo­cal so threads do not in­ter­fere if they set this prop­er­ty.

141014: Con­fig­u­ra­tion prop­er­ty to dis­able nest­ed trans­ac­tions when de­sired

You can now pre­vent nest­ed trans­ac­tions from be­ing start­ed - see Doc­u­men­ta­tion.JtaProp­er­ties for de­tails.

149260: Log less in INFO mode

We have re­fined and im­proved the way we log: see Doc­u­men­ta­tion.Con­fig­ur­ingTheLogs for de­tails.`

147436: Ex­cep­tions con­cern­ing log and/or con­fig­u­ra­tion files should re­port the ex­pect­ed file lo­ca­tion

Ex­cep­tions now re­port the ex­pect­ed file lo­ca­tion so de­bug­ging your con­fig­u­ra­tion is eas­i­er.

149698: Re­quire SLF4J 1.4 or high­er so trace lev­el is sup­port­ed

For our new log­ging poli­cies we need trace and this is only avail­able in ver­sion 1.4 of SLF4J.

148495: Move meth­ods from dep­re­cat­ed Trans­ac­tionCon­trol to Com­pos­iteTrans­ac­tion and re­move Trans­ac­tionCon­trol

The Trans­ac­tionCon­trol in­ter­face has been re­moved from our API and its re­main­ing func­tion­al­i­ty has been merged into the Com­pos­iteTrans­ac­tion in­ter­face.

70515: Par­tic­i­pant: refac­tor from Dic­tionary to Map

The Map is clean­er at API lev­el (not a JDK im­ple­men­ta­tion class).

142795: Op­ti­mi­sa­tion for con­cur­rent load with Tem­po­raryXATrans­ac­tion­alRe­source

Added a con­tributed im­prove­ment for dy­nam­i­cal­ly reg­is­tered XARe­source in­stances so we avoid race con­di­tions un­der high load.

116801: Redesign re­cov­ery to avoid se­ri­al­is­ing par­tic­i­pants so we keep mem­o­ry us­age low and min­i­mize heuris­tic over­head

We now avoid se­ri­al­i­sa­tion with our brand-new re­cov­ery im­ple­men­ta­tion.

135128: Separate OLTP log­ic from restart/re­cov­ery log­ic to sim­pli­fy the trans­ac­tion states and han­dlers

OLTP log­ging and restart/crash re­cov­ery log­ic are now sep­a­rat­ed, which sim­pli­fies the trans­ac­tion state han­dlers and puts us on the road to im­proved com­pat­i­bil­i­ty with cloud de­ploy­ments.

87768: Con­fig­urable wait time­out dur­ing shut­down

Shut­down used to be bi­na­ry: ei­ther you wait­ed for ac­tive trans­ac­tions to fin­ish, or not. We've now added an op­tion of spec­i­fy­ing a time­out in mil­lisec­onds. The sys­tem will wait for ac­tive trans­ac­tions to fin­ish with­in the spec­i­fied de­lay, and re­sort to forced shut­down af­ter that.

148219: Dy­nam­ic XARe­source reg­is­tra­tion: use hashCode rather than toString to gen­er­ate a re­source name

We changed this in an at­tempt to make re­source names more unique. A more pro­found so­lu­tion will be avail­able in a lat­er re­lease, when we im­prove dy­nam­ic re­source reg­is­tra­tion.

116270: Port­ed fix to com­mu­ni­ty edi­tion

Fixed a bug re­port­ed in this fo­rum post: http://fog­bugz.atom­ikos.com/de­fault.asp?com­mu­ni­ty.6.3133.0

135325: Re­move Heuris­ticMes­sage sup­port

This fea­ture is no longer need­ed in our mod­ernised code base so we have re­moved it.

135349: Make build work with JDK 7/8

The build now works on/with the lat­est JDK ver­sions.

136943: Prop­er­tyUtils should sup­port all Java prim­i­tive types

All built-in prim­i­tive types are now sup­port­ed.

127224: Use the new Re­cov­eryS­can util­i­ty class for XA re­cov­ery

No com­ment need­ed on this one - it is an in­ter­nal is­sue.

117665: One big zip file for all demos/ex­am­ples so ad­min­is­tra­tion is eas­i­er

We've added one big zip file for all demos - this is sim­pler to han­dle for every­body.

116968: Re-en­able and fix OSGi ex­am­ples in build

The OSGi ex­am­ples are now in­clud­ed again. Pre­vi­ous­ly, they were ex­clud­ed be­cause the build used to fail on them.

117662: TCC/REST co­or­di­na­tor ser­vice emits Con­tent-type in­stead of Ac­cept head­er

Our co­or­di­na­tor ser­vice im­ple­men­ta­tion did not prop­er­ly set the Ac­cept head­er when con­firm­ing a par­tic­i­pant ser­vice. This has been fixed.

117742: Re­fine UserTrans­ac­tionMan­ag­er be­hav­ior af­ter close - for in­creased us­abil­i­ty

The fol­low­ing meth­ods are sure to be al­lowed af­ter close: roll­back, setRoll­back­On­ly, sus­pend, re­sume.

117362: Added doc­u­men­ta­tion sec­tion on trans­ac­tion events

Doc­u­ment­ed the event mech­a­nism (in the PDF guide cov­er­ing the API).

117090: Added easy way to launch a co­or­di­na­tor serv­er for TCC

It is now pos­si­ble to quick­ly launch a co­or­di­na­tor serv­er from the TCC demos so you can eas­i­ly test your own par­tic­i­pant ser­vices for com­pli­ance.

116759: In­clud­ed com­mu­ni­ty fix­es from 3.9.0-3.9.3

See Ex­tremeTrans­ac­tion­s3­dot9­dot3 for de­tails.

116758: Ex­am­ple for Hiber­nate 4 in­te­gra­tion

Added runnable ex­am­ple to demon­strate Hiber­nate 4 in­te­gra­tion.

115604: In­crease log­ging lev­el to ERROR for er­rors in be­foreCom­ple­tion Syn­chro­niza­tion call­backs

The log lev­el has been in­creased to avoid los­ing time chas­ing er­rors that hap­pen dur­ing be­foreCom­ple­tion and pre­vent com­mit­ting the trans­ac­tion.

116649: Hiber­nate4 sup­port: Atomikos JTAPlat­form

We now sup­port hi­ber­nate 4 in an easy way, as demon­strat­ed by the cor­re­spond­ing new ex­am­ples.

94676: Avoid writ­ing and main­tain­ing .epoch file

We now avoid writ­ing .epoch files for in­creased flex­i­bil­i­ty and us­abil­i­ty.

23765: Dep­re­cate Swing beans pack­age

We no longer need Swing li­braries: these have long been re­placed by JMX sup­port.

112579: Fixed sup­port for com.atom­ikos.icatch.en­able_log­ging=false

Dis­abling trans­ac­tion log­ging now works again.

112646: En­able back­ward com­pat­i­bil­i­ty of ses­sionTrans­act­ed be­hav­ior

Le­ga­cy ap­pli­ca­tions/con­fig­u­ra­tions that ex­pect the 'old' be­hav­ior of our JMS ses­sions (de­ter­mined by the ses­sionTrans­act­ed flag passed upon ses­sion cre­ation) can now re-en­able this be­hav­ior by set­ting the ig­noreSes­sionTrans­act­edFlag on the Atomikos con­nec­tion fac­to­ry to false.

112579: Prop­er­ty com.atom­ikos.icatch.en­able_log­ging is ig­nored

This set­ting got ig­nored in the 3.9 re­lease, mean­ing there was no way to turn log­ging off - this has now been fixed.

Free Down­load
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