Fwd: Configuração C3P0

450 views
Skip to first unread message

Jonnys Gomes

unread,
Jan 26, 2014, 8:20:23 AM1/26/14
to jav...@googlegroups.com


---------- Mensagem encaminhada ----------
De: Jonnys Gomes <jonny...@gmail.com>
Data: 25 de janeiro de 2014 11:54
Assunto: Configuração C3P0
Para: jav...@googlegroups.com


Olá pessoal, 

Estou utilizando Spring (3.1.0) e JPA (Hibernate) em meu projeto. Meu servidor de aplicações é o Jetty. Minha dúvida é sobre o C3P0. Eu adicionei a biblioteca no pom.xml:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>4.1.10.Final</version>
</dependency>

 e escrevi a configuração no persistence.xml

<properties>
    ...
    <property name="connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" />
    <property name="hibernate.c3p0.min_size" value="8" />
    <property name="hibernate.c3p0.max_size" value="30" />
    <property name="hibernate.c3p0.acquire_increment" value="1" />
    <property name="hibernate.c3p0.max_statements" value="0" />
    <property name="hibernate.c3p0.timeout" value="1800" />
    <property name="hibernate.c3p0.idle_test_period" value="60" />
    ...
</properties>


Mas quando subo a aplicação no Jetty não vejo nenhum Log sobre o C3P0. E depois de algum tempo recebo o seguinte erro:

HTTP ERROR 500

...

Caused by:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 52.337.941 milliseconds ago....
...

Caused by:

java.net.SocketException: Broken pipe
...

Então estou desconfiando de que o C3P0 não está funcionando. Daí, minhas perguntas: Essa configuração está correta para o C3P0 ou precisa de mais alguma coisa? Como eu posso me certificar de que o C3P0 está funcionando?

Obrigado.

--
Atenciosamente,

Jonnys Gomes.



--
Atenciosamente,

Jonnys Gomes.

Carlos Martins

unread,
Jan 26, 2014, 7:10:20 PM1/26/14
to jav...@googlegroups.com
Eu estou usando dessa forma com GlassFish 4.0 e ta funfando de boa sem problemas


pom.xml

<dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-c3p0</artifactId>
     <version>4.2.4.Final</version>
</dependency>  

persistence.xml

<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
 <property name="hibernate.c3p0.idle_test_period">10</property>
 <property name="hibernate.c3p0.acquire_increment">5</property>
 <property name="hibernate.c3p0.min_size">5</property>
 <property name="hibernate.c3p0.max_size">30</property>
 <property name="hibernate.c3p0.max_statements">0</property>
 <property name="hibernate.c3p0.timeout">28000</property>

Tenta ai.
abç

Rafael Ponte

unread,
Jan 27, 2014, 6:09:16 AM1/27/14
to jav...@googlegroups.com, javace
Olá,

Normalmente eu deixo o Spring cuidar do pool de conexões (assim como do JPA/Hibernate), você pode ver um exemplo neste projeto,

Comece pelo simples. Faça o c3p0 básico funcionar e depois vá adicionando parâmetros de configuração!



2014-01-26 Carlos Martins <guttom...@gmail.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para javasf+un...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/javasf.
Para ver esta discussão na web, acesse https://groups.google.com/d/msgid/javasf/CA%2B%2BS-me6k-LKYpFWkYdZs%3DxyA9rz%2Bz_dYTzWb7nfm-TXT%2Br8ZQ%40mail.gmail.com.

Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--
Rafael Ponte
http://www.triadworks.com.br

Arthur Ferreira

unread,
Jan 27, 2014, 8:26:11 AM1/27/14
to jav...@googlegroups.com, javace
Só um adendo: Servidores de aplicação como JBoss, Weblogic, Glassfish e Websphere já possuem seus gerenciadores de conexão. É extremamente recomendado que deixem a cargo dos servidores cuidarem disso, pois são otimizados com suas próprias lógicas. Eu só não tenho certeza se o mesmo se aplica ao Tomcat, TomEE e Jetty. 

Se usam datasources configurados nos servidores, não usem C3P0 e principalmente não usem o pool padrão do Hibernate. Esse padrão do Hibernate, conforme a documentação diz, é só para testes. Ele não é otimizado (nem um pouquinho) para ambientes de produção.

Arthur Franco Ferreira 
Analista Desenvolvedor Web Java (Sênior) e .NET (Pleno)
Licenciado em Computação pela UNILASALLE-RJ
Instrutor Caelum
http://www.linkedin.com/in/arthurferreira


2014-01-27 Rafael Ponte <rpo...@gmail.com>

