Dear All,XTA (XA Transaction API, http://www.tiian.org/lixa/XTA.html) is a new
API that has been developed inside the LIXA project to support two phase commit
transactions in the context of FaaS (Function as a Service) and microservice
oriented, polyglot applications.
The API already supports C and C++ languages; it aims to support many more, at
the bare minimum Python, PHP and Java.I'm currently working on supporting
Python with PostgreSQL and MySQL, this mail thread is related to
Python/PostgreSQL.
XTA is implemented in C language and XTA for Python is generated using SWIG: I
would like to repeat the approach for all the languages that provides drivers
derived from libpq-fe.h
Now the request for help: XTA needs to enlist all the resource managers (here
PostgreSQL) to manage them using 2 phase commit, basically it requires a
pointer (PGconn *) that must be passed to PostgresqlXaResource constructor
(http://www.tiian.org/lixa/manuals/xta/CPP/classxta_1_1PostgresqlXaResource.html)
to create an XTA object associated to an already opened PostgreSQL connection.
Here are the basic steps of a Python example program
(https://github.com/tiian/lixa/blob/master/doc/examples/xta/python/example_xta_sa21.py):
# initialize XTA environment
Xta_Init()
# create a new PostgreSQL connection
# Note: using PostgreSQL Psycopg2 functions
rm1 = psycopg2.connect("dbname=testdb")
# create a new MySQL connection
# Note: using MySQLdb functions
rm2 = MySQLdb.connect("localhost", "lixa", "", "lixa")
# create a new XTA Transaction Manager object
tm = TransactionManager()
# create an XA resource for PostgreSQL
# second parameter "PostgreSQL" is descriptive
# third parameter "dbname=testdb" identifies the specific database
#
# how to retrieve PGconn * from rm1?!
xar1 = PostgresqlXaResource(rm1.conn, "PostgreSQL", "dbname=testdb")
Looking at the last statement, the stack is:- XTA native C library expects
"PGconn *" to register the connection handler- XTA C++ wrapper expects "PGconn
*" as the first parameter to construct the object- XTA Python (SWIG generated)
wrapper expects a "SWIG generated" PGconn * pointer- psycopg2.connect does not
provide me something equivalent to PGconn *, at least it seems so to me.
Stated that replacing "PGconn *" with "void *" in the API stack would not be an
issue, the question is: what's the best way to retrieve something that can be
transformed in a C pointer that could be passed to XTA constructor?
>From my point of view, this new API layout should solve most of the issues
>presented by the old style TX API that I explored some years ago:
>https://grokbase.com/t/postgresql/psycopg/122b1re71w/psycopg2-and-lixa
Thanks in advance for your help.
Regards,
Ch.F.