15 de novembro de 2014

Integração Pentaho BA 5.2 CE com PostgreSQL 9.3

Veja aqui como integrar o Pentaho Business Analytics (BA) 5.2 Comminity Edition (CE) ao Sistema Gerenciador de Banco de Dados (SGBD) PostgreSQL 9.3. Acredito que esta instalação não seja mais novidade, no entanto, vários profissionais preferem consultar uma documentação mais atualizada. E como estou precisando realizar esta integração agora, apenas vou descrever aqui os passos à medida em que eu for realizando os procedimentos.
Como já é sabido, a partir da versão 5.0 a Pentaho optou por utilizar um gerenciador de conteúdos para armazenar o repositório da soluções, contrário às versões anteriores que utilizavam diretamente o sistema de arquivos. Este gerenciador de conteúdos é o Apache Jackrrabit, que por padrão vem pré configurado na versão CE, utilizando o SGBD H2. Então vamos precisar migrar o banco chamado "jackrabbit", que recebe o mesmo nome do gerenciador de conteúdos, assim como, os tradicionalmente utilizados pela Pentaho, o hibernate e o quartz que utilizam o SGBD HSQLDB.
Antes de iniciar a integração, é necessário que você providencie a instalação do Pentaho BA 5.2 CE e do SGBD PostgreSQL. Consulte os links citados abaixo para realizar estas tarefas.

1 -  Criação da estrutura básica de bancos de dados do PostgreSQL
Agora que estamos com o Pentaho BA 5.2 e o PostgreSQL funcionais, podemos iniciar a migração.
Então, inicialmente, vamos preparar os bancos de dados, utilizando os scripts disponibilizados na própria instalação do biserver-ce.
Tendo como referência a instalação do Pentaho BA 5.2, copie a pasta dos scripts do PostgreSQL para outra pasta, ou se for o caso de utilizar um servidor dedicado para o SGBD, copie para uma pasta neste servidor.
~# cp -rv ./biserver-ce/data/postgresql /tmp

Utilizando o usuário "postgres" ou "superuser" do PostgreSQL, execute os scripts para criação da estrutura básica, ou seja, bancos de dados e/ou tabelas.
~# su - postgres
~$ psql -p 5432 -f /tmp/postgresql/create_repository_postgresql.sql
~$ psql -p 5432 -f /tmp/postgresql/create_quartz_postgresql.sql
~$ psql -p 5432 -f /tmp/postgresql/create_jcr_postgresql.sql

No PostgreSQL, utilizando o "psql", crie a tabela "QRTZ" no banco do "quartz".
~$ psql
postgres=# \c quartz;
 CREATE TABLE "QRTZ"
(
NAME VARCHAR(200) NOT NULL,
PRIMARY KEY (NAME)
);

Observe que os bancos foram criados.
~$ psql
postgres=# \l
                                           List of databases
      Name       |    Owner     | Encoding |   Collate   |    Ctype    |       Access privileges      
-----------------+--------------+----------+-------------+-------------+-------------------------------
 hibernate   | hibuser | UTF8     | pt_BR.UTF-8 | pt_BR.UTF-8 | =Tc/hibuser +                  |              |          |             |             | hibuser=CTc/hibuser
 jackrabbit  | jcr_user  | UTF8     | pt_BR.UTF-8 | pt_BR.UTF-8 | =Tc/jcr_user  +                  |              |          |             |             | jcr_user=CTc/jcr_user
 quartz       | pentaho_user | UTF8     | pt_BR.UTF-8 | pt_BR.UTF-8 | =Tc/pentaho_user             +

Não esquecer de habilitar o acesso a estes bancos, para o Pentaho BA, no "pg_hba.conf". Na dúvida, veja este post "Configurações adicionais para PostgreSQL 9.1", que serve também para a versão 9.3 do PostgreSQL.

2 - Configuração do PostgreSQL no Pentaho BA 5.2 CE
Pare o serviço do Pentaho BA / PUC.
Faça um backup do Pentaho BA 5.2. Veja um exemplo a seguir.
~# mkdir /opt/backups
~# tar -vzcf /opt/backups/biserver-ce-aaaammdd.tar.gz ./biserver-ce

Vamos configurar os principais parâmetros dos arquivos, utilizando as configurações padrões utilizadas nos scripts, sendo:
Banco de Dados      Usuário             Senha
hibernate                   hibuser                 password
quartz                         pentaho_user      password
jackrabbit                   jcr_user                password

Altere somente as informações que estão em destaque.