Jonnys Gomes

unread,
Jan 27, 2014, 9:15:26 AM1/27/14
to jav...@googlegroups.com
Olá Pessoal, obrigado pelas respostas.

Carlos Martins, 

Coloquei a configuração que você passou no meu applicationContext.xml e tive os seguintes problemas:

<!-- Config -->
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.idle_test_period">10</property>
<property name="hibernate.c3p0.acquire_increment">5</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">30</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.c3p0.timeout">28000</property>
....

Problemas:

Caused by: 
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]

Caused by: 
org.hibernate.HibernateException: Could not instantiate connection provider []

Caused by: 
org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [] as strategy [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]

Então mudei apenas a forma de passar os parâmetros:

<property name="hibernate.current_session_context_class" value="thread" />
<property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" />
<property name="hibernate.c3p0.idle_test_period" value="50" />
<property name="hibernate.c3p0.acquire_increment" value="1" />
<property name="hibernate.c3p0.min_size" value="5" />
<property name="hibernate.c3p0.max_size" value="30" />
<property name="hibernate.c3p0.max_statements" value="0" />
<property name="hibernate.c3p0.timeout" value="1800" />

E tive esses problemas:

Caused by: 
org.hibernate.HibernateException: Could not instantiate connection provider [org.hibernate.connection.C3P0ConnectionProvider]

Caused by: 
java.lang.ClassCastException: org.hibernate.connection.C3P0ConnectionProvider cannot be cast to org.hibernate.engine.jdbc.connections.spi.ConnectionProvider

Estou usando a versão que você me passou;

<dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-c3p0</artifactId>
     <version>4.2.4.Final</version>
</dependency> 

E a versão do hibernate que estou utilizando é hibernate-core-4.3.0.Final. Tem alguma outra configuração em algum outro lugar? web.xml ou algo assim?




Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--
Atenciosamente,

Jonnys Gomes.

Jonnys Gomes

unread,
Jan 27, 2014, 9:21:28 AM1/27/14
to jav...@googlegroups.com
Rafael Ponte, 

Fiz a configuração como no seu exemplo:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<!-- Database -->
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/blablabla" />
<property name="user" value="********" />
<property name="password" value="********" />
<!-- C3P0 -->
<property name="initialPoolSize" value="3" />
<property name="minPoolSize" value="3" />
<property name="maxPoolSize" value="20" />
<property name="idleConnectionTestPeriod" value="100" />
<property name="acquireIncrement" value="1" />
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<!-- <property name="showSql" value="true" /> -->
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
</bean>
</property>
<property name="jpaProperties">
<props>
<!-- <prop key="hibernate.format_sql">true</prop> -->
<prop key="hibernate.hbm2ddl.auto">create</prop> <!-- create | create-drop | validate | update -->
<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
</props>
</property>
</bean>


--
Atenciosamente,

Jonnys Gomes.

Jonnys Gomes

unread,
Jan 27, 2014, 9:29:55 AM1/27/14
to jav...@googlegroups.com
Pessoal mais uma vez obrigado pelas respostas e desculpem o último email que enviei incompleto :P
Aparentemente está tudo funcionando bem, mas não apareceu nenhum log sobre o C3P0 quando eu subi a aplicação no Jetty.
Como eu posso me certificar de que C3P0 está funcionando?
--
Atenciosamente,

Jonnys Gomes.

hermogenes Silva

unread,
Jan 27, 2014, 4:25:17 PM1/27/14
to jav...@googlegroups.com
Olá pessoal,
Coincidência, estou com um problema parecido mas estou utilizando o hibernate.property

#hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider
hibernate.c3p0.idle_test_period 10
hibernate.c3p0.acquire_increment 5
hibernate.c3p0.min_size 5
hibernate.c3p0.max_size 30
hibernate.c3p0.max_statements 0
hibernate.c3p0.timeout 28000

Ao executar a aplicação é mostrado no log um item hibernatePool_Size 20 porém não há essa configuração nas propriedades. Além disso é mostrado no log que algo informando que o HibernatePool não pode ser utilizado em produção.

Lembrando que estou utilizando a versão 4.3 do hibernate em uma aplicação simples. Na versão anterior 3.6 hibernate esta configuração não mostrava esses logs.

É importante ressaltar com essa configuração o sistema roda normal porém ele não pega as configurações do C3p0.


Ao habilitar (descomentar) a opção:
hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider

É mostrada a mensagem de erro abaixo

org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]



Bem acredito que a configuração está certa, porém falta algo a mais para aceitar o C3p0. Na documentação do hibernete Cap. 3 diz que para desabilitar o pool do hibernate é necessário trocar o parametro hibernatePool_Size por um parâmetro similar do C3p0.


