Chapter 7. Developing C Application Programs with the Transaction Coupling (TC) TX extensions

This chapter explains how you can develop your own C application using the libraries and tools supplied by the LIXA project.

The LIXA project ships with some example C programs that you can find in the /opt/lixa/share/doc/lixa-X.Y.Z/examples folder after software installation (see Chapter 2, Installation).

Note

This chapter is focused on the C programming language for the non-standard extensions that has been added to the TX specification to expose some of the XA interface capabilities. All the information supplied in Chapter 5, Developing C Application Programs using TX (Transaction Demarcation) interface still applies.

Non-standard TX (Transaction Demarcation) Specification Extensions

The LIXA project provides extensions to the [TXspec], named Transaction Coupling (TC) [40], which can be used in addition to the standard API when developing distributed Application Programs.

The API extensions are easy to use and the following C example briefly explains it:

#include <tx.h>
        
/* your includes */
        
int main(int argc, char *argv[])
{
    int rc;
        
    if (TX_OK != (rc = tx_open()))
        /* handle error */
        
    if (TX_OK != (rc = tx_begin()))
        /* handle error */
        
    /* do local work against Resource Manager here */
        
    /* suspend the transaction so that work can continue elsewhere */
    if (TX_OK != (rc = tx_end(TX_TMSUSPEND)))
        /* handle error */
        
    /* in another thread or another Application Program work can continue on the same transaction */
    TXINFO txinfo;
    if (TX_OK != (rc = tx_info(&txinfo)))
        /* handle error */
    if (TX_OK != (rc = tx_join(&txinfo.xid)))
        /* handle error */
    if (TX_OK != (rc = tx_end(TX_TMSUCCESS)))
        /* handle error */
        
    /* take up transaction again */
    if (TX_OK != (rc = tx_resume(&txinfo.xid)))
        /* handle error */
        
    /* commit or roll back transaction */
    if (TX_OK != (rc = tx_commit()))
        /* handle errror */
        
    /* shut down */
    tx_close();
}
      

These are the available C functions:

  • tx_end: manage the global transaction with flags:

    • TX_TMSUSPEND: suspend the transaction

    • TX_TMSUCCESS: mark the portion of work on the global transaction as successful

    • TX_TMFAIL: mark the portion of work on the global transaction as failed

  • tx_join: join a suspended global transaction and continue work

  • tx_resume: resume a suspended global transaction - only from the thread that suspended the original transaction



[40] This extension to the TX specification was designed and has been provided to the LIXA project by Globetom