Bom dia galera,estou com uma duvida conceitual:
Estou dando manutenção uma aplicação feita em Spring e JPA e queria colocar um pool de conexões.Qual a melhor forma de gerenciar isso?Colocar pelo Spring ou no JPA?
Bom dia galera,estou com uma duvida conceitual:
Estou dando manutenção uma aplicação feita em Spring e JPA e queria colocar um pool de conexões.Qual a melhor forma de gerenciar isso?Colocar pelo Spring ou no JPA?
Nenhum dos dois…
O responsável por fazer o POOL é o container jee…
Spring e JPA apenas usam conexão no pool
Por isso, veja a doc da container em uso.
c3p0 ftw.
Eu responderia: depende!
Se você estiver usando um JBoss da vida ou um Glassfish ou qualquer outro Container J2EE, eu criaria um datasource lá e deixaria a responsabilidade de conexão para o AS. No Spring, bastaria você obter o datasource da seguinte forma:
Mas se você não estiver em um AS J2EE e sim em um tomcat, ou mesmo um aplicação desktop, você pode usar o C3P0 e deixar que o Spring gerencie o pool de conexão da seguinte forma:
<bean id="<dataSourceID>" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="<valor>" />
<property name="jdbcUrl" value="<valor>" />
<property name="user" value="<valor>" />
<property name="password" value="<valor>" />
<property name="initialPoolSize" value="1" />
<property name="minPoolSize" value="1" />
<property name="maxPoolSize" value="10" />
<property name="idleConnectionTestPeriod" value="200" />
<property name="acquireIncrement" value="1" />
<property name="maxStatements" value="0" />
<property name="numHelperThreads" value="3" />
</bean>
Lembrando que ambos os códigos acimas devem ser colocados no seu application context do Spring.
É isso!
Abs
A grande vantagem do JNDI é que você tem esta configuração fora da sua aplicação e portanto fica mais fácil de você alterar alguma coisa sem precisar parar a sua execução.
Por outro lado, já vi histórias de terror envolvendo uso compartilhado de recursos JNDI: coisas do tipo uma aplicação consumindo todo o pool e quando outra precisa, começar a sofrer sérios problemas de performance, falhas, etc.
Então, minha regra de ouro é a seguinte: