1)
The difference is the datasource type:
* local transactions
There is no two-phase-commit protocol to ensure consistency of distributed transactions
If you have only one datasource (mean also no JMS or other JCA involved) you can use this save
* XA transactions
Protocol to ensure consistency in distributed systems (search for XATransaction i.e. wikipedia)
If you have more than one database involved you should use this because of consistency
2)
You can have more than one datasource definition in one *-ds.xml file if you need
3)
I don't understand it exactly, but if you mean the difference of having one (with both definitions) or two ds.xml files the only difference is that you can not (un)deploy it separate.
The pools and connections are separate anyway.