Esse é o meu primeiro artigo mais técnico que posto aqui no blog, também é o primeiro artigo em que trato da ferramenta de BI Pentaho. Não vou me prolongar muito e ficar explicando todos os conceitos e todas as funcionalidades da ferramenta, justamente pelo fato de que muita gente já fez isso e a internet está cheio de informação, inclusive em português. Para saber mais acessem Prof Coruja, já citado em post anterior onde falava do meu trabalho e tudo mais. Reservo-me apenas a descrever situações vividas por mim e que possam auxiliar outras pessoas que por ventura possam ter passado pelos mesmos apuros durante o desenvolvimento e adaptação essas e outras ferramentas que eu venha a utilizar.

Dado a devida introdução, como diz o título, irei falar sobre a lib c3p0. Sim para muitos esse nome é conhecido como nada mais nada menos que aquele andróide do universo de Star Wars que falava milhões de línguas e falava pelos cotovelos. Na verdade ele chama c-3PO, mas é quase igual então prefiro pensar que se inspiraram nele.

Mas enfim, afinal para que serve essa biblioteca. Bom eu também acho que não vou fazer um texto complexo e descritivo do que se trata a biblioteca, eu simplesmente posso dizer em como ela ajudou a solucionar um dos problemas que a nova versão do Pentaho estava causando.

Situação Atual

Após migrar o Pentaho para a nova versão estável 3.5.2 eu optei por fazer toda sua configuração com base no MySQL. Desde os usuários até as configurações estão todas dentro do MySQL e não mais usando a base padrão que acompanha a versão do sistema. Também alterei o arquivo de start para que não mais carregasse essa base de dados padrão do Pentaho.

O Problema

Percebi na manhã do dia seguinte a migração que as analises não estavam carregando. Todo o resto funcionava com exceção as analises e os relatórios, demorei a perceber que o problema era a conexão com o banco de dados que após um período padrão de 8 horas que o sistema ficasse sem uso a conexão com o banco era encerrada, fazendo com que o Tomcat se perdesse e não mais carregasse as analises e os relatórios.

A Solução

Após uma rápida consulta ao Oráculo<google>, obtive algumas respostas, coisas como a criação de scripts que ficassem testando a conexão de tempos em tempos para que ela não mais deixasse de existir, então pensei que isso não seria má idéia a não ser pelo fato que me parecia uma gambiarra e não uma solução. Foi então que encontrei a lib c3p0 que no caso faz à mesma coisa, mas tem um nome bonito e legal e se integra ao Pentaho perfeitamente. =D

Como Funciona

Primeiro faça o download da biblioteca:

http://sourceforge.net/projects/c3p0

Depois descompacte os arquivos em um diretório qualquer, o que importa é o arquivo c3p0-0.9.1.2.jar. Pelo menos nesse caso claro, ele se encontra dentro da pasta lib. Feito isso copie o arquivo para a seguinte pasta:

/biserver-ce/tomcat/webapps/pentaho/WEB-INF/lib

Agora deveram alterar o arquivo mysql5.hibernate.cfg.xml, que se encontro na seguinte pasta:

/biserver-ce/pentaho-solutions/system/hibernate

Após abrir o arquivo você deverá adicionar o código que segue abaixo depois da linha <session-factory> e antes da linha <property name=”cache.provider_class”>org.hibernate.cache.EhCacheProvider</property>.

Código a ser adicionado:

<!– hibernate c3p0 settings –>

<property name=”connection.provider_class”>org.hibernate.connection.C3P0ConnectionProvider</property>

<property name=”hibernate.c3p0.acquire_increment”>3</property>

<property name=”hibernate.c3p0.idle_test_period”>10</property>

<property name=”hibernate.c3p0.min_size”>5</property>

<property name=”hibernate.c3p0.max_size”>75</property>

<property name=”hibernate.c3p0.max_statements”>0</property>

<property name=”hibernate.c3p0.timeout”>25200</property>

<property name=”hibernate.c3p0.preferredTestQuery”>select 1</property>

<property name=”hibernate.c3p0.testConnectionOnCheckout”>true</property>

<!– hibernate cache settings –>

Feito isso reinicie seu BI server e a solução já está funcionando. Pelo que percebi o c3p0 irá testar a conexão JDBC de tempos em tempos para que a mantenha funcionando, tal qual faria o script gambiarra que citei no começo do artigo. Mas assim ficou muito mais bonito de se ver.

Segue o site da biblioteca c3p0, lá você encontrará toda a documentação e todas as coisas fantásticas que possivelmente ela deva fazer. (risos)

http://www.mchange.com/projects/c3p0/index.html