Pentaho Analysis Services: How to Install Mondrian

Comment installer Mondrian

1. Introduction
2. Installer les données test avec une base de données non embarquée
   1. Microsoft Access
   2. Autre Base de données
3. Déployer et exécuter une application web avec une base de données non embarquée
4. Déployer et exécuter une application web avec la base de test embarquée
5. Comment configurer Mondrian comme fournisseur de XML/A
   1. Décrire les sources de données dans `datasources.xml`
   2. Configurer `XmlaServlet` dans votre `web.xml`
6. Divers

1. Configurer `mondrian.properties`
2. Installation du système de mémoire Cache

7. Compatibilité des Bases de données
8. Problèmes de compatibilité

1. Weblogic 6.1 et Xerces
2. Xalan et Tomcat
3. Log4j et Tomcat

## 1. Introduction

Le noyau de Mondrian est un fichier JAR qui agit comme un pilote "JDBC pour OLAP": il fournit des connexions aux bases de données relationnelles sous-jacentes et exécute les instructions SQL. Ce paquet se conduit comme une interface avec ces bases de données. Le programme Mondrian peut être livré :

1. comme une librairie WAR incluant JPivot, un environnement de travail web OLAP et des données exemple pouvant être chargées dans la base de données de votre choix.
2. comme une librairie WAR, incluant JPivot et une base de données embarquée Derby, ce qui ne demandera aucune installation supplémentaire pour déployer cette librairie avec un serveur d'application web.

Les deux distributions contiennent les programmes sources Mondrian. Tous les fichiers JARs nécessaires à Mondrian sont contenus dans l'archive WAR du répertoire /WEB-INF/lib.

Voici comment installer la distribution:

1. Installer le Java SDK (1.4.2 ou supérieur).
2. Télécharger la dernière version `mondrian-version.zip` depuis SourceForge, et décompressez-la.
3. Pour la distribution non embarquée, installer le jeu de données "FoodMart", comme décrit dans la section 2.
4. Installer et démarrer l'application web, comme décrit dans la section 3 ou 4.

Si vous êtes un développeur Mondrian, il y a des instructions supplémentaires pour accéder au serveur des programmes sources (Perforce) et compiler le code dans le guide du développeur.

## 2. Installer les données test avec une base de données non embarquée

La base de données test 'FoodMart' fait partie de la distribution non-embarquée. Elle est livrée sous deux formats: une base Microsoft Access (`demo/access/MondrianFoodMart.mdb`) et un script SQL pour insérer les tables au sein de votre base de données (`demo/FoodMartCreateData.sql`).

Sous windows, utiliser la base de données Access est l'installation la plus facile, parce que vous avez juste besoin de définir une source de données ODBC. Si vous voulez tester une base de données autre qu'Access ou si vous n'êtes pas dans un environnement Windwos, vous aurez à créer votre propre base de données vierge et aurez à charger cette base de données avec l'utilitaire MondrianFoodMartLoader.

### 2.1. Microsoft Access

Si vous utilisez Windows, Microsoft Access est la base de données la plus facile à utiliser comme base de données test. Vous avez juste besoin d'installer une source de données ODBC pour la base test.

La base test a besoin d'être accédée si vous ne testez que l'accès à cette base, ou elle devra être chargée dans une autre base.

Dans le menu 'Outils d'administration', cliquez sur l'item 'Sources de données (ODBC)' pour ouvrir la boîte d'administration des sources de données ODBC. Ensuite, créez un DSN Système appelé `MondrianFoodMart` pointant sur `MONDRIAN_HOME/demo/access/MondrianFoodMart.mdb`. (Cela permettra à Mondrian d'accéder à la source de données en utilisant la chaîne de connexion "`jdbc:odbc:MondrianFoodMart`".

### 2.2. Autres bases de données

Si vous n'utilisez pas Access, utilisez l'utilitaire MondrianFoodMartLoader pour créer une base de données et charger les données avec le script SQL.

#### Syntaxe

