DataNode obtains connections via a `javax.sql.DataSource`. If an application is deployed in a J2EE container, DataSource is normally provided by container via JNDI. For standalone applications (or if you don't want to use JNDI) Cayenne provides its own DataSource that includes connection pooling features. Whenever you select `org.apache.cayenne.conf.DriverDataSourceFactory` in the Modeler, you are choosing to use Cayenne DataSource.

Cayenne DataSource implementation is located in the `org.apache.cayenne.conn` package and is fully independent from the rest of the framework. Since Cayenne DataSource is chosen automatically, users rarely need to know more details. One notable exception are applications requiring users to interactively enter database login information. In this case you can write your own DataSource wrapper, and internally instantiate Cayenne DataSource (`org.apache.cayenne.conn.PoolManager`) after the user provides login and password.