导入mondrian源码步骤如下:
1 ) 下载mondrian-3.0.0.10550 和 jpivot 1.8.0 , mondrian-3.0.0以后的版本 和 jpivot的源码整合不到一起. jpivot好久没更新了!!!! 下载地址:http://mondrian.pentaho.com/
2 ) 在eclipse里新建个web工程, 命名mondrian.
3 ) 解压mondrian-3.0.0.10550/mondrian-3.0.0.10550-src.zip , 将解压的内容覆盖你的工程
4 ) 在ant视图下运行build.xml文件的prepare,parser,generate.resources,def四个目标过程(MondrianGuiDef类是通过builder生成的!! 如果builder过程中出现*********找不到subfloor.xml****的错误的话 你需要http://code.google.com/p/subfloor/wiki/SubflloorHowTo下载一个subfloor.xml文件放到bulid.xml同级目录下)
5 ) 将mondrian-3.0.0.10550/lib/mondrian.war发布包中的WEB-INF/lib中的jar包全部拷贝到Mondrian工程的lib目录中;
6) 根据编译的错误导入必要的jar包.
注意:1、最后执行ant完成对工程进行清理处理;
2、如果一切正常,之后则不需要用mondrian.jar文件,可以依此为标准检测是否构建成功。
导入jpivot源码步骤如下:
直接在你的mondrian工程下新建src/jpivot, 然后将jpivot-1.8.0/src/java的东东考进去就行了, 这个就不细说了
导入成功后就可以把jpivot.jar删掉了
配置数据源:
一. 使用odbj的方式:
控制面板 -> 管理工具 -> 数据源 (ODBC) -> 点击添加 -> 选择driver do microsoft access(*.mdb) -> 下一步 设置数据源名MondrianFoodMart -> 数据库选择(mondrian-3.0.0.10550/demo/access/MondrianFoodMart.mdb)
二. 其它数据库:
在你的mondrian/web-inf目录下执行以下命令(斜体字部分需要自己调整下)
java -cp "lib/mondrian.jar;lib/log4j-1.2.8.jar;lib/eigenbase-resgen.jar;lib/commons-logging-1.0.4.jar;lib/eigenbase-xom.jar;lib/eigenbase-properties.jar;lib/mysql.jar" mondrian.test.loader.MondrianFoodMartLoader -verbose -tables -data -indexes -jdbcDrivers=com.mysql.jdbc.Driver -inputFile=lib/FoodMartCreateData.sql -outputJdbcURL="jdbc:mysql://localhost:3306/foodmart?user=root&password=admin"
测试下:
1 ) 在你的mondrian工程下,新建一个包含main函数测试类,建立一个connection:
Connection conn=DriverManager.getConnection(String,BOOl);
测试的String的内容为:
Access:
“Jdbc=jdbc:odbc:MondrianFoodMart;Catalog=file:///D:/workspace /mondrian工程/webapp/WEB-INF/queries /FoodMart.xml;JdbcDrivers=sun.jdbc.odbc.JdbcOdbcDriver; “
在String中定义了数据库连接的参数,以及Schema文件的路径(CataLog)。
注意:
1 Provider=mondrian这一句是必须的,mondrian生成connection的时候对provider的值进行了单独的检查,没有这一句或者provider为其他值,都会触发异常;
2 第二个参数定义CataLog,若在String中已经定义,值为null(记住要把FoodMart.xml拷贝到D:/workspace /mondrian工程/webapp/WEB-INF/queries目录下);
3 Mondrian2.x和Mondrian3.x有较大改动,对于getConnection()函数而言,mondrian3.x只有两个参数,2.x 则有三个参数。
2 ) 定义查询语句:
String queryStr =”select {[Measures].[Unit Sales]} on columns “+
“from Sales”
注意:查询语句必须遵守mdx语法;
3 ) 利用connection生成一个Query对象:
Query query = conn.paseQuery(queryStr);
4 ) 执行查询得到结果:
Result result = conn.execute(query);
5 ) 控制台打印结果:
PrintWriter pw = new PrintWriter(System.out);
result.print(pw);
pw.flush();
如果以上测试通过说明mondrian以及数据源配置成功了, 下面配置下jpivot 让web工程能跑起来:
1) 打开mondrian/WebRoot/WEB-INF/queries下的mondrian.jsp, 设置下数据源什么的, 看看 你懂的...
2) 将工程发布到tomcat -> 运行 -> http://localhost:8080/mondrian, 页面有几个demo, 其中有几个链接会报错,这个是官方的demo有问题,需要我们手动修改下,修改方法如下(修改方法粘贴的网上的):
**************************************************************************************
1》 (error) * Various queries formatted using the Mondrian tag-library
在web.xml中找到一下内容
<context-param>
<param-name>connectString</param-name>
<param-value>@[email protected]</param-value>
</context-param>
把connectstring修改成如下即可(access连击使用默认odbc)
<context-param>
<param-name>connectString</param-name>
<!-- The Test Of "Various queries formatted using the Mondrian tag-library" -->
<param-value>Provider=mondrian;Jdbc=jdbc:odbc:MondrianFoodMart;Catalog=/WEB-INF/queries/FoodMart.xml;JdbcDrivers=sun.jdbc.odbc.JdbcOdbcDriver;</param-value>
</context-param>
2》(error) * Basic interface for ad hoc queries
在web.xml中找到一下内容
<servlet>
<servlet-name>MDXQueryServlet</servlet-name>
<servlet-class>mondrian.web.servlet.MDXQueryServlet</servlet-class>
<init-param>
<param-name>connectString</param-name>
<param-value>@[email protected]</param-value>
</init-param>
</servlet>
把connectstring修改成如下即可(access连击使用默认odbc)
<servlet>
<servlet-name>MDXQueryServlet</servlet-name>
<servlet-class>mondrian.web.servlet.MDXQueryServlet</servlet-class>
<init-param>
<param-name>connectString</param-name>
<!--The Test Of "Basic interface for ad hoc queries"-->
<param-value>Provider=mondrian;Jdbc=jdbc:odbc:MondrianFoodMart;Catalog=/WEB-INF/queries/FoodMart.xml;JdbcDrivers=sun.jdbc.odbc.JdbcOdbcDriver;</param-value>
</init-param>
</servlet>
3》(error) * JPivot pivot table by XMLA
4》(error) * XML for Analysis tester
上面这两个可以一起来解决,找到/WEB-INF/datasources.xml,这里定义了一个DataSource,我们可以再新建一个DataSource
<DataSource>
<DataSourceName>Provider=Mondrian;DataSource=AccessTest;</DataSourceName>
<DataSourceDescription>Mondrian FoodMart Data Warehouse</DataSourceDescription>
<URL>http://localhost:8888/mondrian/xmla</URL> <DataSourceInfo>Provider=mondrian;Local=zh_CN;DynamicSchemaProcessor=mondrian.i18n.LocalizingDynamicSchemaProcessor;Jdbc=jdbc:odbc:MondrianFoodMart;Catalog=/WEB-INF/queries/FoodMart.xml;JdbcDrivers=sun.jdbc.odbc.JdbcOdbcDriver;</DataSourceInfo>
<ProviderName>Mondrian</ProviderName>
<ProviderType>MDP</ProviderType>
<AuthenticationMode>Unauthenticated</AuthenticationMode>
<Catalogs>
<Catalog name="FoodMart">
<Definition>/WEB-INF/queries/FoodMart.xml</Definition>
</Catalog>
</Catalogs>
</DataSource>
我们定义了一个叫“AccessTest”的Datasource。接下来打开/WEB-INF/queries/xmla.jsp,将替dataSource="Provider=Mondrian;DataSource=MondrianFoodMart;"换成dataSource="Provider=Mondrian;DataSource=AccessTest;"即可,因为默认的MondrianFoodMart数据源是关联到oracle数据库的,而我们偷来用了Access :)
****************************************************************************************