mondrian 4.7 源码部署

Posted rodge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mondrian 4.7 源码部署相关的知识,希望对你有一定的参考价值。

mondrian是一个开源的数据分析工程, 网上有关mondrian3.X的源码部署比较多, 有关4.X的部署较少. 目前官方推荐使用的时mondrian3.7的修订版, 可以再github上下载到最近更新维护的mondrian-master, 下载下来后基本上只需要按部就班的使用maven build一下就可以正常使用了, 如有问题可以根据提示进行一下排查就OK了. mondrian4.7目前是一个beta版, 相关的部署文档较少, 笔者也是痛苦的部署了很多次, 各方请教才部署成功的, 下面就部署的一些坑进行相关记录.

1. 环境配置

  ant 1.9.11

  maven 3.3.9

  git 2.17.0

  jdk 1.8.0_91

可以在GitHub上下载mondrian4.7.0.11的源码  https://github.com/pentaho/mondrian/tree/4.7.0.11

建议在 http://sourceforge.net/projects/mondrian/ 上也下载一份相应的源码, 此处的源码是.jar结尾的

2. 源码编译

在github上下载的源码和在源码在编译之前是会缺失一部分java文件的. 因此首先需对工程进行编译.

2.1 ant编译环境

将github上下载的源码解压缩, 解压之后在跟你目录下运行ant, 如下图所示. 由于ant编译过程中需要时使用的git, 因此我们需要安装配置git的环境.

 

