The doc for DataSource is pretty clear: "A factory for connections to the physical data source that this DataSource object represents." So you get connections from the DataSource. It also points out that maintaining a connection pool or supporting distributed transactions are optional.
One nice thing is that datasources are configured outside the code so we can switch databases or even database vendors without touching any of the code.
A good question is never answered. It is not a bolt to be tightened into place but a seed to be planted and to bear more seed toward the hope of greening the landscape of the idea. John Ciardi