Alguém já passou por isso? Agradeço a ajuda.






hermogenes Silva

unread,
Jan 29, 2014, 11:06:10 PM1/29/14
to jav...@googlegroups.com
Olá Pessoal,
Para funcionar o pool C3p0 é necessário colocar no projeto as duas bibliotecas abaixo:
        <!-- Hibernate c3p0 connection pool -->
        <dependency>       
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>



        <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>4.3.0.Final</version>
    </dependency>


Para você saber se está funcionando realmente será mostrado um log assim:
23:59:38,817  INFO Version:66 - HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
23:59:38,832  INFO Version:54 - HHH000412: Hibernate Core {4.3.0.Final}
23:59:38,848  INFO Environment:224 - HHH000205: Loaded properties from resource hibernate.properties: {hibernate.connection.password=****, hibernate.c3p0.acquire_increment=1, hibernate.jdbc.batch_versioned_data=true, hibernate.query.substitutions=true 1, false 0, yes 'Y', no 'N', hibernate.cache.region_prefix=hibernate.test, hibernate.c3p0.idle_test_period=1800, hibernate.proxool.pool_alias=pool1, hibernate.c3p0.max_statements=0, hibernate.bytecode.use_reflection_optimizer=false, hibernate.c3p0.validate=false, hibernate.c3p0.timeout=3600, hibernate.default_batch_fetch_size=8, hibernate.c3p0.idle_test_period"=15, hibernate.temp.use_jdbc_metadata_defaults=false, hibernate.generate_statistics=true, hibernate.c3p0.maxPoolSize=15, hibernate.c3p0.acquireRetryAttempts=3, hibernate.jdbc.use_streams_for_binary=true, hibernate.max_fetch_depth=2, <!--=Número de segundos que conexões acima do limite minPoolSize deverão permanecer , hibernate.c3p0.min_size=5, hibernate.format_sql=true, hibernate.connection.username=postgres, hibernate.connection.isolation=4, hibernate.connection.driver_class=org.postgresql.Driver, hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider, hibernate.c3p0.max_size=600, hibernate.connection.provider_class=org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider, hibernate.c3p0.minPoolSize=3 , hibernate.order_updates=true, hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect, hibernate.connection.url=jdbc:postgresql://localhost/postgres}
23:59:38,848  INFO Environment:257 - HHH000407: Using java.io streams to persist binary types
23:59:38,848  INFO Environment:346 - HHH000021: Bytecode provider name : javassist
23:59:39,035  INFO ConnectionProviderInitiator:190 - HHH000130: Instantiating explicit connection provider: org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
23:59:39,066  INFO C3P0ConnectionProvider:133 - HHH010002: C3P0 using driver: org.postgresql.Driver at URL: jdbc:postgresql://localhost/postgres
23:59:39,066  INFO C3P0ConnectionProvider:134 - HHH000046: Connection properties: {user=postgres, password=****}
23:59:39,066  INFO C3P0ConnectionProvider:137 - HHH000006: Autocommit mode: false
23:59:39,066  WARN C3P0ConnectionProvider:252 - HHH010001: Both hibernate-style property 'hibernate.c3p0.min_size' and c3p0-style property 'hibernate.c3p0.minPoolSize' have been set in Hibernate properties.  Hibernate-style property 'hibernate.c3p0.min_size' will be used and c3p0-style property 'hibernate.c3p0.minPoolSize' will be ignored!
23:59:39,082  WARN C3P0ConnectionProvider:252 - HHH010001: Both hibernate-style property 'hibernate.c3p0.max_size' and c3p0-style property 'hibernate.c3p0.maxPoolSize' have been set in Hibernate properties.  Hibernate-style property 'hibernate.c3p0.max_size' will be used and c3p0-style property 'hibernate.c3p0.maxPoolSize' will be ignored!
23:59:39,550  INFO C3P0ConnectionProvider:222 - HHH000149: JDBC isolation level: REPEATABLE_READ
23:59:39,565  INFO Dialect:145 - HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
23:59:39,582  INFO LobCreatorBuilder:88 - HHH000422: Disabling contextual LOB creation as connection was null
23:59:39,832  INFO TransactionFactoryInitiator:62 - HHH000399: Using default transaction strategy (direct JDBC transactions)
23:59:39,832  INFO ASTQueryTranslatorFactory:47 - HHH000397: Using ASTQueryTranslatorFactory


Pronto resolvido...



Reply all
Reply to author
Forward
0 new messages