If you really have an xa compatible driver you should be using its XADataSource class in the pool, not the fake xa jboss XADataSourceImpl. With the latter, even if it were to be working, there is a large chance you will actually be getting 2 independent transactions rather than one 2pc xa transaction.
I don't know if this is the cause of your problem here, however. I think in 2.4.3 you can use log4j logging to log more events on the transaction commit path to find out if XAResource.prepate and commit are actually getting called.
Thanks. I changed to use the drivers' own XA DataSource class but this just uncovered a whole bunch of other problems (because we'd never written code under a transactionally-aware setup)!
I've now got all our database code sorted (i.e. I can get multiple beans to participate in a distributed transaction when they both do database work), the problem now is with coordinating transactions between database work and JMS publishing within a session bean. I'm getting 'invalid transaction id' messages when I publish the message.
I shall persevere.