Riprendiamo la nostra serie di articoli sul datawarehoure e la business intelligence in ambiente open source, vista la crescente domanda di spiegazioni che quotidianamente riceviamo sul nostro sito.
Oggi ci occuperemo dell’installazione del server Pentaho e della sua configurazione per un uso più aziendale, su un ambiente server linux Ubuntu 9.04 (dovrebbe andare bene anche con l’ultima release, magari con qualche piccolo cambiamento).
Procuratevi l’ultima release del server da sourceforge.
Creiamo la directory /opt/pentaho eseguento in un terminale il comando sudo mkdir /opt/pentaho
Fatto questo creiamo un utente per esguire il server pentaho:
sudo addgroup pentaho
sudo adduser –system –ingroup pentaho –disabled-login pentaho
scompattiamo il software sulla cartella desiderata:
sudo cd /opt/pentaho
sudo tar -zxvf /directory/di/downloads/biserver-ce-stable-3.5.2.stable.tar.gz (è la versione corrente al momento della scrittura)
Cambiamo permessi alla directory:
sudo chown -R pentaho:pentaho /opt/pentaho
A questo punto siamo pronti per fare partire il server con il seguente comando:
sudo -u pentaho JAVA_HOME=/usr/lib/jvm/java-6-sun ./start-pentaho.sh
Se tutto è andato bene, indirizzando il proprio browser su http://localhost:8080/pentaho dovreste vedere la pagina di benvenuto.
Nel caso voleste cambiare la porta su cui ascolta il server, dovrete modificare le configurazioni di tomcat. Cercate quindi sotto la directory /opt/pentaho/biserver-ce/tomcat/conf il file server.xml e cambiate la seguente parte:
<Connector port=”8080″ maxHttpHeaderSize=”8192″
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true” />
Se cambiate la porta di ascolto, dovrete modificare anche un altro file, web.xml, situato in tomcat/webapps/pentaho/WEB-INF nella seguente parte:
<context-param>
<param-name>base-url</param-name>
<param-value>http://localhost:8080/pentaho/</param-value>
</context-param>
Riavviate il server e verificate la nuova configurazione.
Buona norma sarebbe a questo punto creare uno script per l’avvio automatico del sistema quando si accende il server. (ma lo vedremo un’altra volta)
Un altro punto per la configurazione del server in ambito aziendale, è la configurazione dei connettori agli svariati database che si possono trovare in ambito aziendale. Di default il sistema viene fornito con i driver per i seguenti tre database:
- HSQLDB
- MySQL
- PostgreSQL
Tali driver li troverete nella directory tomcat/commn/lib. In tale directory dovrebbero essere messi ulteriori driver per la connesisone ad altri database (ad esempio i driver per la connessione ai sistemi Oracle oppure SQL Server).
Di default il sistema viene fornito con tre databases di sistema:
- hibernate – usato per registrare gli utenti, le password, i repositary di soluzioni ed altro;
- quartz – lo scheduler;
- sampledata – un database di esempio per cominciare a lavorare con il sistema.
Tutti e tre sono gestiti tramite il sistema HSQLDB, ma è più utile migrarli su qualcosa di più conosciuto, come MySQL, ORACLE oppure PostgreSQL.
Qui vediamo come migrarli su MySQL (premesso che il server MySQL sia gia’ installato e configurato).
Spostatevi quindi nella directory /opt/pentaho/biserver-ce/data/mysql5 ed eseguite i seguenti comandi:
- mysql -h localhost –u root -p < /opt/pentaho/biserver-ce/data/mysql5/create_repositary_mysql.sql
- mysql -h localhost –u root -p < /opt/pentaho/biserver-ce/data/mysql5/create_sample_datasource_mysql.sql
- mysql -h localhost –u root -p < /opt/pentaho/biserver-ce/data/mysql5/create_quartz_mysql.sql
A questo punto, dobbiamo riconfigurare Quartz e Hibernate.
Niente di più semplice.
Quartz:
Aprite il file tomcat/webapps/pentaho/META-INF/context.xml e modificatelo così:
<?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.hsqldb.jdbcDriver” url=”jdbc:hsqldb:hsql://localhost/hibernate”
validationQuery=”select count(*) from INFORMATION_SCHEMA.SYSTEM_SEQUENCES” /><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=”com.mysql.jdbc.Driver” url=”jdbc:mysql://localhost:3306/quartz”
validationQuery=”select 1“/>
</Context>
Hibernate:
aprite il file tomcat/webapps/pentaho/META-INF/context.xml e modificatelo nel seguente modo:
<?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=”com.mysql.jdbc.Driver” url=”jdbc:mysql://localhost:3306/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=”com.mysql.jdbc.Driver” url=”jdbc:mysql://localhost:3306/quartz”
validationQuery=”select 1“/>
</Context>
Ora spostatevi in pentaho-solutions/system/hibernate e modificate il file hibernate-settings.xml:
<?xml version=’1.0′ encoding=’utf-8′?>
<settings><!–
* This setting allows the deployment to specify where to find the
* database-specific hibernate configuration. The samples supplied
* include the following:
*
* system/hibernate/hsql.hibernate.cfg.xml
* system/hibernate/mysql5.hibernate.cfg.xml
* system/hibernate/postgresql.hibernate.cfg.xml
* system/hibernate/oracle10g.hibernate.cfg.xml
*
–>
<config-file>system/hibernate/mysql5.hibernate.cfg.xml</config-file><!–
*
* managed should be set to true if running the BI Platform
* in a managed environment (like JBoss, Orion, etc). In this configuration,
* you should specify another location for the hibernate.cfg.xml (see below)
* instead of simply using the default one provided. This setting essentially
* tells the HibernateUtil class to use JNDI to locate the factory class for
* getting sessions. This allows the platform to use Hibernate across boundaries
* in message beans (for example).
*
<managed>false</managed>
–><managed>false</managed>
</settings>
Editate quindi il file mysql5.hibernate.cfg.xml:
<?xml version=’1.0′ encoding=’utf-8′?>
<!DOCTYPE hibernate-configuration
PUBLIC “-//Hibernate/Hibernate Configuration DTD//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>
<hibernate-configuration>
<session-factory><property name=”cache.provider_class”>org.hibernate.cache.EhCacheProvider</property>
<property name=”hibernate.generate_statistics”>true</property>
<property name=”hibernate.cache.use_query_cache”>true</property><!– MySQL Configuration –>
<property name=”connection.driver_class”>com.mysql.jdbc.Driver</property>
<property name=”connection.url”>jdbc:mysql://localhost:3306/hibernate</property>
<property name=”dialect”>org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name=”connection.username”>hibuser</property>
<property name=”connection.password”>password</property>
<property name=”connection.pool_size”>10</property>
<property name=”show_sql”>false</property>
<property name=”hibernate.jdbc.use_streams_for_binary”>true</property>
<!– replaces DefinitionVersionManager –>
<property name=”hibernate.hbm2ddl.auto”>update</property>
<!– load resource from classpath –>
<mapping resource=”hibernate/mysql5innodb.hbm.xml” />
<!– This is only used by Pentaho Administration Console. Spring Security will not use these mapping files –>
<mapping resource=”PentahoUser.hbm.xml” />
<mapping resource=”PentahoRole.hbm.xml” /></session-factory>
</hibernate-configuration>
Siamo quasi alla fine.
editate il file pentaho-solutions/system/applicationContext-sring-security-jdbc.xml:
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springsource.org/dtd/spring-beans.dtd”><!–+
| Application context containing JDBC AuthenticationProvider
| implementation.
+–><beans>
<bean id=”daoAuthenticationProvider”
class=”org.springframework.security.providers.dao.DaoAuthenticationProvider”>
<property name=”userDetailsService”>
<ref bean=”userDetailsService” />
</property>
<property name=”passwordEncoder”>
<ref bean=”passwordEncoder” />
</property>
</bean><bean id=”userDetailsService”
class=”org.springframework.security.userdetails.jdbc.JdbcDaoImpl”>
<property name=”dataSource”>
<ref local=”dataSource” />
</property>
<property name=”authoritiesByUsernameQuery”>
<value>
<![CDATA[SELECT username, authority FROM GRANTED_AUTHORITIES WHERE username = ? ORDER BY authority]]>
</value>
</property>
<property name=”usersByUsernameQuery”>
<value>
<![CDATA[SELECT username, password, enabled FROM USERS WHERE username = ? ORDER BY username]]>
</value>
</property>
</bean>
<!– This is only for Hypersonic. Please update this section for any other database you are using –>
<bean id=”dataSource”
class=”org.springframework.jdbc.datasource.DriverManagerDataSource”>
<property name=”driverClassName” value=”com.mysql.jdbc.Driver” />
<property name=”url”
value=”jdbc:mysql://localhost:3306/hibernate” />
<property name=”username” value=”hibuser” />
<property name=”password” value=”password” />
</bean><bean id=”passwordEncoder”
/></beans>
editate il file pentaho-solutions/system/applicationContext-spring-security-hibernate.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/hibernate
jdbc.username=hibuser
jdbc.password=password
hibernate.dialect=org.hibernate.dialect.MySQLDialect
Fate ripartire tutto e… buon divertimento.
Alla prossima
2 risposte su “Datawarehouse e Business Intelligence: Strumenti open source per soluzioni enterprise – Capitolo 2”
ciao
domanda: come mai configuri sia il datasource jndi che le singole properties, ad esempio nel file mysql5.hibernate.cfg.xml?
non è possibile far puntare tutti i riferimenti al nome jndi?
grazie
Grazie per il commento.
Piccola premessa: l’articolo voleva dare un aiuto ai tanti utenti che come me, in partenza, si sono letti la documentazione nel blog o nel wiki di Pentaho, magari comprandosi libri per approfondire il tema e comunque perdendoci molto tempo prima di avere uno strumento funzionante. Sostanzialmente sono i miei appunti di viaggio (un po’ datati) nella creazione di un sistema funzionante.
Premesso questo e venendo alla tua domanda posso replicare con: non ho provato e quindi non lo so; per me la parte più complessa viene dopo e quindi ho dedicato tempo (sempre scarso) ai vari sottosistemi per la creazione di una soluzione presso i clienti. E’ una prova che mi riprometto di fare visto che tra breve devo mettere mano e ordine in un sistema per la bi sanitaria.
Mi spiace di non poterti quindi dare una risposta esaustiva in questo momento.
Luca