mondrian是一個開源的數據分析工程, 網上有關mondrian3.X的源碼部署比較多, 有關4.X的部署較少. 目前官方推薦使用的時mondrian3.7的修訂版, 能夠再github上下載到最近更新維護的mondrian-master, 下載下來後基本上只須要循序漸進的使用maven build一下就能夠正常使用了, 若有問題能夠根據提示進行一下排查就OK了. mondrian4.7目前是一個beta版, 相關的部署文檔較少, 筆者也是痛苦的部署了不少次, 各方請教才部署成功的, 下面就部署的一些坑進行相關記錄.html
ant 1.9.11java
maven 3.3.9mysql
git 2.17.0git
jdk 1.8.0_91github
能夠在GitHub上下載mondrian4.7.0.11的源碼 https://github.com/pentaho/mondrian/tree/4.7.0.11web
建議在 http://sourceforge.net/projects/mondrian/ 上也下載一份相應的源碼, 此處的源碼是.jar結尾的sql
在github上下載的源碼和在源碼在編譯以前是會缺失一部分java文件的. 所以首先需對工程進行編譯.數據庫
將github上下載的源碼解壓縮, 解壓以後在跟你目錄下運行ant, 以下圖所示. 因爲ant編譯過程當中須要時使用的git, 所以咱們須要安裝配置git的環境.apache
在file:///C:/Users/Administrator/Downloads/mondrian-4.7.0.11/mondrian-4.7.0.11/doc/developer.html中提供了開發者源碼編譯步驟. 能夠做爲參考.tomcat
若是編譯的過程當中出現相似以下錯誤, 則能夠根據提示去對應網址(https://nexus.pentaho.org/content/groups/omni/), 下載相應的jar包, 放在{user}/.subfloor/對應的目錄中:
下載後的目錄以下圖所示:
ant環境配置好後, 繼續執行ant命令, 會出現以下圖所示的提示, 則表示ant編譯成功, 缺失的類也生成了.
能夠將(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
將通過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中便可.
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"