psqlodbcドライバによるXA-Compliantな? DB接続シミュレーション

前回記載のone-pipe方式の動作が気になったので調べてみた。前回はWindows2000だったが、今回はWindowsXP SP2を使用した。securityを強化しているせいか、なかなか動作せずに(XARMCreateでエラー)苦労したが、なんとか動作するようになった。実行内容を確認してみると、2000の場合と違ってxa_prepare()やxa_commit()が勝手に発行されているようには見えない。ということで今回のXPでの実行結果は説明に書かれているとおりになっているようだ。この方式の場合、xa_prepare()やxa_commit()などの発行はユーザーサイドの責任ということになっており、ということは、突き詰めていくとXA標準に則っている必要すらないということになるだろう。MSDTCプロセスから直接発行されるのはxa_recover()(とxa_open/close())だけのようで、それ以外は適当に対応すれば済んでしまうように思われる。PGの現状の実装でももしかしたら対応可能かもしれない。もっともxa_recover()は今のままでは実装しようがないが。そもそも中途半端にXAに依存せず、MSDTCを直接サポートするほうが話は簡単なのかもしれない。
ちょっと気になる点が一つ。生きていて欲しいCOM?オブジェクトが早死にしてしまう場合があるらしいこと。in-processのITransactionResourceAsymcオブジェクトをODBCドライバ内に生成しているのだが、タイミングによってはこのオブジェクトがcommitのフェーズを処理終了する前に、ODBCドライバ自身がプロセスからdetachされてしまうケースがあるのである。死なないようにと自分自身で自分自身をLoadLibraryしてみたが、矢張り死んでしまう所を見ると呼び出しプロセス自体が終了してしまうのかもしれない。このままではcommitフェーズの保証が出来ない、困った困った。実はCOM?オブジェクトをCOMを使わず手抜きで作成しているのだけれどこれが原因かもしれない。真面目に作成して再度試みるつもりである。