I see your point and I do accept that 2PC can be one of major bottlenecks in a system. In fact I see that these-days the world is trying its best to eliminate the need to XA by various other techniques. Meanwhile there are occasions that 2PC is the (only) answer and any other attempt would risk correctness.
Then we came to Soheil's question. Well, first of all I definitely reject JOTM. It _was_ a good movement one day but I don't see any active development/bug-fixes anymore. There are various bugs either with JOTM itself or with its bounded pooling systems; XAPool.
I have done some benchmarks on some other open-source and commercial transaction managers. It is very hard to say which one is better since in fact there is not much thing to be done inside of transaction-manager. The most important factor, for sure is the driver itself. The way XA driver works with your resource and the amount of IQ it has is the main player.
Then we came to manager itself. IMO main points a TM should handle are 1) Heuristic decisions 2) Disk-force 3) Statement pooling; and these elements results in minor differences in TPS. Disk force for example has its impact either on performance or journaling. One you enforce sync disk journaling you will lose perfomance a will but will gain greater crash-recovery in return.
IMHO I would recommend these TMs: 1) Bitronix 2) AtomikosTE 3) WebLogicTM 4) JBossTS. It's hard to believe but for me BTM does the best. It's a small and handy manager but does its job very well. WLS is cool but your are somehow bound to BEA. Atomikos is also a good alternative if you censored about recovery.
2 cents again and I will try to publish my benchmarks if I find a few minutes of spare time