sexta-feira, 16 de janeiro de 2015

Passando o Pool de Conexões de Banco de Dados do Liferay 6.1 e para o Tomcat 7

Em teoria, a única diferença entre ter um container gerenciador do pool de conexões com o banco de dados ao invés de tê-lo na aplicação é ter possibilidade de monitorar a carga do pool usando interfaces padrão (JBoss console, ou visualVM). Dessa forma o administrador da aplicação pode avaliar e tomar decisão de aumentar o pool, caso necessário. Outra vantagem é poder trocar de servidor de banco de dados (Oracle para MySQL, por exemplo). A desvantagem é que se você usa spring, você vai ter mais trabalho para configurar testes do data source JNDI na suas unit tests (veja aqui)

Utilizamos a mesma classe (com.mchange.v2.c3p0.ComboPooledDataSource) que o liferay utiliza porém sem a customização que Liferay faz para incluir logs e já notamos alguma melhora na performance. Há outros gerenciadores de pool de conexões JNDI mas não chegamos a fazer testes com nenhum deles.

Para remover pool de conexões do Liferay 6.1 e passar para o Tomcat precisamos:

1) Parar o Liferay

2) Criar (ou editar caso já exista) o arquivo
liferay/apache-tomcat-7.x.xx/conf/Catalina/localhost/ROOT.xml
(não se se faz diferença, mas ROOT.xml maiúsculo!)

<Context path="" crossContext="true">
<Resource name="jdbc/liferayPool" auth="Container" type="com.mchange.v2.c3p0.ComboPooledDataSource"
maxPoolSize="100" minPoolSize="10" acquireIncrement="5" initialPoolSize="20" maxIdleTimeExcessConnections="3600"
idleConnectionTestPeriod="180"
debugUnreturnedConnectionStackTraces="true" unreturnedConnectionTimeout="300"
factory="org.apache.naming.factory.BeanFactory" description="Liferay JNDI Pool"
user="user" password="password" driverClass="oracle.jdbc.driver.OracleDriver"
jdbcUrl="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=service_name)))"/>
</Context>


3) Editar o arquivo portal-ext.properties
- comentar os parâmetros:
#jdbc.default.driverClassName
#jdbc.default.url
#jdbc.default.username
#jdbc.default.password
- incluir o parâmetro
jdbc.default.jndi.name=jdbc/liferayPool

Note que o jndi.name é o mesmo nome dado no Resource do arquivo ROOT.xml

5) Iniciar o Liferay

Saravá!

Mais informações nas documentações oficiais:
http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html
http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html
http://www.mchange.com/projects/c3p0/

Dicas extras:
http://javaguru.fi/blog/-/blogs/configuring-c3p0-connection-pool-for-liferay-on-tomcat
https://www.liferay.com/pt/web/pmesotten/blog/-/blogs/database-connection-pool-sharing-between-portal-and-portlets
http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency

Nenhum comentário:

Postar um comentário