Arquivo: "./tomcat/webapps/pentaho/META-INF/context.xml".
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/pentaho" docbase="webapps/pentaho/">
<Resource name="jdbc/Hibernate"
     auth="Container" type="javax.sql.DataSource"
     factory="org.apache.commons.dbcp.BasicDataSourceFactory"
     maxActive="20" maxIdle="5"
     maxWait="10000"
     username="hibuser"
     password="password"
     driverClassName="org.postgresql.Driver"
     url="jdbc:postgresql://localhost:5432/hibernate"
     validationQuery="select 1"/>
<Resource name="jdbc/Quartz"
     auth="Container"
     type="javax.sql.DataSource" 
     factory="org.apache.commons.dbcp.BasicDataSourceFactory"
     maxActive="20"
     maxIdle="5"
     maxWait="10000"
     username="pentaho_user"
     password="password"
     driverClassName="org.postgresql.Driver"
     url="jdbc:postgresql://localhost:5432/quartz"
     validationQuery="select 1"/>
</Context>

 
Exclua este Arquivo: "./tomcat/conf/Catalina/localhost/pentaho.xml".
~# sudo rm -rf ./tomcat/conf/Catalina/localhost/pentaho.xml

Arquivo: "./pentaho-solutions/system/dialects/postgresql/applicationContext-spring-security-hibernate.properties".
jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/hibernate
jdbc.username=hibuser
jdbc.password=password
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

Arquivo: "./pentaho-solutions/system/applicationContext-spring-security-hibernate.properties".
jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/hibernate
jdbc.username=hibuser
jdbc.password=password
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
 


Arquivo: "./pentaho-solutions/system/hibernate/hibernate-settings.xml".
<config-file>system/hibernate/postgresql.hibernate.cfg.xml</config-file>

Arquivo: "./pentaho-solutions/system/hibernate/postgresql.hibernate.cfg.xml".
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="connection.url">jdbc:postgresql://localhost:5432/hibernate</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="connection.username">hibuser</property>
<property name="connection.password">password</property>


Arquivo: "./pentaho-solutions/system/jackrabbit/repository.xml".
Neste arquivo, é necessário a correção em vários parâmetros. Utilize o nome da classe como referência, para certificar que todas as modificações foram realizadas. Observe que as configurações referentes ao banco h2 são comentadas e as do PostgreSQL descomn
Classe: "org.apache.jackrabbit.core.fs.local.LocalFileSystem".
-->
<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
     <param name="driver" value="org.postgresql.Driver"/>
     <param name="url" value="jdbc:postgresql://localhost:5432/jackrabbit"/>
     <param name="user" value="jcr_user"/>
     <param name="password" value="password"/>
     <param name="schema" value="postgresql"/>
     <param name="schemaObjectPrefix" value="fs_repos_"/>
</FileSystem>
<!--
<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
     <param name="path" value="${rep.home}/repository"/>
</FileSystem>
-->

Classe: "org.apache.jackrabbit.core.data.db.DbDataStore".
-->
<DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore">
     <param name="url" value="jdbc:postgresql://localhost:5432/jackrabbit"/>
     <param name="driver" value="org.postgresql.Driver"/>
     <param name="user" value="jcr_user"/>
     <param name="password" value="password"/>
     <param name="databaseType" value="postgresql"/>
     <param name="minRecordLength" value="1024"/>
     <param name="maxConnections" value="3"/>
     <param name="copyWhenReading" value="true"/>
     <param name="tablePrefix" value=""/>
     <param name="schemaObjectPrefix" value="ds_repos_"/>
</DataStore>
<!--
<DataStore class="org.apache.jackrabbit.core.data.FileDataStore"/>
-->

 
Classe: "org.apache.jackrabbit.core.fs.db.DbFileSystem".
-->
<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
     <param name="driver" value="org.postgresql.Driver"/>
     <param name="url" value="jdbc:postgresql://localhost:5432/jackrabbit"/>
     <param name="user" value="jcr_user"/>
     <param name="password" value="password"/>
     <param name="schema" value="postgresql"/>
     <param name="schemaObjectPrefix" value="fs_ws_"/>
</FileSystem>
<!--
<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
     <param name="path" value="${wsp.home}"/>
</FileSystem>
-->

