I have an application that interacts multiple databases and some custom services. For some operations, I need transaction-like behavior where a set of changes either commit acro
There are several point with XA:
They are still used for exactly what you have mentioned. If an operation on one of the databases fails then it all gets rolled back.
They are slower, and so if XA is not needed (i.e. it's an autonomous operation or non-transactional), then it should not be used.
The Java EE container may even force you to use an XA datasource when dealing with multiple DBs.