SpagoBI 3.0 – Accéder à une base de données
Nous avons vu précédemment comment installer SpagoBI, nous allons maintenant le configurer afin qu’il puisse accéder à une base de données.
C’est mieux si un portail de restitution peux lire vos données
Plutôt que de prendre le contenu d’une base de données qui ne vous est pas accessible, nous allons utiliser la base de données foodmart.
Créer la base de données Foodmart pour nos tests
Nous allons télécharger les données foodmart pour mysql.
Après décompressions de l’archive nous pouvons lancer l’import dans mysql :
$ mysql -u root -p < 'foodmart 20090211 1624.sql'
Nous donnons ensuite les droits à SpagoBI sur cette nouvelle database :
mysql> GRANT ALL PRIVILEGES ON `foodmart`.* TO 'SpagoBI'@'%';
Une petite vérification nous permet de constater que tout est ok :
$ mysql -u SpagoBI -p foodmart
Ajout de la connexion dans tomcat
Tel que nous l’avons fait pour la configuration de la base de données propre à SpagoBI, nous allons ajouter un connexion Jndi pour foodmart.
Pour cela nous éditons le fichier /etc/tomcat6/server.xml et ajoutons dans la section GlobalNamingResources :
<Resource name="jdbc/foodmart" 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/foodmart"/>
A noter : l’édition du fichier server.xml permet à ce que toutes les webapps de tomcat aient accès à cette connexion. Si vous voulez limiter la définition de la connexion à une seule application, il faut ajouter les lignes ci dessus au fichier context.xml du répertoire META-INF de votre application.
Création d’un DataSource dans SpagoBI
Se connecter avec le compte biadmin et aller dans Ressources -> Source de données :
Et renseigner les paramètres conformément à ce qui a été saisi dans le fichier server.xml :
On tombe alors sur une erreur :
it.eng.spago.error.EMFInternalError: severity [ERROR] description [DefaultScrollableDataResult::getDataRow: java.sql.SQLException: Column 'DS_ID' not found
Pour corriger cet erreur, il faut modifier le fichier statements.xml situé dans webapps/SpagoBI/WEB-INF/conf/config/ en y supprimant les alias.
exemple :
Select DS_ID as ID
doit être modifié en
Select DS_ID
Je n’ai par contre pas trouvé pourquoi cela ne fonctionne pas avec la première écriture. A ma connaissance les alias de colonnes existent depuis la norme SQL92. A votre avis le problème vient du driver odbc mysql ? ou de l’utilisation qui en est faite par SpagoBI ? Je ne sais pas ou déposer mon rapport de bug …
edit : Après recherche approfondie, il n’est plus nécessaire de modifier le fichier statements.xml. Ce problème sur les alias est tracé dans le bug Mysql 35150 et 31499. Afin de corriger le problème il faut modifier la connexion mysql.
Pour cela éditer le fichier /etc/tomcat6/server.xml et ajouter « ?useOldAliasMetadataBehavior=true » :
<Resource name="jdbc/SpagoBI" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="SpagoBI" password="SpagoBI" drvierClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/SpagoBI?useOldAliasMetadataBehavior=true" />
Dans Ressources -> DataSet -> onglet Type on sélectionne Query. La Base de données que l’on vient de référencer « Foodmart » et on saisi une requête pour vérifier que la connexion est bien fonctionnelle :
Dans mon exemple j’ai pris :
select * from product;
Cliquer sur « Preview » et l’on constate que tout fonctionne