El núcleo de Mondrian es un JAR que actúa como "JDBC para OLAP": proporcionando conexiones y ejecutando consultas SQL contra la base de datos relacional que sirve los datos. Los binarios de Mondrian vienen empaquetados de diferentes maneras:
Ambas distribuciones contienen los fuentes de Mondrian. Además, todos los JARs necesarios para la ejecución de Mondrian están incluidos en la distribución, en el directorio WAR /WEB-INF/lib.
A continuación se detallan una serie de indicaciones para realizar la instalación del binario:
mondrian-version.zip
desde SourceForge, y descomprímalo.
Si su objetivo es desarrollar con Mondrian, existen instrucciones adicionales para el acceso al servidor de control de fuentes Perforce y para compilar el código fuente en the Developer's Guide.
La base de datos 'FoodMart' forma parte de la distribución binaria sin base de datos embebida (non-embedded). Se proporciona en dos formatos: como base de datos Microsoft Access (
demo/access/MondrianFoodMart.mdb
) y como un script SQL de sentencias de inserción (
demo/FoodMartCreateData.sql
).
Bajo Windows, utilizar la base de datos Access es lo mas sencillo de configurar, ya que sólo es necesario definir una fuente de datos ODBC. Si se quiere probar a utilizar una fuente de datos que no sea Access, o si no está utilizando Windows, será necesario crear una base de datos vacía y cargar sobre la misma los datos proporcionado en el script, utilizando la utilidad MondrianFoodMartLoader.
Si está utilizando Windows, utilizar Microsoft Access es la manera más sencilla de configurar la base de datos de prueba. Sólo será necesario configurar una fuente de datos ODBC para los datos de prueba.
La base de datos de pruebe debe ser accesibles para las prueba unitarias si está realizando pruebas con esta base de datos, o cargados en otra base de datos.
Bajo el menú 'Herramientas Administrativas', situado en el Panel de Control de su equipo, haga click sobre 'Orígenes de datos (ODBC)' para abrir el administrados de fuentes de datos ODBC. A continuación cree un DSN de sistema llamado
MondrianFoodMart
apuntando a MONDRIAN_HOME
/demo/access/MondrianFoodMart.mdb
. (Esto permitirá que Mondrian acceda a los datos utilizando la cadena de conexión JDBC "jdbc:odbc:MondrianFoodMart
".
Si no utiliza Microsoft Access, utilice la utilidad MondrianFoodMartLoader para crear una base de datos y cargar los datos a partir del script SQL.
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>]
]
Opción
Descripción
-verbose
Modo de eco de pantalla.
-tables
Creación de tablas a través de JDBC, o generación de un fichero con sentencias CREATE TABLE en un directorio de salida para todas las tablas FoodMart, en función de la base de datos de salida. Si no se especifica este parámetro, se asume que las tablas existe y que se borrarán primero de cargar los datos.
-data
Carga de datos desde una entrada (JDBC, fichero con sentencias insert) a uno de salida (JDBC, fichero de sentencias insert). Cualquier dato existente se borrará primero.
-indexes
Crea índice en la salida JDBC, o genera un fichero con sentencias CREATE INDEX en un directorio de salida, para todas las tables de FoodMart, en funcón de la base de datos de salida
-jdbcDrivers=<driver list>
Lista separarada por comas de drivers JDBC necesarios para la conexión con las fuentes de datos origen y destino. Los ficheros JAR que contienen estos drivers deben de estar en el directorio especificado en la variable classpath (argumento
-cp
del comandojava
).
-outputJdbcURL=<jdbcURL>
URL JDBC para la base de datos destino
-outputJdbcUser=<user>
Nombre de usuario de la base de datos destino
-outputJdbcPassword=<password>
Password de la base de datos destino
-outputDirectory=<directory name>
Opcional. Directorio de creación de los scripts de la bases de datos. Las sentencias están el formato adecuado a la base de datos que se indique en outputJdbcURL.
-outputJdbcBatchSize=<batch size>
Tamaño en batch para la salida de las sentencias JDBC INSERT. Por defecto es 50. Si se configura como, El batches de JDBC no se utiliza.
-inputJdbcURL=<jdbcURL>
URL JDBC de la base de datos fuente
-inputJdbcUser=<user>
Nombre de usuario de la base de datos fuente
-inputJdbcPassword=<password>
Password de la base de datos fuente
-inputFile=<file name>
Opcional. Si no hay parámetros relativos a la Base de datos, se assume que los datos vienen de este fichero de sentencias INSERT.
La fuente normal para la utilidad MondrianFoodMartLoader es un script SQL ([-inputFile=<file name>]
). Pero si se ha cargado ya datos en una fuente de datos JDBC (como pueda ser Microsoft Access), utilice -inputJdbcURL
y las opciones relacionadas para copiar datos desde la otra fuente de datos JDBC.
El cargador utiliza el estándar J2SE JDBC, el driver JDBC, y algunas clases fuera del Mondrian que no suponene ficheros JARs adicionales. Ha sido provado contra Oracle, Postgres, MySQL y Microsoft Access.
Si su destino es una base de datos JDBC, deberá crear la base de datos o esquema antes de realizar la carga de datos. Esto es específico para cada base de datos.
Puede ignorar con seguridad las advertencias del log4j:
log4j:WARN No appenders could be found for logger (mondrian.rolap.RolapUtil).
log4j:WARN Please initialize the log4j system properly.
Aquí tiene algunos ejemplos que puede ilustrar la idea genera de cómo invocar a MondrianFoodMartLoader
. La línea de comandos cambiará dependiendo del sistema operativo, las fuentes y destinos de datos que utilice.
El siguiente ejemplo es una línea de commandos Linux que crea un "schema" para MySQL llamado 'foodmart', y crea las tables FoodMart desde los datos incluidos en los scripts SQL. Primero, crea una base de datos
foodmart
y un usuario 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
A continuación carga los datos:
$
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"
El siguiente ejemplo es una línea de commandos Windows que crea las tables FoodMart para PostgreSQL desde los datos almacenados en una base de datos 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
lib/mondrian.war
sobre TOMCAT_HOME
/webapps/mondrian
TOMCAT_HOME
/webapps/mondrian
y cambia las propiedades mondrian.jdbcDrivers
para la base de datos que ha configurado anteriormente siguiendo las instrucciones de este documento.
TOMCAT_HOME
/webapps/mondrian/WEB-INF
y personalice las dos cadenas de conexión existentes a la base de datos FoodMart que ha instalado, teniendo en
cuenta el tipo de base de datos que ha elegido. Es decir,
Provider=mondrian;Jdbc=jdbc:odbc:MondrianFoodMart;Catalog=/WEB-INF/queries/FoodMart.xml;JdbcDrivers=sun.jdbc.odbc.JdbcOdbcDriver;
Cambiaría a
Provider=mondrian;Jdbc=jdbc:mysql://localhost/foodmart?user=foodmart&password=foodmart;Catalog=/WEB-INF/queries/FoodMart.xml;JdbcDrivers= com.mysql.jdbc.Driver;
fourheir.jsp
, mondrian.jsp
,
colors.jsp
y arrows.jsp
situados en el directorio TOMCAT_HOME
/webapps/mondrian/WEB-INF/queries
. Modifique la línea:
<jp:mondrianQuery id="query01" jdbcDriver="sun.jdbc.odbc.JdbcOdbcDriver" jdbcUrl="jdbc:odbc:MondrianFoodMart" catalogUri="/WEB-INF/queries/FoodMart.xml">
por los mismos parámetros de base de datos para la base de datos FoodMart instalada según las instrucciones. Para el caso de MySQL, deberíamos tener algo del estilo a:
<jp:mondrianQuery id="query01" jdbcDriver="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://localhost/foodmart?user=foodmart&password=foodmart" catalogUri="/WEB-INF/queries/FoodMart.xml">
TOMCAT_HOME/common/endorsed
xalan.jar
a TOMCAT_HOME
/common/endorsed
lib/mondrian-embedded.war
sobre TOMCAT_HOME
/webapps/mondrian-embedded
Para configurar un servicio XMLA, siga los siguientes pasos.
datasources.xml
En el directorio WEB-INF de su webapp, cree un fichero datasources.xml
, con un contenido como el siguiente:
<?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>
y <AuthenticationMode>
se ignoran ya que la implementación actual de XML/A sólo soporta 'MDP' y 'Unauthenticated'.
Si tiene intención de utilizar Mondrian con la librería cliente de Microsoft,
ADOMD.NET o Simba's O2X bridge
, el fichero de fuentes de datos debe tener específicamente un elemento <DataSource>
. Estos clientes ignorarán todos las fuentes de datos excepto una. Otros clients XML/A clients, como
Rex o Jrubik trabajan con múltiples fuentes de datos.
Nótese que cada catálogo tiene un atributo name, y el URI (path) de un fichero XML schema. El nombre del catálogo debe coincidir con el atributo name del esquema del fichero (por ejemplo
<Schema name="FoodMart">
).
Ya sea, que utilice una fuente de datos o varias, los catálogos en el fichero datasources.xml
deben contener nombres únicos.
web.xml
Por ejemplo:
<servlet>
<servlet-name>MondrianXmlaServlet</servlet-name>
<servlet-class>mondrian.xmla.impl.DefaultXmlaServlet</servlet-class>
</servlet>
mondrian.properties
Las propiedades se describen en la Configuration Guide.
Deberá especificar la cantidad de memoria disponible para la cache utilizando la opción -Xms de la Java VM, por ejemplo -Xms256m para 256 Mb de ram para la JVM.
Se sabe que Mondrian corre sobre las siguiente bases de datos:
Mondrian puede trabajar con casi todo tipo de fuentes de datos JDB, incluso si su base de datos no aparece en la lista anterior, del una oportunidad. Mondrian puede de forma genérica conocer las capacidades de la base de datos del driver JDBC, y generar SQL correcto.
Si consigue hacer funcionar Mondrian con otra base de datos, mándenos un email. Háganos llegar el driver que utilice, la versión de su base de datos, configuración de propiedades, y cualquier detalle que haya tenido que considerar.
Para ejemplos de cadenzas de conexión, mire en mondrian.properties
. Hay ejemplos de cadenas de conexión para muchas bases de datos.
Intenté varias soluciones para conseguir que Mondrian (He utilizado 2.1RC) conectase con un servidor Sybase ASE [version 12.5]. Finalmente encontré las siguientes soluciones:
- Descargar un driver jdbc3 compliant driver como jtds-1.2.jar desde sourceforge.
- Colocar el driver en TOMCAT_HOME/common/endorsed
- En ficheros de configuración como
- mondrian/WEB-INF/datasources.xml
- mondrian/WEB-INF/web.xml
Modifiqué la línea de parámetros como sigue:
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
(datasources.xml no necesita ser modificado si solo necesitas probar la base de datos, pero si estás utilizando algo como OPENI hay que modificarlo.)
Weblogic 6.1 viene con una versión antigua e incompatible de Xerces. El síntoma del error:
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 solución pasa por sustituir xml-apis.jar
y
xercesImpl.jar
antes de weblogic.jar
en su class-path.
Generalmente, Mondrian utiliza cualquier parser XML compatible JAXP que proporcione el sistema. Desafortunadamente el analizador de Weblogic no se puede configurar en modo non-validating, y Mondrian lo necesita. Por tanto, en un entorno Weblogic, Mondrian utiliza explícitamenteXerces. Esta nota describe cómo cambiar el analizador XML por defecto del Weblogic's.
Los binarios de Mondrian, tal y como se pueden descargar de la web, necesitan JDK 1.4.x, Xalan 2.6.0, y Tomcat 5.0.25 o superior.
Si está ejecutando JDK 1.3.x, necesitará ficheros JAR exta, porque JDK 1.3 no incluye un parser XML. Copie
xalan.jar
y xml-apis.jar
a TOMCAT_HOME
/common/lib
. (o TOMCAT_HOME
/common/endorsed
, si su versión de Tomcat tiene este directorio). Si su configuración es errónea, el error típico es el siguiente:
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)
Este error aparece con JDK 1.3.1, Tomcat 4.1.18, Xalan 2.4.1. Las posibles soluciones a este error pasan por (a) cambiarse a JDK 1.4 y eliminar
xml-apis.jar
y xercesImpl.jar
del fichero
mondrian.war
, o (b) volver a Xalan 2.3.1.
Los WARs de Mondrian contienen en su distribución una versión de log4j.jar. Esto puede entrar en conflicto con su servidor de aplicaciones, como en el caso de JBoss, y causar errores en el log. Para solucionar esto, elimine log4j.jar del WAR de Mondrian.
Author: Julian Hyde and others; traducido por Félix Alberto Martín, based on install.html#65, 23 August, 2006.
Version: $Id$
(log)
Copyright (C) 2001-2005 Julian Hyde
Copyright (C) 2005-2006 Pentaho and others