3
respostas

C3P0 configurado no persistence.xml porém ComboPooledDataSource retora informacoes erradas

Olá Pessoal!

Eu estou fazendo o curso de JPA avançado e por nao ter um projeto spring eu fiz um projeto desktop e implementei o hibernate normalmente. Diferente da aula, tive que fazer a configuracao de pool de conexao via persistence XML :

        <properties>    
            <!-- Configurações específicas do Hibernate -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />

            <!-- Propriedades JDBC -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/financas" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="123" />

            <property name="connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/> 
            <property name="hibernate.c3p0.min_size" value="10" />
            <property name="hibernate.c3p0.max_size" value="20" />
            <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>

Porém, quando tento recuperar as dados de conexoes utilizadas ou retornar a configuracao de pool, a instancia do objeto ComboPooledDataSource me retorna dados incorretos.

        EntityManager em = JPAUtil.getEntityManager();

        ComboPooledDataSource ds = new ComboPooledDataSource();
        System.out.println("Numero de conexoes: " + ds.getMaxPoolSize());

No exemplo acima o retorno é igual a 15, max eu setei o maximo de conexoes para 20.

Conseguem entender o problema?

3 respostas

Vc está instanciando um objeto do tipo ComboPooledDataSource que não tem nenhuma relação com o que foi configurado no persistence.xml. O pool é usado internamente pelo hibernate, vc não tem acesso.

Há algum modo de relacionar a informação do persistence.xml ao objeto em questão?

Senão, haveria outra forma de fazer? Digo, retornar os dados de uso das conexões e tal.

Oi Cleiton, o Hibernate te expõe a Connection, mas não o objeto do datasource. É, eu não conheço nenhuma forma :(.