在file:///C:/Users/Administrator/Downloads/mondrian-4.7.0.11/mondrian-4.7.0.11/doc/developer.html中提供了开发者源码编译步骤. 可以作为参考.

 如果编译的过程中出现类似如下错误, 则可以根据提示去对应网址(https://nexus.pentaho.org/content/groups/omni/), 下载相应的jar包, 放在{user}/.subfloor/对应的目录中:

下载后的目录如下图所示:

 

ant环境配置好后, 继续执行ant命令, 会出现如下图所示的提示, 则表示ant编译成功, 缺失的类也生成了.

 

2.2 maven环境配置

可以将(https://nexus.pentaho.org/content/groups/omni/)配置为maven中央仓库, mondrian大部分以来的jar包都可以在此处找到. 不过笔者该仓库配置没有生效, 不知道是不是应为https的原因. 对于无法自动下载的jar包, 笔者手动下载安装到maven仓库中了. 下载过的jar包如下图所示.

将jar包手动install到本地仓库的命令如下:

mvn install:install-file -Dfile=C:\\Users\\Administrator\\Downloads\\jmxri-1.2.1.jar -DgroupId=com.sun.jmx -DartifactId=jmxri -Dversion=1.2.1 -Dpackaging=jar

其中: Dfile: 指定jar所在路径

  DgroupId: 指定jar包对应的groupId

  DartiactId: 指定jar包的artifactId

  Dversion: 指定jar包的版本信息

  Dpackaging: 指定打包的形式, 此处为jar

3 工程导入eclipse

将经过ant编译后的工程导入eclipse中, eclipse一般会制动识别指定的source所在的包, 如果无法识别或者是识别后无法将java文件自动编译成.class文件的话, 则在buildpath中手动添加source或将之前的添加的删除然后手动添加一遍, 并指定编译后class的存放路径.

由于ant编译时, 只编译的部分类, 因此在eclipse中可以在run as-->maven bulid.. 中使用install -DskipTests -X命令来编译所有java文件(test除外).

 初始导入install后的工程如下图所示, java文件中\'空心J\'表示java文件未编译:

在build path中将source移除后重新导入, 并制定变异后class的存放地址, 即可自动编译java文件

mondrian编译打包完成后, 就可以进行相应的测试了

 

4 mondrian源码测试:

mondrian本身自带demo, 在demo中包含一套完整的测试时所需要的schema和sql建表语句. 测试类如下所示:

package com.rodge;

import java.io.PrintWriter;
import mondrian.olap.Connection;
import mondrian.olap.DriverManager;
import mondrian.olap.Query;
import mondrian.olap.Result;

public class TestMondrian {

public static void main(String[] args) {
String str = "Provider=mondrian;"+
"Jdbc=jdbc:mysql://localhost:3306/foodmart?user=root&password=123456;"+
"Catalog=file:///F:/mondrian/mondrian-4.7.0.11/demo/FoodMart.mondrian.xml;"+
"JdbcDrivers=com.mysql.jdbc.Driver; ";
Connection conn = DriverManager.getConnection(str, null);
// 定义查询语句,遵循mdx语法
String queryStr = "select {[Measures].[Unit Sales]} on columns from Sales";
// 利用connection生成一个Query对象
Query query = conn.parseQuery(queryStr);
@SuppressWarnings("deprecation")
// 执行查询得到结果:
Result result = conn.execute(query);
// 控制台打印结果
PrintWriter pw = new PrintWriter(System.out);
result.print(pw);
pw.flush();
System.out.println("successful!");

}

}

foodmart的数据创建将在后面介绍, 当数据库配置完成后, 运行该测试类, 会出现如下错误:

这是因为, 在mondrian.resource.MondrianResource中, 找不到MondrianResource.propertis配置文件. 该配置文件可以在mondrian-4.7.0.0-12.jar\\mondrian\\resource 中获取, mondrian-4.7.0.0-12.jar实在(https://sourceforge.net/projects/mondrian/files/mondrian/mondrian-4.7.0/mondrian-4.7.0.0-12-sources.jar)中下载得到的. 将MondrianResource.propertis配置文件拷贝到eclipse中/mondrian/src/main/java/mondrian/resource/MondrianResource.properties中即可.

 

5 测试foodmart数据库的配置

 foodmart测试数据库的配置在网上有很多版本, 但是笔者测试后, 发现都需要进行相关改动, 位置, 笔者将数据库配置的步骤进行了整理.

有序mondrian4.7中不包含foodmart的相关信息的配置, 改配置信息需要在mondrian-3.7.0.0-752.zip中寻找, 下载地址为:ttp://sourceforge.net/projects/mondrian/files/mondrian/mondrian-3.7.0/mondrian-3.7.0.0-752.zip

下载下来后, 解压, 在mondrian-3.7.0.0-752.zip\\lib目录中, 将jpivot.war拷贝到tomcat/webapps并重命名为mondrian.war, 解压该war包, 并将mysql的链接类拷贝到tomcat/lib中, 

 

进入E:\\application\\apache-tomcat-7.0.65\\webapps\\mondrian\\WEB-INF\\lib目录, 执行如下命令, 即可创建foodmark需要的表结构, 当然, 前提是数据中库拥有foodmart这个数据库.

java -cp "E:/application/apache-tomcat-7.0.65/webapps/mondrian/WEB-INF/lib/mondrian.jar;E:/application/apache-tomcat-7.0.65/webapps/mondrian/WEB-INF/lib/log4j-1.2.8.jar;E:/application/apache-tomcat-7.0.65/webapps/mondrian/WEB-INF/lib/commons-logging-1.0.4.jar;E:/application/apache-tomcat-7.0.65/webapps/mondrian/WEB-INF/lib/eigenbase-resgen.jar;E:/application/apache-tomcat-7.0.65/webapps/mondrian/WEB-INF/lib/eigenbase-xom.jar;E:/application/apache-tomcat-7.0.65/webapps/mondrian/WEB-INF/lib/eigenbase-properties.jar;E:/application/apache-tomcat-7.0.65/lib/mysql-connector-java-5.1.31.jar" mondrian.test.loader.MondrianFoodMartLoader -verbose -tables -data -indexes -jdbcDrivers=com.mysql.jdbc.Driver -inputFile="C:/Users/Administrator/Downloads/demo/FoodMartCreateData/FoodMartCreateData.sql" -outputJdbcURL="jdbc:mysql://localhost:3306/foodmart?user=root&password=123456"

 

以上是关于mondrian 4.7 源码部署的主要内容,如果未能解决你的问题,请参考以下文章

在没有模式工作台的情况下在 pentaho 5.1 中部署 mondrian 模式

MONDRIAN:刷新维度缓存

Mondrian - 事实表数据作为 XML

使用 Mondrian 在 MDX 查询中获取每个轴的级别

如何在 Mondrian OLAP 中使用 DRILLTHROUGH?

Mondrian 3.14.0 服务配置说明(限功能使用验证)