[id='datasource_config']
= Datasource Configuration for JDBC Cache Stores
{brandname} server configuration for datasources is composed of two sections:

* A `connection factory` that defines how to connect to the database.
* A `connection pool` that defines how to pool and reuse connections.

[source,xml,options="nowrap",subs=attributes+]
----
<data-sources>
   <data-source name="ds" jndi-name="jdbc/datasource" statistics="true"> <1>
      <connection-factory driver="org.database.Driver" <2>
                          username="db_user" <3>
                          password="secret" <4>
                          url="jdbc:db://database-host:10000/dbname" <5>
                          new-connection-sql="SELECT 1" <6>
                          transaction-isolation="READ_COMMITTED"> <7>
         <connection-property name="name">value</connection-property> <8>
      </connection-factory>
      <connection-pool
         initial-size="1" <9>
         max-size="10" <10>
         min-size="3" <11>
         background-validation="1000" <12>
         idle-removal="1" <13>
         blocking-timeout="1000" <14>
         leak-detection="10000"/> <15>
   </data-source>
</data-sources>
----

<1> Defines a datasource name, JNDI name, and whether to enable statistics collection.
<2> Specifies the JDBC driver that creates connections. Place driver JARs in the `server/lib` directory.
<3> Specifies a username for the connection.
<4> Specifies a corresponding password for the connection.
<5> Specifies the JDBC URL specific to the driver in use.
<6> Adds a query that verifies new connections.
<7> Configures one of the transaction isolation levels for the connection: `NONE`, `READ_UNCOMMITTED`, `READ_COMMITTED`, `REPEATABLE_READ`, `SERIALIZABLE`.
<8> Sets optional JDBC driver-specific connection properties.
<9> Defines the initial number of connections the pool contains.
<10> Sets the maximum number of connections in the pool.
<11> Sets the minimum number of connections the pool should contain.
<12> Specifies the time, in milliseconds, between background validation runs.
<13> Specifies the time, in minutes, a connections can remain idle before it is removed.
<14> Specifies the amount of time, in milliseconds, to block while waiting for a connection, after which an exception is thrown.
<15> Specifies the time, in milliseconds, a connection can be held before a leak warning occurs.