> `MondrianFoodMartLoader
> [-verbose] [-tables] [-data] [-indexes]
> -jdbcDrivers=<jdbcDrivers>
> -outputJdbcURL=<jdbcURL>
> [ [ [-outputJdbcUser=user] [-outputJdbcPassword=password] [-outputJdbcBatchSize=<batch size>] ]
> | -outputDirectory=<directory name>
> ]
> [ [-inputJdbcURL=<jdbcURL> [-inputJdbcUser=user] [-inputJdbcPassword=password] ]
> | [-inputFile=<file name>]
> ]`

#### Options

Option | Description
`-verbose` | mode verbeux.
`-tables` | Crée les tables dans la sortie JDBC, ou génère une instruction CREATE TABLE dans le répertoire de sortie pour toutes les tables FoodMart, de façon appropriée pour le type de votre base de données. Si cela est non précisé, les tables sont considérées comme déjà existantes et elles seront tout d'abor supprimées.
`-data` | Charge les données depuis l'entrée (JDBC, fichier d'instruction d'insertion) vers la sortie (JDBC, fichier d'instruction d'insertion). Toutes les données existantes seront tout d'abord supprimées.
`-indexes` | Crée les index dans la sortie JDBC, ou génère une instruction CREATE INDEX dans le répertoire de sortie pour toutes les tables FoodMart, de façon appropriée pour le type de votre base de données.
`-jdbcDrivers=``<driver list>` | liste de pilotes séparée par des virgules nécessaire pour se connecter à la base de données source et cible. Les fichiers JAR contenant ces pilotes doivent également se trouver dans le classpath (l'option `-cp` dans la commande `java` ).
`-outputJdbcURL=<jdbcURL>` | Url JDBC pour la base de données cible
`-outputJdbcUser=<user>` | Utilisateur pour la base de données cible
`-outputJdbcPassword=<password>` | Mot de passe pour la base de données cible
`-outputDirectory=<directory name>` | Optionnel. Répertoire dans lequel se trouvera le script de création de la base de données. Les instructions SQL seront dans le format du type de base de données spécifié par l'option outputJdbcURL.
`-outputJdbcBatchSize=<batch size>` | Taille du lot pour les instruction INSERT. Par défaut à 50. Si mis à la valeur 1, la fonction lot (batch) JDBC n'est pas utilisée.
`-inputJdbcURL=<jdbcURL>` | Url JDBC pour la base de données source
`-inputJdbcUser=<user>` | Utilisateur pour la base de données source
`-inputJdbcPassword=<password>` | Mot de passe pour la base de données source
`-inputFile=<file name>` | Optionnel. Si aucun paramètre n'est donné pour la base de données source, les données sont censées provenir du fichier passé en argument.

La source usuelle pour l'utilitaire MondrianFoodMartLoader est un script SQL (`[-inputFile=<file name>]`). Cependant, si vous avez déjà chargé les données au sein d'une source de données JDBC (par exemple Microsoft Access), utilisez l'option `-inputJdbcURL` et les autres options en relation avec celle-ci pour accéder à une autre base de donées JDBC.

Le chargeur utilise le standard J2SE JDBC, le pilote JDBC approprié pour les fichiers JARs, et quelques classes externes à Mondrian qui ne sont pas attachées à des fichiers additionnel JARs. Tout cela a été testé avec Oracle, Postgres, MySQL et Microsoft Access.

Si votre base de données cible est une base de données JDBC, vous devez créer en premier lieu la base de données et le schéma des tables. Cela doit être une base de données spécifique au jeu de test.

Vous pouvez en toute sécurité ignorer ces avertissements log4j:

> `log4j:WARN No appenders could be found for logger (mondrian.rolap.RolapUtil).
> log4j:WARN Please initialize the log4j system properly.`

#### Exemples

Vous trouverez ci-dessous quelques exemples pour vous donner une idée générale de comment `MondrianFoodMartLoader` est invoqué. La ligne de commande que vous utiliserez dépendra bien sûr de votre environnement, de votre base de données source et cible.

##### Exemple 1. Chargement dans MySQL depuis un fichier sous Linux

L'exemple suivant est une ligne de commande linux pour créer une base MySQL appelée 'foodmart', puis créer les tables FoodMart depuis le jeu de données inclus dans le script SQL. En premier lieu, on crée une base de données `foodmart` et un utilisateur `foodmart` :

> `$ mysqladmin create foodmart
> $ mysql
> mysql> grant all privileges on *.* to 'foodmart'@'localhost' identified by 'foodmart';
> Query OK, 0 rows affected (0.00 sec)
> mysql> quit
> Bye`

Puis on charge les données:

> `$java -cp "/mondrian/lib/mondrian.jar:/mondrian/lib/log4j-1.2.9.jar:/mondrian/lib/eigenbase-xom.jar:/mondrian/lib/eigenbase-resgen.jar:/mondrian/lib/eigenbase-properties.jar:/usr/local/mysql/mysql-connector-java-3.0.16-ga-bin.jar"
> mondrian.test.loader.MondrianFoodMartLoader
> -verbose -tables -data -indexes
> -jdbcDrivers=com.mysql.jdbc.Driver
> -inputFile=/mondrian/demo/FoodMartCreateData.sql
> -outputJdbcURL="jdbc:mysql://localhost/foodmart?user=foodmart&password=foodmart"`

##### Exemple 2. Chargement dans PostgreSQL depuis Access sous Windows

L'exemple suivant est une ligne de commande windows pour créer les tables FoodMart dans une base PostgreSQL depuis le jeu de test de la base Access:

> `C:\mondrian> java -cp "C:\mondrian\lib\mondrian.jar;C:\mondrian\lib\log4j-1.2.9.jar; C:\mondrian\lib\eigenbase-xom.jar; C:\mondrian\lib\eigenbase-resgen.jar; C:\mondrian\lib\eigenbase-properties.jar; C:\mondrian\lib\postgres-jdbc.jar"
> mondrian.test.loader.MondrianFoodMartLoader
> -verbose -tables -data -indexes
> -jdbcDrivers="org.postgresql.Driver,sun.jdbc.odbc.JdbcOdbcDriver"
> -inputJdbcURL="jdbc:odbc:MondrianFoodMart"
> -outputJdbcURL="jdbc:postgresql://localhost/foodmart"
> -outputJdbcUser=postgres
> -outputJdbcPassword=password`

## 3. Déployer and exécuter une application web avec une base de données non embarquée

1. Installer Tomcat (version 5.0.25 ou supérieure).
2. Depuis la distribution décompressée, décompresser `lib/mondrian.war` dans le répertoire `TOMCAT_HOME/webapps/mondrian`
3. Ouvrir le fichier mondrian.properties dans le répertoire `TOMCAT_HOME/webapps/mondrian` et personnalisez-le `mondrian.jdbcDrivers` en fonction de la base de données utilisée.
4. Ouvrir le fichier web.xml dans le répertoire `TOMCAT_HOME/webapps/mondrian/WEB-INF` et personnalisez-le avec les deux chaînes de connexion que vous avez utilisées pour la base de données test. Cela:

   > `Provider=mondrian;Jdbc=jdbc:odbc:MondrianFoodMart;Catalog=/WEB-INF/queries/FoodMart.xml;JdbcDrivers=sun.jdbc.odbc.JdbcOdbcDriver;`

   devient

   > `Provider=mondrian;Jdbc=jdbc:mysql://localhost/foodmart?user=foodmart&#38;password=foodmart;Catalog=/WEB-INF/queries/FoodMart.xml;JdbcDrivers=com.mysql.jdbc.Driver;`

5. Modifier le fichier `fourheir.jsp`, `mondrian.jsp`, `colors.jsp` ainsi que le fichier `arrows.jsp` dans le répertoire `TOMCAT_HOME/webapps/mondrian/WEB-INF/queries`. Modifier les lignes

   > `<jp:mondrianQuery id="query01" jdbcDriver="sun.jdbc.odbc.JdbcOdbcDriver" jdbcUrl="jdbc:odbc:MondrianFoodMart" catalogUri="/WEB-INF/queries/FoodMart.xml">`

   avec les paramètres de votre base de données FoodMart database. Pour MySQL, cela donnera quelque chose du genre:

   > `<jp:mondrianQuery id="query01" jdbcDriver="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://localhost/foodmart?user=foodmart&password=foodmart" catalogUri="/WEB-INF/queries/FoodMart.xml">`

6. Copier les fichiers suivants:
   - Si besoin, copier votre pilote JDBC (fichier JARà dans le répertoire `TOMCAT_HOME/common/endorsed`
   - Copier le fichier `xalan.jar` dans le répertoire `TOMCAT_HOME/common/endorsed`
7. Démarrer votre base de données, si besoin.
8. Cliquer sur http://localhost:8080/mondrian.

## 4. Déployer et exécuter l'application web avec une base de données embarquée

1. Depuis la distribution décompressée, décompresser `lib/mondrian-embedded.war` dans le répertoire `TOMCAT_HOME/webapps/mondrian-embedded`
2. Démarrer Tomcat
3. Cliquer sur http://localhost:8080/mondrian-embedded

## 5. Comment configurer Mondrian comme un fournisseur XML/A

Pour installer le service XMLA service, suivez les étapes suivantes.

### 1. Décrire les sources de données dans `datasources.xml`

Dans le répertoire WEB-INF de votre webapp, créer un fichier `datasources.xml`, avec un contenu comme celui-ci:

> `<?xml version="1.0"?>
> <DataSources>
> <DataSource>
> <DataSourceName>MondrianFoodMart</DataSourceName>
> <DataSourceDescription>FoodMart 2000 Data Warehouse From MS Analysis Services</DataSourceDescription>
> <URL>http://localhost:8080/mondrian/xmla</URL>
> <DataSourceInfo>Provider=mondrian; Jdbc=jdbc:odbc:MondrianFoodMart; JdbcDrivers=sun.jdbc.odbc.JdbcOdbcDriver</DataSourceInfo>
> <ProviderType>MDP</ProviderType>
> <AuthenticationMode>Unauthenticated</AuthenticationMode>
> <Catalogs>
> <Catalog name="FoodMart">
> <Definition>/WEB-INF/schema/FoodMart.xml</Definition>
> </Catalog>
> <Catalog name="Marketing">
> <DataSourceInfo>Provider=mondrian; Jdbc=jdbc:odbc:MarketingDB; JdbcDrivers=sun.jdbc.odbc.JdbcOdbcDriver</DataSourceInfo>
> <Definition>/WEB-INF/schema/Marketing.xml</Definition>
> </Catalog>
> </Catalogs>
> </DataSource>
> <DataSource>
> <DataSourceName>PostgreSQLTest</DataSourceName>
> <DataSourceDescription>Test Data Warehouse On PostgreSQL</DataSourceDescription>
> <URL>http://localhost:8080/mondrian/xmla</URL>
> <DataSourceInfo>Provider=mondrian; Jdbc=jdbc:postgresql://localhost/olap; JdbcDrivers=org.postgresql.Driver; JdbcUser=pgsql; JdbcPassword=pgsql</DataSourceInfo>
> <ProviderName>Mondrian</ProviderName>
> <ProviderType>MDP</ProviderType>
> <AuthenticationMode>Unauthenticated</AuthenticationMode>
> <Catalogs>
> <Catalog name="Test">
> <Definition>/WEB-INF/schema/TestPgsql.xml</Definition>
> <Catalog>
> </Catalogs>
> </DataSource>
> </DataSources>`

`<ProviderType>` et `<AuthenticationMode>` sont ignorés carl'implémentation XML/A ne supporte pas encore 'MDP' et 'Unauthenticated'.

#### Sources de données et catalogues multiples

Si vous avez l'intention d'utiliser Mondrian avec la librairie du client Microsoft ADOMD.NETou Simba's O2X bridge, les fichiers des sources de données doivent avoir un seul élément `<DataSource>`. Ces clients ne prendront en compte qu'une seule base de données. Les autres clients, comme Rex, fonctionne parfaitement avec des bases de données multiples.

Veuillez noter que chaque catalogue posède un attribut nom, et l'URI (répertoire) d'un fichier XML. Le nom du catalogue doit correspondre à l'attribut utilisé dans le fichier XML (par exemple `<Schema name="FoodMart">`).

Que vous utilisiez une ou plusieurs sources de données, les catalogues dans le fichier `datasources.xml` doivent avoir un nom unique.

### 5.2. Configurer XmlaServlet dans votre `web.xml`

Par exemple:

> `<servlet>
> <servlet-name>MondrianXmlaServlet</servlet-name>
> <servlet-class>mondrian.xmla.impl.DefaultXmlaServlet</servlet-class>
> </servlet>`

## 6. Divers

### 6.1. Configurer `mondrian.properties`

Les propriétés sont décrites dans le Guide de Configuration.

### 6.2. Installation de la mémpoire Cache

Vous aurez besoin de préciser la quantité de mémoire autorisée pour le cache en utilisant l'option -Xms de la machine virtuelle Java, par exemple -Xms256m pour 256 megs de mémoire of ram pour la machine virtuelle Java.

## 7. Compatibilité des bases de données

Mondrian fonctionne avec les bases de données suivantes:

1. Apache Derby (connu sous le nom de Cloudscape)
2. Firebird
3. hsqldb
4. IBM DB2
5. Informix
6. Ingres
7. Interbase
8. LucidDB
9. Microsoft Access
10. Microsoft SQL Server
11. MySQL
12. NuoDB
13. Oracle
14. PostgreSQL
15. Sybase
16. Teradata

Mondrian peut fonctionner avec la plupart des sources de données JDBC, même si votre base de données n'apparaît pas dans la liste ci-dessus, vous devriez essayer. Mondrian peut généralement le SQL en conséquence.

Si vous vous apercevez que Mondrian fonctionne avec une autre base de données, faites le nous savoir. Dites nous quel pilote vous utilisez, la version de votre base de données, les paramètres utilisés et tout ce dont vous avez eu besoin.

### Trucs généraux sur les bases de données

Pour des exemples de chaînes de connexion, regardez dans le fichier `mondrian.properties`. Il s'y trouve des exemple de chaînes de connexion pour la plupart des bases de données citées.

### Ingres

Andy Grimm écrit:

> En plus, j'ai du exécuter la commande perl suivante
> > `perl -pi -e "s/:00\.0/:00/g" FoodMartCreateData.sql`
> Cela a permis que le format des dates soit une date valide en enlevant le ".0" pour chacun des timestamp. Notre prochaine version supportera timestamps. Ceci est donc un truc pour une durée brève.

###

### Sybase

mizar_sf écrit:

> J'ai essayé plusieurs voies pour utiliser Mondrian (version 2.1RC) connecté avec un serveur de base de données base Sybase ASE [version 12.5]. Finalement, j'ai trouvé cette solution:

> - Télécharger un pilote compatible jdbc3 comme jtds-1.2.jar sur sourceforge.
> - Placer le pilote dans le répertoire TOMCAT_HOME/common/endorsed
> - Dans les fichiers de configuration comme
>   - mondrian/WEB-INF/datasources.xml
>   - mondrian/WEB-INF/web.xml
>   J'ai modifié les paramètres de cette façon:

>   > `Provider=mondrian; JdbcUser=userName; JdbcPassword=userPass; Jdbc=jdbc:jtds:sybase://xxx.xxx.xxx.xxx:port/dbName; JdbcDrivers=net.sourceforge.jtds.jdbc.Driver; Catalog=/WEB-INF/queries/myCatalog.xml`

>   (Le fichier datasources.xml semble ne pas avoir besoin d'être modifié si vous testez juste la base de données,mais vous en aurez besoin pour OPENI par exemple)

## 8. Problèmes de compatibilité

### 8.1. Weblogic 6.1 et Xerces

Weblogic 6.1 est fourni avec une version ancienne et incompatible de Xerces. Le symptome est l'erreur suivante

> `java.lang.VerifyError: (class: org/eigenbase/xom/wrappers/XercesDOMParser, method: parse signature: (Lorg/xml/sax/InputSource;)Lorg/w3c/dom/Document;) Incompatible object argument for function call
> at java.lang.Class.forName0(Native Method)
> at java.lang.Class.forName(Class.java:120)
> at org.eigenbase.xom.XOMUtil.createDefaultParser(XOMUtil.java:165)
> at org.eigenbase.resgen.Util.load(Util.java:49)
> ...`

La solution est de placer `xml-apis.jar` et `xercesImpl.jar` avant `weblogic.jar` dans votre class-path.

Generalement, Mondrian utilise un parseur XML compatible JAXP fourni par le système. Malheureusement, le parseur de Weblogic ne fonctionne pas en mode non-validé, mode que requiert Mondrian. Par conséquent, dans un environnement Weblogic, Mondrian utilise explicitement Xerces. Cette notice décrit comme changer le parseur par défaut de Weblogic.

### 8.2. JDK, Xalan et Tomcat

Les distributions Mondrian, requiert JDK 1.4.x, Xalan 2.6.0, et Tomcat 5.0.25 ou supérieur. Les choses fonctionnent mieux ainsi..

Si vous exécutez JDK 1.3.x, vous aurez besoin de fichiers JAR supplémentaires, parce que JDK 1.3 n'inclut pas le parseur XML. Copiez `xalan.jar` et `xml-apis.jar` dans le répertoire `TOMCAT_HOME/common/lib`. (ou `TOMCAT_HOME/common/endorsed`, si votre version de Tomcat dispose de ce répertoire). Si vous disposez d'une mauvaise configuration, alors, l'erreur typique sera celle-ci:

> `java.lang.VerifyError: Cannot inherit from final class
> at java.lang.ClassLoader.defineClass0(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
> at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
> at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1664)
> at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:953)
> at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1394)
> at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1274)
> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
> at org.apache.xerces.impl.XMLNSDocumentScannerImpl.createContentDispatcher(Unknown Source)
> at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.<init>(XMLDocumentFragmentScannerImpl.java:249)
> at org.apache.xerces.impl.XMLDocumentScannerImpl.<init>(XMLDocumentScannerImpl.java:245)
> at org.apache.xerces.impl.XMLNSDocumentScannerImpl.<init>(Unknown Source)
> at org.apache.xerces.parsers.IntegratedParserConfiguration.createDocumentScanner(Unknown Source)
> at org.apache.xerces.parsers.DTDConfiguration.<init>(DTDConfiguration.java:367)
> at org.apache.xerces.parsers.StandardParserConfiguration.<init>(StandardParserConfiguration.java:198)
> at org.apache.xerces.parsers.IntegratedParserConfiguration.<init>(Unknown Source)
> at org.apache.xerces.parsers.IntegratedParserConfiguration.<init>(Unknown Source)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)`

Vous aurez cette erreur avec JDK 1.3.1, Tomcat 4.1.18, Xalan 2.4.1. Les solutions pour cette erreur sont (a) de mettre à jour le JDK en version1.4 et supprimer `xml-apis.jar` et `xercesImpl.jar` de la librairie `mondrian.war`, ou (b) revenir à Xalan 2.3.1.

### 8.3. Log4j et Tomcat

Les librairies WARs Mondrian sont fournies avec une version packagée de log4j.jar. Cela peut engendrer un conflit avec votre serveur d'application, tel JBoss, et causer des erreurs dans le journal au sujet des appels log4j. Pour fixer ce problème, enlever le fichier log4j.jar de la librairie WAR Mondrian.

Author: Julian Hyde and others; last updated October, 2006; translation into French by Manfred Sherlock Olm based on install.html#70; last updated April, 2007
Version: $Id$ (log)
Copyright (C) 2001-2005 Julian Hyde
Copyright (C) 2005-2007 Pentaho