Classe: "org.apache.jackrabbit.core.persistence.bundle.PostgreSQLPersistenceManager".
-->
<PersistenceManager
     class="org.apache.jackrabbit.core.persistence.bundle.PostgreSQLPersistenceManager">
     <param name="url" value="jdbc:postgresql://localhost:5432/jackrabbit"/>
     <param name="driver" value="org.postgresql.Driver"/>
     <param name="user" value="jcr_user"/>
     <param name="password" value="password"/>
     <param name="schema" value="postgresql"/>
     <param name="schemaObjectPrefix" value="${wsp.name}_pm_ws_"/>
</PersistenceManager>
<!--
<PersistenceManager 
     class="org.apache.jackrabbit.core.persistence.pool.H2PersistenceManager">
     <param name="url" value="jdbc:h2:${wsp.home}/db"/>
     <param name="schemaObjectPrefix" value="${wsp.name}_"/>
</PersistenceManager>
-->

Classe: "org.apache.jackrabbit.core.fs.db.DbFileSystem".
-->
    <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
      <param name="driver" value="org.postgresql.Driver"/>
      <param name="url" value="jdbc:postgresql://localhost:5432/jackrabbit"/>
      <param name="user" value="jcr_user"/>
      <param name="password" value="password"/>
      <param name="schema" value="postgresql"/>
      <param name="schemaObjectPrefix" value="fs_ver_"/>
    </FileSystem>
<!--
    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
      <param name="path" value="${rep.home}/version" />
    </FileSystem>
-->

Classe: "org.apache.jackrabbit.core.persistence.bundle.PostgreSQLPersistenceManager".
-->
<PersistenceManager
     class="org.apache.jackrabbit.core.persistence.bundle.PostgreSQLPersistenceManager">
     <param name="url" value="jdbc:postgresql://localhost:5432/jackrabbit"/>
     <param name="driver" value="org.postgresql.Driver"/>
     <param name="user" value="jcr_user"/>
     <param name="password" value="password"/>
     <param name="schema" value="postgresql"/>
     <param name="schemaObjectPrefix" value="pm_ver_"/>
</PersistenceManager>
<!--
<PersistenceManager
     class="org.apache.jackrabbit.core.persistence.pool.H2PersistenceManager">
     <param name="url" value="jdbc:h2:${rep.home}/version/db"/>
     <param name="schemaObjectPrefix" value="version_"/>
</PersistenceManager>
-->


Arquivo: "./tomcat/webapps/pentaho/WEB-INF/web.xml".
Comente as linhas referentes à inicialização do SGBD HSQLDB, uma vez que este serviço não mais será utilizado.
<!-- [BEGIN HSQLDB DATABASES]
<context-param>
     <param-name>hsqldb-databases</param-name>
     <param-value>sampledata@../../data/hsqldb/sampledata,hibernate@../../data/hsqldb/hibernate,quartz@../../data/hsqldb/quartz</param-value>
</context-param>
[END HSQLDB DATABASES] -->


<!-- [BEGIN HSQLDB STARTER]
<listener>
     <listener-class>org.pentaho.platform.web.http.context.HsqldbStartupListener</listener-class>
</listener>
[END HSQLDB STARTER] -->

Arquivo: "./pentaho-solutions/system/pentaho-spring-beans.xml".
Comente a linha referente à inicialização do SGBD H2, uma vez que este serviço não mais será utilizado.
<!-- <import resource="GettingStartedDB-spring.xml" /> Remove this line to unhook the Getting Started DB -->

Com atenção, exclua os arquivos conforme o exemplo a seguir:
~# rm -rf ./tomcat/work/*
~# rm -rf ./tomcat/temp/*
~# rm -rf ./pentaho-solutions/system/jackrabbit/repository/repository
~# rm -rf ./pentaho-solutions/system/jackrabbit/repository/workspaces

Concluído as configurações, Inicie o serviço do PUC.

Em caso de problemas na inicialização, reveja as configurações, observando a bertura e fechamento de tags, nomes de usuários, senhas, drivers configurados nos arquivos, ip's e portas dos bancos, que são os principais problema ocorridos.
Utilize o log do tomcat como suporte para esta tarefa, em "./tomcat/logs/catalina.out".

3 comentários:

  1. Ótimo..
    Me ajudou e muito...parabens pelo texto bem completo e direto.

    ResponderExcluir
  2. Legal, mas onde ficam armazenados os usuários e grupos de usuários? sempre achei que ficavam na base hibernate, mas não os encontrei lá.

    ResponderExcluir
  3. Olá, se eu quiser importar os usuários pré-cadastrados no jackrabbit para o Postgresql, é possível? Estou fazendo essa migração de um ambiente já existente com muitos usuários já cadastrados.

    ResponderExcluir