Se aconseja que la org.hibernate.SessionFactory cree y almacene en pool conexiones JDBC por usted Si adopta este enfoque el abrir una org.hibernate.Session es tan simple como

Session session = sessions.openSession() // open a new Session
En el momento en que inicie una tarea que requiera entrada a la fundamento de datos se obtendrá una conexión JDBC del pool.

Para que esto funcione primero requiere pasar determinadas las propiedades de conexión JDBC a Hibernate. Todos los nombres de las propiedades de Hibernate y su semántica están definidas en la clase org.hibernate.cfg.Environment. Ahora describiremos las configuraciones más significativos para la conexión JDBC.

Hibernate obtendrá y tendrá en pool las conexiones utilizando java.sql.DriverManager si configura las próximos propiedades

Propiedades JDBC de Hibernate

Nombre de la propiedad Propósito
hibernate.connection.driver_class JDBC driver class
hibernate.connection.url JDBC URL
hibernate.connection.username database user
hibernate.connection.password database user password
hibernate.connection.pool_size maximum number of pooled connections

Sin embargo el algoritmo de pooling de la conexión particular de Hibernate es algo rudimentario. Está concebido para ayudarle a comenzar y no para utilizarse en un sistema de producción ni siquiera para pruebas de rendimiento. Para conseguir un mejor rendimiento y continuidad debe utilizar un pool de terceros. Sólo remplace la propiedad hibernate.connection.pool_size con configuraciones específicas del pool de conexiones. Esto desactivará el pool interno de Hibernate. Por ejemplo es probable utilizar C3P0.

C3P0 es un pool de conexiones JDBC de código abierto distribuido junto con Hibernate en el directorio lib. Hibernate utilizará su org.hibernate.connection.C3P0ConnectionProvider para pooling de conexiones si constituye propiedades hibernate.c3p0.*. Si desea utilizar Proxool refiérase a hibernate.properties incluído en el paquete y al sitio web de Hibernate para conseguir más información.

Aquí hay un archivo hibernate.properties de ejemplo para c3p0

hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbcpostgresql//localhost/mydatabase
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
Para su utilización dentro de un servidor de aplicaciones casi siempre usted debe configurar Hibernate para conseguir conexiones de un javax.sql.Datasource del servidor de aplicaciones registrado en JNDI. Necesitará establecer al menos una de las próximos propiedades

Propiedades de la Fuente de Datos de Hibernate

Nombre de la propiedad Propósito
hibernate.connection.datasource datasource JNDI name
hibernate.jndi.url URL del proveedor JNDI (opcional)
hibernate.jndi.class clase del JNDI InitialContextFactory (opcional)
hibernate.connection.username usuario de la fundamento de datos (opcional)
hibernate.connection.password contraseña del usuario de la fundamento de datos (opcional)

He aquí un archivo hibernate.properties de ejemplo para una fuente de datos JNDI provisto por un servidor de aplicaciones

hibernate.connection.datasource = java/comp/env/jdbc/test
hibernate.transaction.factory_class = \
org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_lookup_class = \
org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
Las conexiones JDBC adquiridas de una fuente de datos JNDI participarán automáticamente en las transacciones del servidor de aplicaciones administradas por el contenedor.

Pueden darse propiedades de conexión arbitrarias anteponiendo hibernate.connnection al nombre de propiedad de la conexión. Por ejemplo puede especificar una propiedad de conexión charSet usando hibernate.connection.charSet.

Puede definir su particular táctica plugin para conseguir conexiones JDBC implementando la interfaz org.hibernate.connection.ConnectionProvider y especificando su particular implementación personalizada por recurso de la propiedad hibernate.connection.provider_class.