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.