Pessoal,
Gostaria de saber como obter a informação o pool de conexões?
O contexto é o seguinte:
Alterei o peristence.xml do projeto Livraria do curso para utilizar Java_e_JSF_I_Sua_aplicação_web_com_JSF2 para utilizar o pool de conexões do c3p0 e habilitei o statistics do hibernate.
<persistence-unit name="livraria" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>br.com.caelum.testePoolCpHibV.modelo.Livro</class>
<class>br.com.caelum.testePoolCpHibV.modelo.Autor</class>
<class>br.com.caelum.testePoolCpHibV.modelo.Usuario</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/livrariadb" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="msid" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="hibernate.generate_statistics" value="true"/>
<property name="hibernate.connection.provider_class" value="org.hibernate.c3p0.internal.C3P0ConnectionProvider"/>
<property name="hibernate.c3p0.min_size" value="10" />
<property name="hibernate.c3p0.max_size" value="10" />
<property name="hibernate.c3p0.acquire_increment" value="1" />
<property name="hibernate.c3p0.idle_test_period" value="3000" />
<property name="hibernate.c3p0.max_statements" value="50" />
<property name="hibernate.c3p0.timeout" value="1800" />
</properties>
</persistence-unit>
Para obter informações das conexões criei os métodos abaixo na classe JPAUtil.
public static Statistics getStatistics(EntityManager em){
Session session = (Session) em.getDelegate();
SessionFactory sf = session.getSessionFactory();
Statistics stats = sf.getStatistics();
return stats;
}
public void logStatistics(EntityManager em) {
Statistics stats = getStatistics(em);
System.out.println("Número de conexões: " + stats.getConnectCount());
System.out.println("Número de conexões abertas: " + stats.getSessionOpenCount());
System.out.println("Número de conexões fechadas: " + stats.getSessionCloseCount());
}
Entretanto, não consigo identificar se o pool está realmente funcionando. As informações acimas somente estão associadas ao EM e não ao pool.
Sendo assim, gostaria de saber como monitorar a utilização do Pool de conexões, mostrar quantas conexões estão abertas no pool. Alguém saberia como fazer?