HIbernate con Pool de conexiones

Hola a todos como estan, me surge la siguiente inquietud, tengo un aplicativo en el cual la persistencia esta manejada con hibernate, la forma en que obtengo conexiones con la bd mysql es con el fichero hibernate.cfg.xml, el cual surge de la siguiente forma:

<?xml version="1.0" encoding="UTF-8"?>

org.hibernate.dialect.MySQLDialect
com.mysql.jdbc.Driver
jdbc:mysql://192.168.0.x:3306/NombreBd
userSecret

Pero me he dado cuenta que obtener una conexion, al abrir una sesion con hibernate hacia la base de datos, resulta muy costoso por ejemplo :
Session sesion1 = HibernateUtil.getSessionFactory().openSession(); Al hacer esto siempre se demora un tiempo mientras que abre la sesion,
entonces al momento de hacer cualquier transaccion y en el caso de que soporte muchos usuarios el aplicativo se moriria por decirlo de alguna forma, si dejo una sola sesion que realice esto, cuando hago sesion.close(), simplemente se cierra la sesion y me toca abrir una nueva por lo cual tardaria un tiempo en volver a realizarlo.

Se que puedo hacer esto mediante jndi o mediante un pool para hacer mas eficiente las transacciones con la bd, la cosa es que no se en concreto que tendria que hacer para obtener mediante hibernate la conexion con la bd mediante un pool de conexiones y en que sitios debo colocar los archivos de configuracion necesarios, la verdad no tengo mucha experiencia con hibernate, mi aplicativo usa el servidor de aplicaciones tomcat y todo se encuentra en el war no manejo ejbs y el proyecto ya esta avazado, mi preocupacion surge porque al momento de realizar pruebas encontre que es muy pobre el rendimiento del aplicativo con el manejo de sesions que estoy realizando actualmente, si alguien tiene algun ejemplo de como utilzar jndi o un pool se lo agradeceria muchisimo..

muchas gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Inyección de dependencias

Bueno pues eso de manener abierta una sesión pues puedes hacerlo con Spring y lo del pool con C3PO...

usando Spring le pones

        <bean id="sessionHibernate"  class="paquete.Clase" destroy-method="destroy">
                <property name="cualquierNombre">
                        <value>/WEB-INF/hibernate.cfg.xml</value>
                </property>
        </bean>

para usar la sesion configuras la dependencia

        <bean id="TuDao"  class="paquete.ClaseDao">
                <property name="tuVariableDeSesionEnClase" ref="sessionHibernate" />
        </bean>

En tu Case java llamas de la misma manera a tu sesion

Session session = tuVariableDeSesionEnClase.getCurrentSession ();

la configuracion de C3PO la encuentras aqui:
http://community.jboss.org/wiki/HowToconfiguretheC3P0connectionpool

Imagen de ezamudio

Pool

Antes de configurar c3p0 fíjate si tu contenedor ya contiene algún manejador para pools... JBoss por ejemplo trae su propio manejador. Tal vez el contenedor que uses ya traiga una manera de configurar pools a nivel contenedor y entonces sólo necesitas crear en tu app un proxy al DataSource via JNDI (con Spring también es muy fácil eso).

Imagen de rasilvap

gracias

Ok muchas gracias, que pena una pregunta ese archivo .poperties iria en la libreria del directorio web-inf? para el caso del C3PO o va en el archivo de configuaracion del hibernate y otra cosa como hago para llamar a ese pool en vez del que proporciona hibernate, esto se hace desde el hibernate.cfg.xml?
gracias

Imagen de rasilvap

servidor tomcat

Mi servidor es un tomcat...

Recomiendo el hibernate.cfg.xml

Ponlo e el hibernate.cfg.xml

"You also can set extra c3p0 properties using c3p0.properties. Put this file in the classpath (WEB-INF/classes for example), but be careful, the previous values will be overridden by Hibernate whether set or not (see below for more details). For more information on C3P0 configuration, please have a look at http://sourceforge.net/projects/c3p0 and unzip the download, there is a doc folder where you'll find everything you need.

For more on hibernate/c3p0 issues, see c3p0's docs at http://www.mchange.com/projects/c3p0/index.html#appendix_d "

fuente: http://community.jboss.org/wiki/HowToconfiguretheC3P0connectionpool

por certo, Tomcat no tene esas cosas que dice Enrique porque solo es un contenedor de Servlets no un servidor de aplicaciones, tendrias que configurar todo a pura patita... yo nunca lo he probado con JNDI pero con Spring si que lo he prbado y si funciona requete bien

para indicarle que usas al citripio dile a hibernate:

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>