4.2. Recovering XAConnections
When recovering from failures, JBossJTA requires the ability to reconnect to databases that were in use prior to the failures, in order to resolve outstanding transactions. Most connection information is saved by the transaction service during its normal execution, and can be used during recovery to recreate the connection. However, it is possible that some of the information is lost during the failure, if the failure occurs while it is being written. In order to recreate those connections, you must provide one implementations of the JBossJTA interface
com.arjuna.ats.jta.recovery.XAResourceRecovery
for each database that may be used by an application.
Note
If you are using the transactional JDBC 2.0 driver provided with JBossJTA, no additional work is necessary in order to ensure that recovery occurs.
To inform the recovery system about each of the
XAResourceRecovery
instances, specify their class names through properties. Any property found in the properties
file, or registered at run-time, starting with the name com.arjuna.ats.jta.recovery.XAResourceRecovery is recognized as representing one of these instances. Its value is the class name, such as: com.arjuna.ats.jta.recovery.XAResourceRecoveryOracle=com.foo.barRecovery
Additional information to be passed to the instance at creation can be specified after a semicolon:
com.arjuna.ats.jta.recovery.XAResourceRecoveryOracle=com.foo.barRecovery;myData=hello
Note
These properties should be in the JTA section of the
property
file.
Any errors will be reported during recovery.
public interface XAResourceRecovery { public XAResource getXAResource () throws SQLException; public boolean initialise (String p); public boolean hasMoreResources (); };
Each method should return the following information:
initialize
- After the instance is created, any additional information found after the first semicolon in the property value definition is passed to the object. The object can use this information in an implementation-specific manner.
hasMoreResources
- Each
XAResourceRecovery
implementation can provide multipleXAResource
instances. Before calling togetXAResource
,hasMoreResources
is called to determine whether any further connections need to be obtained. If the return value isfalse
,getXAResource
is not called called again during this recovery sweep and the instance is ignored until the next recovery scan. getXAResource
- Returns an instance of the
XAResource
object. How this is created (and how the parameters to its constructors are obtained) is up to theXAResourceRecovery
implementation. The parameters to the constructors of this class should be similar to those used when creating the initial driver or data source, and should be sufficient to create newXAResources
instances that can be used to drive recovery.
Note
If you want your
XAResourceRecovery
instance to be called during each sweep of the recovery manager, ensure that once hasMoreResources
returns false
to indicate the end of work for the current scan, it then returns true
for the next recovery scan.