Le Blog de C-quad

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 ;-))

16 réponses à to “Installer SpagoBI 3.0 sur Fedora”

  • Super intéressant !!!!

    A quand la suite 🙂 !!!

  • ahmed TN:

    Merci bien pour le tuto, sa ma beaucoup aidée.
    puisque vous étés un ingénieur décisionnelle présenté nous d’autre produit BI!!

    • CedricOLIVIER:

      Il est vrai que j’aurais pu faire pas mal d’articles sur d’autres produits BI (dont Talend).
      Mais concernant les autres produits BI, ils ne sont malheureusement pas Open Source. Et à quelques très rares exceptions près ce blog est destiné à parler uniquement de ce qui touche à l’Open Source.

      Je pense aussi que je n’en ai pas parlé jusqu’à présent parce que pour moi le travail et les loisirs sont deux choses bien distinctes. Et trop parler de mon travail sur ce blog ferait perdre le statut de loisir que j’attribue à ce blog.

  • Compliments et merci à l’éditeur et animateur de ce blog. Ce type de ressources apporte de la valeur à SpagoBI et au décisionnel en open source. Je souhaite être contacté par mail.

    Cordialement

    Stefano Scamuzzo
    SpagoBI International Manager

    • CedricOLIVIER:

      Merci pour les compliments. Je découvre doucement SpagoBI sur mon temps libre et compte bien ajouter encore quelques articles sur le sujet.
      SpagoBI est un regroupement d’outil décisionnel qui permet d’avoir un portail décisionnel complet couvrant la majorité des besoins. La principale faiblesse à l’heure actuelle de cette solution est pour moi au niveau du Studio.
      Il faut malheureusement faire énormément de choses à la main (édition de XML non géré etc). Je pense qu’une fois que le Studio aura atteint plus de maturité SpagoBI pourrait avoir beaucoup de succès.

  • bwana357:

    Bonjour,

    Je suis en train de faire une installation de spagobi, J’ai bien avancé en suivant vos conseils mais je suis bloqué au niveau ci-dessous. Pouvez-vous m’aider ?

    [main] 01 août 2011 09:28:48,698 ERROR org.hibernate.connection.DatasourceConnectionProvider.configure:78 – Could not find datasource: java:/comp/env/jdbc/SpagoBI
    javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BAsicDataSourceFactory]
    at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:118)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:793)

    • CedricOLIVIER:

      Bonjour,

      La connexion est elle bien définie dans server.xml ?

      Tu as l’erreur :
      Could not find datasource: java:/comp/env/jdbc/SpagoBI

      Dans mon article j’ai mis :
      <Resource name="jdbc/spagobi" auth="Container" type="javax.sql.DataSource"
      dans ton cas la connexion JNDI est définie comme java:/comp/env/jdbc/SpagoBI, il faut donc :
      <Resource name="jdbc/SpagoBI" auth="Container" type="javax.sql.DataSource"

  • bwana357:

    Petite évolution après avoir modifié quelques fichiers mais je n’ai toujours pas accès. Voici les nouveauxlogs.

    [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 01 août 2011 14:22:35,087 ERROR it.eng.spagobi.commons.SingletonConfigCache.:25 – The table sbi_config is EMPTY
    [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 01 août 2011 14:22:35,110 ERROR it.eng.spagobi.commons.SingletonConfigCache.get:42 – The property ‘SPAGOBI.DATE-FORMAT-SERVER.format’ doens’t have any value assigned, check SBI_CONFIG table
    [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 01 août 2011 14:22:35,110 ERROR it.eng.spagobi.commons.SingletonConfigCache.get:42 – The property ‘SPAGOBI.TIMESTAMP-FORMAT.format’ doens’t have any value assigned, check SBI_CONFIG table
    [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 01 août 2011 14:22:35,665 ERROR org.quartz.utils.JNDIConnectionProvider.init:129 – Error looking up datasource: Le Nom spagobi n’est pas lié à ce Contexte
    javax.naming.NameNotFoundException: Le Nom spagobi n’est pas lié à ce Contexte
    at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
    at org.apache.naming.SelectorContext.lookup(SelectorContext.java:152)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at org.quartz.utils.JNDIConnectionProvider.init(JNDIConnectionProvider.java:127)
    at org.quartz.utils.JNDIConnectionProvider.(JNDIConnectionProvider.java:105)
    at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:917)
    at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1355)
    at it.eng.spagobi.tools.scheduler.init.QuartzInitializer.init(QuartzInitializer.java:53)
    at it.eng.spago.init.InitializerManager.init(InitializerManager.java:79)
    at it.eng.spago.configuration.ConfigServlet.init(ConfigServlet.java:115)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659)
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3391)
    at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:426)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1309)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
    at java.lang.Thread.run(Thread.java:662)
    [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 01 août 2011 14:22:35,710 ERROR org.quartz.utils.JNDIConnectionProvider.init:129 – Error looking up datasource: Le Nom spagobi n’est pas lié à ce Contexte
    javax.naming.NameNotFoundException: Le Nom spagobi n’est pas lié à ce Contexte
    at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
    « SpagoBI.log » 130 lines, 12421 characters

  • marc lanchas:

    Bonjour,
    J’essaie d’installer en suivant la description sur du XP SP3
    Mysql est en version 5.1.31 et Tomcat en 6.0.32
    Pour le déploiement, pas de problème sauf avec ZoneAlarme qui l’empêchait.
    Je crée l’utilisateur et affecte les droits, Ok.
    Par contre la requête create.sql et create_quartz_schema.sql, je ne vois pas d’où elles sortent ni ou les trouver.
    Je me fais jeter, impossible de trouver les fichiers en question.
    Ou est mon erreur ?
    Merci d’avance
    Marc

    • CedricOLIVIER:

      Les scripts en question sont dans l’archive mysql-dbscript-3.0.0_06152011.zip dont le lien est fourni dans le paragraphe téléchargement de SpagoBI.

  • bwana357:

    Bonjour,
    Mon installation est presque aboutie mais je suis confrontée à quelques difficultés :

    1) impossible de charger les moteurs, voici le message :

    ERREUR Retour
    Impossible de charger le moteur d’exécution : erreur de base de données survenue

    2) impossible de charger les métadonnées

    ERREUR Retour
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ‘DESCR’ in ‘order clause’ at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.Util.getInstance(Util.java:381) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2642) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2571) at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1464) at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208) at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208) at it.eng.spago.dbaccess.sql.command.std.SelectCommand.execute(SelectCommand.java:93) at it.eng.spagobi.commons.services.DelegatedQueryExecutor.executeQuery(DelegatedQueryExecutor.java:269) at it.eng.spagobi.commons.services.DelegatedQueryExecutor.executeQuery(DelegatedQueryExecutor.java:201) at it.eng.spagobi.commons.services.DelegatedHibernateConnectionListService.getList(DelegatedHibernateConnectionListService.java:97) at it.eng.spagobi.tools.objmetadata.service.ListObjMetadataModule.getList(ListObjMetadataModule.java:48) at it.eng.spago.dispatching.service.list.basic.impl.DelegatedBasicListService.service(DelegatedBasicListService.java:98) at it.eng.spago.dispatching.module.list.basic.AbstractBasicListModule.service(AbstractBasicListModule.java:44) at it.eng.spago.dispatching.module.DefaultPage.invokeServiceBusiness(DefaultPage.java:352) at it.eng.spago.dispatching.module.DefaultPage.nextStep(DefaultPage.java:302) at it.eng.spago.dispatching.module.DefaultPage.service(DefaultPage.java:202) at it.eng.spago.dispatching.module.ModuleCoordinator.service(ModuleCoordinator.java:102) at it.eng.spago.dispatching.httpchannel.AdapterHTTP.service(AdapterHTTP.java:433) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at it.eng.spagobi.commons.filters.ProfileFilter.doFilter(ProfileFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at it.eng.spagobi.commons.filters.SpagoBICoreCheckSessionFilter.doFilter(SpagoBICoreCheckSessionFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662)
    Parent non disponible

    Pouvez-vous me donner un coup de main svp ?

  • Je pense que vous pourriez trouver plus d’aide sur ce forum : http://www.developpez.net/forums/f884/logiciels/solutions-dentreprise/business-intelligence/spagobi/

    @ Stefano Scamuzzo, il pourrait être intéressant de proposer un forum sur votre site Internet … 😉

  • mickael:

    Merci BEAUCOUP. Enfin une note compréhensible j’ai enfin pu faire tourner SpagoBI. Merci beaucoup encore

Laisser un commentaire