Difference between XADatasource and Non-XADatasource
An XA transaction, in the most general terms, is a “global transaction” that may span multiple resources. A non-XA transaction always involves just one resource.
An XA transaction involves a coordinating
transaction manager, with one or more databases (or other resources,
like JMS) all involved in a single global transaction. Non-XA
transactions have no transaction coordinator, and a single resource is
doing all its transaction work itself (this is sometimes called local
transactions).
XA transactions come from the X/Open
group specification on distributed, global transactions. JTA includes
the X/Open XA spec, in modified form.
Most stuff in the world is non-XA – a
Servlet or EJB or plain old JDBC in a Java application talking to a
single database. XA gets involved when you want to work with multiple
resources – 2 or more databases, a database and a JMS connection, all of
those plus maybe a JCA resource – all in a single transaction. In this
scenario, you’ll have an app server like Websphere or Weblogic or JBoss
acting as the Transaction Manager, and your various resources (Oracle,
Sybase, IBM MQ JMS, SAP, whatever) acting as transaction resources. Your
code can then update/delete/publish/whatever across the many resources.
When you say “commit”, the results are commited across all of the
resources. When you say “rollback”, _everything_ is rolled back across
all resources.
The Transaction Manager coordinates all
of this through a protocol called Two Phase Commit (2PC). This protocol
also has to be supported by the individual resources.
In terms of datasources, an XA datasource
is a data source that can participate in an XA global transaction. A
non-XA datasource generally can’t participate in a global transaction
(sort of – some people implement what’s called a “last participant”
optimization that can let you do this for exactly one non-XA item).
For more details – see the JTA pages on
java.sun.com. Look at the XAResource and Xid interfaces in JTA. See the
X/Open XA Distributed Transaction specification. Do a google source on
“Java JTA XA transaction”.
Don't Use Oracle's Driver (Thin XA) to Define WebLogic Data Source for ADF Applications
But really this is not an issue at all. What happens is - WebLogic administrators define wrong data source (XA data source). Error is not reproduced on embedded WebLogic, because data source is created automatically for you in development environment. XA data source should be never user with ADF/Fusion applications because it closes all cursors upon commit. Read more here from ADF developer guide - 41.3.7 What You May Need to Know About JDBC Data Source for Oracle WebLogic Server.
Make sure to select proper driver for Instance Connections:
No comments:
Post a Comment