Please follow the instructions explained in the section called “PostgreSQL Configuration” to set-up a running environment for MySQL or MariaDB server.
Start the state server as shown below:
| [Shell terminal session] |
tiian@ubuntu1204-64:~$ sudo su - lixa lixa@ubuntu1204-64:~$ /opt/lixa/sbin/lixad --daemon lixa@ubuntu1204-64:~$ exit logout tiian@ubuntu1204-64:~$ ps -ef|grep lixad|grep -v grep lixa 12866 1 0 21:35 ? 00:00:00 /opt/lixa/sbin/lixad --daemon |
Prepare the client (Application Program) using the below commands (gcc command was splitted on several lines using \ to help readability, but you may use a single line):
| [Shell terminal session] |
tiian@ubuntu1204-64:~$ mkdir tmp tiian@ubuntu1204-64:~$ cd tmp tiian@ubuntu1204-64:~/tmp$ cp /opt/lixa/share/doc/lixa-X.Y.Z/examples/example5_pql.c . tiian@ubuntu1204-64:~/tmp$ gcc example5_pql.c $(/opt/lixa/bin/lixa-config -c -f -p -d) \ > -I /usr/include/postgresql -l pq -o example5_pql |
Verify the executable produced by gcc:
| [Shell terminal session] |
tiian@ubuntu1204-64:/tmp$ ldd example5_pql
linux-vdso.so.1 => (0x00007fffc57fe000)
liblixac.so.0 => /opt/lixa/lib/liblixac.so.0 (0x00007f7402314000)
liblixapq.so.0 => /opt/lixa/lib/liblixapq.so.0 (0x00007f740210d000)
libpq.so.5 => /usr/lib/libpq.so.5 (0x00007f7401ed8000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7401b1a000)
libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007f7401916000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f7401620000)
libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007f74012c4000)
liblixab.so.0 => /opt/lixa/lib/liblixab.so.0 (0x00007f74010aa000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7400e8c000)
libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f7400c2d000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f7400850000)
libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f7400581000)
libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f740037d000)
libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f740013e000)
libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007f73ffeee000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7402533000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f73ffcea000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f73ffaad000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f73ff8a4000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f73ff68d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f73ff391000)
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f73ff18b000)
libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f73fef63000)
libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f73fed5b000)
libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f73feb56000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f73fe93a000)
liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007f73fe72c000)
libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007f73fe510000)
libgssapi.so.3 => /usr/lib/x86_64-linux-gnu/libgssapi.so.3 (0x00007f73fe2d2000)
libgnutls.so.26 => /usr/lib/x86_64-linux-gnu/libgnutls.so.26 (0x00007f73fe016000)
libgcrypt.so.11 => /lib/x86_64-linux-gnu/libgcrypt.so.11 (0x00007f73fdd96000)
libheimntlm.so.0 => /usr/lib/x86_64-linux-gnu/libheimntlm.so.0 (0x00007f73fdb8f000)
libkrb5.so.26 => /usr/lib/x86_64-linux-gnu/libkrb5.so.26 (0x00007f73fd908000)
libasn1.so.8 => /usr/lib/x86_64-linux-gnu/libasn1.so.8 (0x00007f73fd668000)
libhcrypto.so.4 => /usr/lib/x86_64-linux-gnu/libhcrypto.so.4 (0x00007f73fd434000)
libroken.so.18 => /usr/lib/x86_64-linux-gnu/libroken.so.18 (0x00007f73fd21e000)
libtasn1.so.3 => /usr/lib/x86_64-linux-gnu/libtasn1.so.3 (0x00007f73fd00d000)
libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f73fcdfb000)
libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f73fcbf6000)
libwind.so.0 => /usr/lib/x86_64-linux-gnu/libwind.so.0 (0x00007f73fc9cd000)
libheimbase.so.1 => /usr/lib/x86_64-linux-gnu/libheimbase.so.1 (0x00007f73fc7be000)
libhx509.so.5 => /usr/lib/x86_64-linux-gnu/libhx509.so.5 (0x00007f73fc573000)
libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007f73fc2d0000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f73fc097000)
|
Set-up the LIXA_PROFILE environment variable:
| [Shell terminal session] |
tiian@ubuntu1204-64:~/tmp$ echo $LIXA_PROFILE tiian@ubuntu1204-64:~/tmp$ export LIXA_PROFILE=PQL_STA tiian@ubuntu1204-64:~/tmp$ echo $LIXA_PROFILE PQL_STA |
We set LIXA_PROFILE to value
“PQL_STA”, looking at
/opt/lixa/etc/lixac_conf.xml:
<profile name="PQL_STA">
<sttsrvs>
<sttsrv>local_1</sttsrv>
</sttsrvs>
<rsrmgrs>
<rsrmgr>PostgreSQL_stareg</rsrmgr>
</rsrmgrs>
</profile>
the profile references the Resource Manager named “PostgreSQL_stareg”, looking again at the config file:
<rsrmgr name="PostgreSQL_stareg" switch_file="/opt/lixa/lib/switch_postgresql_stareg.so" xa_open_info="dbname=testdb" xa_close_info="" />
we can discover how the PostgreSQL database is configured for XA [24].
It is suggested to open two different terminals: the first one
connected to “testdb” PostgreSQL database and the second
one pointing to the directory where the compiled program
example5_pql lives.
First teminal session:
| [PostgreSQL terminal session] |
tiian@ubuntu1204-64:~$ psql testdb psql (9.1.24) Type "help" for help. testdb=> |
Second teminal session:
| [Shell terminal session] |
tiian@ubuntu1204-64:~/tmp$ ls -la total 21 drwxr-xr-x 2 tiian tiian 112 2011-09-14 21:14 . drwxrwx--x 101 tiian tiian 5064 2011-09-14 21:13 .. -rwxr-xr-x 1 tiian tiian 8293 2011-09-13 21:27 example5_pql -rw-r--r-- 1 tiian tiian 3735 2011-09-13 21:26 example5_pql.c |
Check the content of “AUTHORS” table before program execution:
| [PostgreSQL terminal session] |
testdb=> select * from AUTHORS; id | last_name | first_name ----+-----------+------------ (0 rows) |
Execute the program:
| [Shell terminal session] |
tiian@ubuntu1204-64:~/tmp$ ./example5_pql insert Inserting a row in the table... |
Check the content of the table again:
| [PostgreSQL terminal session] |
testdb=> select * from AUTHORS; id | last_name | first_name ----+-----------+------------ 1 | Foo | Bar (1 rows) |
The example program inserted the row with id=1. You can not insert the same row twice because there is a unique constraint on this table, but you can remove the row using
| [Shell terminal session] |
tiian@ubuntu1204-64:~/tmp$ ./example5_pql delete Deleting a row from the table... |
Check the table content again:
| [PostgreSQL terminal session] |
testdb=> select * from AUTHORS; id | last_name | first_name ----+-----------+------------ (0 rows) |
you can verify in file
/opt/lixa/etc/lixac_conf.xml
that “PQL_STA” is associated to static registration
[25]
.
Execute the program:
| [Shell terminal session] |
tiian@ubuntu1204-64:~/tmp$ export LIXA_TRACE_MASK=0x00002000 tiian@ubuntu1204-64:~/tmp$ echo $LIXA_TRACE_MASK 0x00002000 tiian@ubuntu1204-64:~/tmp$ ./example5_pql insert 2>&1 | grep xa_start 2011-09-14 21:53:13.403943 [9766/3069609728] lixa_xa_start [...] 2011-09-14 21:53:13.448918 [9766/3069609728] lixa_xa_start: xa_start_entry(xid, 0, 0x0) = 0 2011-09-14 21:53:13.448977 [9766/3069609728] lixa_xa_start: sending 210 bytes to the server for step 24 2011-09-14 21:53:13.449104 [9766/3069609728] lixa_xa_start/excp=10/ret_cod=0/errno=0 |
Finally, clean up the table again:
| [Shell terminal session] |
tiian@ubuntu1204-64:~/tmp$ unset LIXA_TRACE_MASK tiian@ubuntu1204-64:~/tmp$ ./example5_pql delete Deleting a row from the table... |
[24]
The content of xa_open_info is passed to
PQconnectdb function: you can refer to
PostgreSQL official
documentation to discover what you can pass to this function.
Please pay attention the xa_open_info can
contain a maximum of 255 characters: this limitation is
documented in [XAspec].
[25] The current implementation does not support dynamic registration for PostgreSQL.