quarta-feira, 9 de setembro de 2015

Pentaho 5.4 + PostgreSQL

Background


Os passos abaixo visam configurar o Pentaho 5.4 para utilizar o Postgres como banco de dados dos metadados.

Existem algumas diferençãs entre a configuração do Pentaho 4.x para a versão 5.x.

Umas das principais mudanças é que o repositório dos arquivos e configurações do Pentaho 5.x agora ficam armazenado em um repositório de conteúdo chamado Jackrabbit, e não mais no filesystem.

Logo, adicionalmente ao que era feito para configurar o Pentaho 4.8, agora será criado também um database para armazenar os dados/metadados do Jackrabbit no PostgreSQL.


Referências


Pentaho Use Manual BA Server Installation

Pentaho BI Server 5.0.1CE MySQL installation guide

How To: Install and configure Pentaho BI Suite 5 CE | Ubuntu 12.04 | PostgreSQL 9.2
 

Configurações


1. Criar os banco de dados hibernate / quartz / jackrabbit

Execute os script de criação que se encontram na pasta biserver-ce\data\postgresql

2. Workaround para Bug 

Crie a tabela abaixo para contornar o bug JIRA BISERVER-11028.

OBS. Deve se garantir que após a criação o nome da tabela esteja em letras MAIÚSCULAS.
CREATE TABLE "QRTZ_DUMMY"
(
  id bigint
);

ALTER TABLE "QRTZ_DUMMY" OWNER TO pentaho_user;
3. tomcat/webapps/pentaho/META-INF/context.xml

<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.hsqldb.jdbcDriver" url="jdbc:hsqldb:hsql://localhost/hibernate"
             validationQuery="select count(*) from INFORMATION_SCHEMA.SYSTEM_SEQUENCES" />

para
<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://<IP>:<PORT>/hibernate"
              validationQuery="select 1" />

e

<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.hsqldb.jdbcDriver" url="jdbc:hsqldb:hsql://localhost/quartz"
              validationQuery="select count(*) from INFORMATION_SCHEMA.SYSTEM_SEQUENCES"/>

para

<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://<IP>:<PORT>/quartz"
              validationQuery="select 1"/>

4. pentaho-solutions/system/applicationContext-spring-security-hibernate.properties

jdbc.driver=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://localhost:9001/hibernate
jdbc.username=hibuser
jdbc.password=password
hibernate.dialect=org.hibernate.dialect.HSQLDialect

para

jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://<IP>:<PORT>/hibernate
jdbc.username=hibuser
jdbc.password=password
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

5. pentaho-solutions/system/hibernate/hibernate-settings.xml

<config-file>system/hibernate/hsql.hibernate.cfg.xml</config-file>

para

<config-file>system/hibernate/postgresql.hibernate.cfg.xml</config-file>

6. pentaho-solutions/system/hibernate/postgresql.hibernate.cfg.xml

(...)
<property name="connection.url">jdbc:postgresql://localhost:5432/hibernate</property>
(...)
<property name="connection.username">hibuser</property>
<property name="connection.password">password</property>

para

(...)
<property name="connection.url">jdbc:postgresql://<IP>:<PORT>/hibernate5</property>
(...)
<property name="connection.username">hibuser</property>
<property name="connection.password">password</property>

7. tomcat/conf/server.xml

Em alguns casos temos problemas que ocorrem devido ao tamanho máximo do HTTP Header. Para isso, iremos aumentar o seu tamanho.

<Connector URIEncoding="UTF-8" port="8080" protocol="HTTP/1.1"
             connectionTimeout="20000"
             redirectPort="8443" />
para
<Connector URIEncoding="UTF-8" port="8080" protocol="HTTP/1.1"
             maxHttpHeaderSize="65536"
             connectionTimeout="20000"
             redirectPort="8443" />
8. pentaho-solutions/system/pentaho.xml

Caso deseje desabilitar a lista de sample users da tela de login.

(...)
<login-show-users-list>true</login-show-users-list>
(...)
<login-show-sample-users-hint>true</login-show-sample-users-hint>
(...)
para
(...)
<login-show-users-list>false</login-show-users-list>
(...)
<login-show-sample-users-hint>false</login-show-sample-users-hint>
(...)

9. tomcat/conf/Catalina/localhost/pentaho.xml

Caso já tenha iniciado o pentaho alguma vez com a configuração original, apague o respectivo arquivo.

Nota: Este é um arquivo de cache do tomcat que não é recriado se o META-INF/context.xml for alterado. Deletar força o arquivo ser recriado novamente com a nova configuração.

10. pentaho-solutions/system/jackrabbit/repository

Apagar todo conteúdo da respectiva pasta.

11. pentaho-solutions/system/jackrabbit/repository.xml

É necessário configurar o JCR para usar o Postgres ao invés do H2.

Edite o respectivo arquivo e busque por configurações relacionado ao Postgres. Você pode fazer um 'Search' por 'org.postgresql.Driver'.

Descomente o respectivo bloco de configuração e faça os ajustes de conexões necessários. Não esqueça de comentar a configuração equivalente que estava ativa por padrão.

Para referência pode se utilizar os respectivos documentos:

Use Manual BA Server Installation

Use PostgreSQL as Your Repository Database

12 . Segurança dos usuários

- Altere a senha do usuário admin.
- Remova ou altere as senhas de todos usuários default.

13. Configuração de Localização PT_BR

Edite os arquivos start-pentaho.sh(.bat), e na opção 'export CATALINA_OPTS' inclua no final da linha:

-Dfile.encoding=utf-8 -Duser.country=BR -Duser.language=pt

14. Configurando tomcat/webapps/pentaho/WEB-INF/web.xml (opcional)

Para remover a mensagem de WARNING abaixo durante a inicialização:

WARNING: Security role name PENTAHO_ADMIN used in an <auth-constraint> without being defined in a <security-role>
Incluir no arquivo, antes da tag <security-constraint> a configuração:

<security-role>
  <description>security role assignment</description>
  <role-name>PENTAHO_ADMIN</role-name>
</security-role>
15. Desativar Hypersonic - tomcat/webapps/pentaho/WEB-INF/web.xml (opcional)

Para desativar o startup automático do Hypersonic, edite o arquivo e comente ou delete as seguintes configurações:

<!-- [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] -->
16. Desativar SGBD H2 - pentaho-solutions/system/pentaho-spring-beans.xml

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 das 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 uma vez que o JCR seja migrado para o Postgres podemos desatirar o SGBD H2, da mesma forma que fizemos para o hibernate e o quartz que utilizam o SGBD HSQLDB.

Para desativá-lo remova ou comente a linha abaixo do respectivo arquivo:

<import resource="GettingStartedDB-spring.xml" /> <!-- Remove this line to unhook the Getting Started DB -->

5 comentários:

@fernandommota disse...

Ficou ótimo o tutorial Kleyson!

Obrigado por compartilhar.

Kleyson Rios disse...

Valeu !!!

Willian Ap Batista disse...

Ótimo post, apliquei na versão 6.0.1 e deu certo de primeira.
Parabéns pelo compartilhamento.

Abraços.
Willian Batista

Willian Ap Batista disse...
Este comentário foi removido pelo autor.
Leandro Guimarães disse...

Oi Kleyson, Muito bom!

Você tem algum link sobre migrar os usuários e pastas do jackrabbit pré-cadastrados para um repositório em banco de dados?