Le Blog de C-quad

Archive pour la catégorie ‘Business Intelligence’

Installer SpagoBI 3.0 sur Fedora


Même si ce blog ne le reflète pas, je suis ingénieur décisionnel et mes activités professionnelles sont clairement BI et très peu Open Source. J’ai eu la joie de pouvoir concilier un peu les 2 avec Talend. Et maintenant, je compte essayer de le faire aussi dans la mesure du possible avec SpagoBI.

Pour reprendre la définition de wikipedia : SpagoBI est la seule suite pour la Business Intelligence entièrement open source, une solution faisant partie de l’initiative libre/open source SpagoWorld, fondée et soutenue par Engineering Group.

SpagoBI tourne sur un serveur d’application. J’ai donc choisi Tomcat qui est disponible dans les dépôts de base, mais il est tout à fait possible d’utiliser Jonas ou JBoss.

Mise à jour 27/07/2011 :

  • A noter que peu de temps après la version 3.0 SpagoBI a publié une nouvelle version 3.1. Cette version corrige notamment les divers bug que j’avais remonté dans cet article.
  • A noter qu’une nouvelle version de tomcat a été déployée sur les dépots fedora et qu’elle corrige le bug remonté dans cet article

Il est donc désormais beaucoup plus simple de mettre en place SpagoBI dès l’instant que l’on installe la dernière version sur une Fedora à jour de ses mises à jour.

Téléchargement de SpagoBI

Avant de commencer, il faut télécharger les fichiers :

directement sur la forge de Spagoworld

Pour cet article nous n’utiliserons que mysql-dbscript-3.0.0_06152011.zip et SpagoBI-bin-3.0.0_06152011.zip

Je vous invite a tester les divers moteurs fournis. Je compte vous présenter pour ma part le moteur QbeEngine dans un futur article.

A noter que SpagoBI 3.0 est très récent, il est donc très difficile voire même impossible de trouver une documentation sur cette version.

Préparation de la base de données

SpagoBI peut s’installer sur Ingres, Mysql, Oracle et Postgresql. Il s’agit la des tables qui servent au moteur de SpagoBI. L’outil en lui même est capable de se connecter à n’importe quelle base de données dès l’instant qu’il est possible d’y établir une connexion jdbc.

Nous allons donc l’installer sur une base de données MySQL.

Commençons par créer un utilisateur :

CREATE USER 'SpagoBI'@'%' IDENTIFIED  BY  '***';
GRANT  USAGE  ON  *  .  *  TO  'SpagoBI'@'%' IDENTIFIED  BY  '***' WITH  MAX_QUERIES_PER_HOUR 0  MAX_CONNECTIONS_PER_HOUR 0  MAX_UPDATES_PER_HOUR 0  MAX_USER_CONNECTIONS 0 ;
CREATE  DATABASE IF  NOT  EXISTS  `SpagoBI` ;
GRANT  ALL  PRIVILEGES  ON  `SpagoBI`  .  *  TO  'SpagoBI'@'%';

Nous pouvons ensuite nous connecter avec cet utilisateur et lancer la création des tables :

$ mysql -u SpagoBI -p SpagoBI < MySQL_create.sql
$ mysql -u SpagoBI -p SpagoBI < MySQL_create_quartz_schema.sql

Nous sommes maintenant prêt à installer SpagoBI sur le serveur d’applications.

Installation et configuration de Tomcat

L’installation de Tomcat se fait comme d’habitude simplement avec yum

# yum install tomcat6*

Nous allons nous connecter à une base de donnée mysql il nous faut donc le connecteur :

# yum install mysql-connector-java

On ajoute ce driver dans les libraires de tomcat :

# ln -s /usr/share/java/mysql-connector-java.jar /usr/share/tomcat6/lib/

Il est maintenant nécessaire de définir un utilisateur dans tomcat, pour se faire éditer le fichier /etc/tomcat6/tomcat-users.xml et ajouter les lignes suivantes dans la section tomcat-users :

<role rolename="manager"/>
<user username="tomcat" password="tomcat" roles="manager"/>

Nous allons maintenant configurer la connexion à la base de données précédemment crée, pour cela éditer le fichier /etc/tomcat6/server.xml.
On ajoutera dans la section GlobalNamingResources

<GlobalNamingResources>

<Resource name="UserDatabase" auth="Container"
          type="org.apache.catalina.UserDatabase"
          description="User database that can be updated and saved"
          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/tomcat-users.xml" />

