6.8.3.1 Configure Spring REST Apps with an XA-Compliant Resource Manager

Use the information provided in this section to configure your Spring REST-based participant applications when you use an XA-compliant resource manager.

  1. Configure property values for the MicroTx client library.

    The following example provides sample values for the properties. Provide the values based on your environment.

     spring:
      microtx:
        participant-url: https://bookTicket-app:8081
        propagation-active: true
        http-client-connection-pool-size: 15
        xa-transaction-timeout: 60000
        xa-resource-manager-id: 174A5FF2-D8B1-47B0-AF09-DA5AFECA2F61
        xa-xa-support: true
    

    Ensure that xa-xa-support is set to true.

    For details about each property and other optional properties, see Configure Library Properties for Spring REST Apps.

  2. Include only one of the following MicroTx library files as a maven dependency in the Spring Boot 3.x application's pom.xml file. The following sample code is for the 24.2 release. Provide the correct version, based on the release version that you want to use. Spring Boot 3.x applications work with Java 17.
    • For JDBC applications, use the microtx-spring-boot-starter file.

      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-starter</artifactId>
           <version>24.2</version>
      </dependency>
    • For Java Apps that use Hibernate as JPA provider, use the microtx-spring-boot-starter-hibernate library file.

      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-starter-hibernate</artifactId>
           <version>24.2</version>
      </dependency>
    • For Java Apps that use EclipseLink as JPA provider, use the microtx-spring-boot-starter-eclipselink library file.

      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-starter-eclipselink</artifactId>
           <version>24.2</version>
      </dependency>
  3. Import the com.oracle.microtx.common.MicroTxConfig package.
    import com.oracle.microtx.common.MicroTxConfig;
  4. Initialize an XADatasource object.

    The MicroTx client library needs to access an XADatasource object. It uses this object to create XAConnection and XAResource objects to connect with a resource manager or database server. The following code describes how you can define the XADatasource object at the beginning of the application code when you create the connection object.

    class oracle.tmm.jta.MicroTxConfig
    static void initXaDataSource(XADataSource xaDs)

    For more information about XADataSource, see https://docs.oracle.com/javase/8/docs/api/javax/sql/XADataSource.html.

  5. In the transaction participant function or block, specify the XADatasource object which is used by the MicroTx client library. Provide the credentials and other details to connect to the resource manager.
    //Example for a participant using an Oracle Database:
    OracleXADataSource dataSource = new oracle.jdbc.xa.client.OracleXADataSource();
    dataSource.setURL(url); //database connection string
    dataSource.setUser(user); //username to access database
    dataSource.setPassword(password); //password to access database
    MicroTxConfig.initXaDataSource((XADataSource)dataSource);

    It is the responsibility of the application developer to ensure that an XA-compliant JDBC driver and required parameters are set up while allocating XADataSource.

    The MicroTx client library uses the XADatasource object to create database connections.

  6. In the transaction participant function or block, add the following line of code only once after you have initialized the XADatasource object.
    oracle.tmm.jta.MicroTxConfig.initXaDataSource((XADataSource)xaDs);

    XADatasource is an interface defined in JTA whose implementation is provided by the JDBC driver.

    The MicroTx client library uses this object to connect to database to start XA transactions and perform various operations such as prepare, commit, and rollback. The MicroTx library also provides a SQL connection object to the application code to execute DML using dependency injection.

  7. Insert the following line in the code of the participant service so that the application uses the connection passed by the MicroTx client library. The following code in the participant application injects the connection object that is created by the MicroTx client library.
    @Autowired
    @Qualifier("microTxSqlConnection")
    @Lazy
    private Connection connection;
  8. Insert the following lines in the code of the participant service so that the service uses the injected connection object whenever the participant service performs a DML operation.
    Statement stmt1 = connection.createStatement();
    stmt1.execute(query);
    stmt1.close();

    Where, connection is the name of the Connection object that you have injected in the previous step.

    Insert these lines of code for every DML operation that your participant service performs. Create a new statement object, such as stmt1 or stmt2 for every DML operation, but use the same connection object that is created by the MicroTx client library.

  9. Save the changes.
If there are multiple Spring REST services complete these steps for all the transaction participant services.