Skip to content

fuxedo/fuxedo

Repository files navigation

Fuxedo

Making the world a better place through minimal message-oriented transport layers.

Build Status codecov Coverage Status

Why Fuxedo?

"Fuxedo is a one-piece tuxedo that combines the elegance of a tuxedo and the convenience of a jumpsuit."

Fuxedo is a toy project I started in late 2011 to play with C++11 and Boost libaries by building emulation of some Oracle Tuxedo APIs. Name of the project was just a word play about Tuxedo, BlackTie and "free"/"fun". Years later I have gained more experience and different bits and pieces about FML32, parsers, configuration files, shared memory, messages queues laying in my projects folder. I think it's time to put it all together.

It is also free to use, modify and distribute for commercial and non-commercial purposes.

What is Fuxedo?

Fuxedo is an open source implementation of X/Open XATMI specification and some Oracle Tuxedo extensions of the API. The goal is to provide source code compatibility with core Tuxedo functionality: ideally a recompilation will be sufficient to port software from Tuxedo to Fuxedo. Fuxedo also keeps Tuxedo's configuration file formats and conventions silently ignoring the obscure parts.

There is no definition of what "core functionality" is but I will start with the functions I use on daily basis. Things like TSAM, Jolt, SALT, queues and adapters are out of scope.

Currently C++17 is used as implementation language mostly to learn what the new standard offers. This choice makes some of XATMI C-style interfaces weird to implement but life is too short to write everything in C.

Currently implemented:

  • Typed buffers API
    • STRING - C-style null-terminated strings.
    • CARRAY - binary blobs.
    • FML32 - self-describing fielded buffer like binary XML or JSON. Supports multiple levels of nested FML32 buffers.
  • Boolean expressions of FML32 fielded buffers
  • Tuxedo-specific APIs
  • Programs
    • mkfldhdr32
    • ud32
    • tmloadcf/tmunloadcf
    • tmipcrm
    • buildserver
    • buildclient
    • buildtms
  • ...more to come

Supported API function list

  • Typed buffer functions
    • tpalloc
    • tprealloc
    • tpfree
    • tptypes
  • Service routine functions
    • tpservice
    • tpreturn
  • Advertising functions
    • tpadvertise
    • tpunadvertise
  • Request/response service functions
    • tpcall
    • tpacall
    • tpcancel
    • tpgetrply
  • Oracle Tuxedo XATMI extensions
    • tpimport/tpexport
    • tpinit/tpterm
  • Oracle Tuxedo XATMI transaction interface
    • tpopen/tpclose
    • tpbegin/tpabort/tpcommit
    • tpgetlev
    • tpsuspend/tpresume
  • X/Open TX interface
    • tx_open/tx_close
    • tx_begin/tx_rollback/tx_commit
    • tx_info
    • tx_set_commit_return/tx_set_transaction_control/tx_set_transaction_timeout
  • FML32
    • a lot
  • Boolean expressions
    • Fboolco32
    • Fboolpr32
    • Fboolev32
    • Ffloatev32

Compatibility with Oracle Tuxedo

Fuxedo tries to be compatible with Oracle Tuxedo for all functionality implemented so far. That is ensured by executing the same tests cases against both Fuxedo and Oracle Tuxedo:

  • Running make from install-tests folder will execute all "intergration tests" with whatever TUXDIR points to. That is done for every change in Fuxedo and time-to-time with Oracle Tuxedo 12.2
  • Part of unittests (FML32, Boolean expressions) are compiled and executed as "integration tests" under install-tests/unit

Some of the tests fail with Oracle Tuxedo and I have reported several issues to Oracle, some are fixed but require additional patches from Oracle to be installed.

More

Check out some other projects:

I'm interested to hear what features of Oracle Tuxedo your project is using and what should be implemented in Fuxedo. If you can share the code or let me take a look under NDA - even better.

For more information, support, features and development contact us at info@fuxedo.io