<Environment name="spagobi_resource_path" type="java.lang.String" value="webapps/resources"/>
<Environment name="spagobi_sso_class" type="java.lang.String" value="it.eng.spagobi.services.common.FakeSsoService"/>
<Environment name="spagobi_service_url" type="java.lang.String" value="http://localhost:8080/SpagoBI"/>
<Environment name="spagobi_host_url" type="java.lang.String" value="http://localhost:8080"/>

<Resource name="jdbc/spagobi" auth="Container" type="javax.sql.DataSource"
          maxActive="100" maxIdle="30" maxWait="10000"
          username="SpagoBI" password="SpagoBI" driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/SpagoBI"/>

 </GlobalNamingResources>

Nous pouvons maintenant démarrer tomcat :

# service tomcat6 start

Une fois tomcat démarré nous pouvons nous rendre sur la page d’accueil de Tomcat à l’adresse suivante : http://localhost:8080/

Vous devriez obtenir un écran similaire à celui ci-dessus.

Nous allons dans Tomcat Manager. Un login/mot de passe vous est demandé, il correspond à celui que vous avez renseigné dans le fichier tomcat-users.xml. Dans notre cas c’est tomcat/tomcat.

Il faut ensuite décompressé l’archive SpagoBI-bin-3.0.0_06152011.zip téléchargée précédemment. Vous obtenez donc un fichier nommé SpagoBI.war. Il faut déployer ce fichier sur tomcat :

Tomcat Manager -> Deployer – Parcourir -> Sélectionner SpagoBI.war et cliquer sur déployer

Et maintenant il ne nous reste plus qu’a aller à l’adresse http://localhost:8080/SpagoBI pour admirer un joli portail … ah non une erreur :

Si l’on va voir dans le fichier /var/log/tomcat6/SpagoBI.log on trouve l’erreur suivante :

find datasource: java:/comp/env/jdbc/spagobi
javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]
 at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:118)
 at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:793)
 at org.apache.naming.NamingContext.lookup(NamingContext.java:140)

Cette erreur vient du fait que tomcat ne va pas chercher BasicDataSourceFactory dans le bon paquet. Il est nécessaire de modifier le fichier /etc/sysconfig/tomcat6 en ajoutant la ligne suivante :

# Use JAVA_OPTS to set java.library.path for libtcnative.so
#JAVA_OPTS="-Djava.library.path=/usr/lib"
JAVA_OPTS="${JAVA_OPTS} -Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory"

Ce problème a été déposé sur le bugzilla redhat : https://bugzilla.redhat.com/show_bug.cgi?id=669969

Il nous reste ensuite à redémarrer tomcat6

# service tomcat6 restart

Et nous pouvons voir le joli portail … ah non même écran 🙁

Allons voir la log :

at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'SpagoBI.hibernate_sequences' doesn't exist
 at sun.reflect.GeneratedConstructorAccessor37.newInstance(Unknown Source)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
 at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)

Le problème c’est qu’il y a beaucoup trop de développeur sous Windows…  La table hibernate_sequences existe pourtant bien, mais en majuscule. Vu que mysql stocke ses données dans des fichiers qui portent les mêmes noms que les tables, la casse a son importance sur les systèmes d’exploitation ou le système de fichier fait la différence entre majuscules et minuscules.

Il nous suffit donc de recréer la table en minuscules :

drop table HIBERNATE_SEQUENCES;

CREATE TABLE IF NOT EXISTS `hibernate_sequences` (
 `SEQUENCE_NAME` varchar(200) NOT NULL,
 `NEXT_VAL` int(11) NOT NULL,
 PRIMARY KEY (`SEQUENCE_NAME`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

edit : il existe une solution plus simple pour renommer une table 😉

RENAME TABLE `SpagoBI`.`HIBERNATE_SEQUENCES`  TO `SpagoBI`.`hibernate_sequences` ;

edit2: J’ai créé un rapport de bug sur SpagoWorld : bug 623

Il est nécessaire de redémarrer le serveur tomcat6 suite à cette modification.

Et enfin nous voila sur la page d’accueil de SpagoBI :


Il nous reste à nous identifier avec le login biadmin/biadmin :

Je compte essayer de vous présenter les diverses fonctionnalités de ce produit prochainement. (Quand j’aurais réussi à  les faire tourner ;-))