All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.transaction.xa.XAResource Maven / Gradle / Ivy

Go to download

This artifact provides a single jar that contains all classes required to use remote Jakarta Enterprise Beans and Jakarta Messaging, including all dependencies. It is intended for use by those not using maven, maven users should just import the Jakarta Enterprise Beans and Jakarta Messaging BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up with different versions on classes on the class path).

There is a newer version: 35.0.0.Final
Show newest version
package javax.transaction.xa;

/**
 *  The XAResource interface is a Java mapping of the industry standard XA
 *  interface based on the X/Open CAE Specification (Distributed Transaction
 *  Processing: The XA Specification). 
 *  

* The XA interface defines the contract between a Resource Manager and a * Transaction Manager in a distributed transaction processing (DTP) * environment. * An XA resource such as a JDBC driver or a JMS provider implements this * interface to support association between a global transaction and a * database or message service connection. *

* The XAResource interface can be supported by any transactional resource * that is intended to be used by application programs in an environment * where transactions are controlled by an external transaction manager. * An example of such a resource is a database management system. * An application may access data through multiple database connections. * Each database connection is enlisted with the transaction manager as a * transactional resource. The transaction manager obtains an XAResource for * each connection participating in a global transaction. The transaction * manager uses the {@link #start(Xid, int) start} method to associate the * global transaction with the resource, and it uses the * {@link #end(Xid, int) end} method to disassociate the transaction from * the resource. * The resource manager is responsible for associating the global * transaction to all work performed on its data between the start and * end method invocation. *

* At transaction commit time, the resource managers are informed by the * transaction manager to prepare, commit, or rollback a transaction * according to the two-phase commit protocol. *

* Behind the resources that implement this interface the resource manager * exists. The resource manager does not have a public interface or direct * references, and can manage several resources. * To see if two resources are managed by the same resource manager, the * {@link #isSameRM(XAResource)} method can be used. * * @version $Revision$ */ public interface XAResource { /** * Flag value indicating that no flags are set. */ public static final int TMNOFLAGS = 0; /** * JTA specifies this constant and states that it indicates that the * caller is using one-phase optimization, but this constant seems * not to be used by JTA. */ public static final int TMONEPHASE = 1073741824; /** * Flag value for the {@link #start(Xid, int) start} method indicating * that the resource should associate with a transaction previously seen * by this resource manager. */ public static final int TMJOIN = 2097152; /** * Flag value for the {@link #start(Xid, int) start} method indicating * that the resource should associate with a transaction where the * association was suspended. */ public static final int TMRESUME = 134217728; /** * Flag value for the {@link #end(Xid, int) end} method indicating that * the transaction should be disassociated, and that the work has * completed sucessfully. */ public static final int TMSUCCESS = 67108864; /** * Flag value for the {@link #end(Xid, int) end} method indicating that * the transaction should be disassociated, and that the work has * failed */ public static final int TMFAIL = 536870912; /** * Flag value for the {@link #end(Xid, int) end} method indicating that * the resource should temporarily suspend the association with the * transaction. */ public static final int TMSUSPEND = 33554432; /** * Value returned from the {@link #prepare(Xid) prepare} method to * indicate that the resource was not changed in this transaction. */ public static final int XA_RDONLY = 3; /** * Value returned from the {@link #prepare(Xid) prepare} method to * indicate that the resource has successfully prepared to commit * the transaction. */ public static final int XA_OK = 0; /** * Flag value for the {@link #recover(int) recover} method indicating * that the resource manager should start a new recovery scan. */ public static final int TMSTARTRSCAN = 16777216; /** * Flag value for the {@link #recover(int) recover} method indicating * that the resource manager should end the current recovery scan. */ public static final int TMENDRSCAN = 8388608; /** * Called to associate the resource with a transaction. * * If the flags argument is {@link #TMNOFLAGS}, the transaction must not * previously have been seen by this resource manager, or an * {@link XAException} with error code XAER_DUPID will be thrown. * * If the flags argument is {@link #TMJOIN}, the resource will join a * transaction previously seen by tis resource manager. * * If the flags argument is {@link #TMRESUME} the resource will * resume the transaction association that was suspended with * end(TMSUSPEND). * * @param xid The id of the transaction to associate with. * @param flags Must be either {@link #TMNOFLAGS}, {@link #TMJOIN} * or {@link #TMRESUME}. * @throws XAException If an error occurred. */ public void start(Xid xid, int flags) throws XAException; /** * Called to disassociate the resource from a transaction. * * If the flags argument is {@link #TMSUCCESS}, the portion of work * was done sucessfully. * * If the flags argument is {@link #TMFAIL}, the portion of work * failed. The resource manager may mark the transaction for * rollback only to avoid the transaction being committed. * * If the flags argument is {@link #TMSUSPEND} the resource will * temporarily suspend the transaction association. The transaction * must later be re-associated by giving the {@link #TMRESUME} flag * to the {@link #start(Xid,int) start} method. * * @param xid The id of the transaction to disassociate from. * @param flags Must be either {@link #TMSUCCESS}, {@link #TMFAIL} * or {@link #TMSUSPEND}. * @throws XAException If an error occurred. */ public void end(Xid xid, int flags) throws XAException; /** * Prepare to commit the work done on this resource in the given * transaction. * * This method cannot return a status indicating that the transaction * should be rolled back. If the resource wants the transaction to * be rolled back, it should throw an XAException at the * caller. * * @param xid The id of the transaction to prepare to commit work for. * @return Either {@link #XA_OK} or {@link #XA_RDONLY}. * @throws XAException If an error occurred. */ public int prepare(Xid xid) throws XAException; /** * Commit the work done on this resource in the given transaction. * * If the onePhase argument is true, one-phase * optimization is being used, and the {@link #prepare(Xid) prepare} * method must not have been called for this transaction. * Otherwise, this is the second phase of the two-phase commit protocol. * * @param xid The id of the transaction to commit work for. * @param onePhase If true, the transaction manager is using one-phase * optimization. * @throws XAException If an error occurred. */ public void commit(Xid xid, boolean onePhase) throws XAException; /** * Roll back the work done on this resource in the given transaction. * * @param xid The id of the transaction to commit work for. * @throws XAException If an error occurred. */ public void rollback(Xid xid) throws XAException; /** * Tells the resource manager to forget about a heuristic decision. * * @param xid The id of the transaction that was ended with a heuristic * decision. * @throws XAException If an error occurred. */ public void forget(Xid xid) throws XAException; /** * Return a list of transactions that are in a prepared or heuristically * state. * * This method looks not only at the resource it is invoked on, but * also on all other resources managed by the same resource manager. * It is intended to be used by the application server when recovering * after a server crash. *

* A recovery scan is done with one or more calls to this method. * At the first call, {@link #TMSTARTRSCAN} must be in the * flag argument to indicate that the scan should be started. * During the recovery scan, the resource manager maintains an internal * cursor that keeps track of the progress of the recovery scan. * To end the recovery scan, the {@link #TMENDRSCAN} must be passed * in the flag argument. * * @param flag Must be either {@link #TMNOFLAGS}, {@link #TMSTARTRSCAN}, * {@link #TMENDRSCAN} or TMSTARTRSCAN|TMENDRSCAN. * @return An array of zero or more transaction ids. * @throws XAException If an error occurred. */ public Xid[] recover(int flag) throws XAException; /** * Tells the caller if this resource has the same resource manager * as the argument resource. * * The transaction manager needs this method to be able to decide * if the {@link #start(Xid,int) start} method should be given the * {@link #TMJOIN} flag. * * @throws XAException If an error occurred. */ public boolean isSameRM(XAResource xaRes) throws XAException; /** * Get the current transaction timeout value for this resource. * * @return The current timeout value, in seconds. * @throws XAException If an error occurred. */ public int getTransactionTimeout() throws XAException; /** * Set the transaction timeout value for this resource. * * If the seconds argument is 0, the * timeout value is set to the default timeout value of the resource * manager. * * Not all resource managers support setting the timeout value. * If the resource manager does not support setting the timeout * value, it should return false. * * @param seconds The timeout value, in seconds. * @return True if the timeout value could be set, otherwise false. * @throws XAException If an error occurred. */ public boolean setTransactionTimeout(int seconds) throws XAException; }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy