场景:在一个Webapp里集成Mondrian,按官方文档,Catalog位置(即cube文件所在路径)是这个样子的:
Catalog=file:demo/FoodMart.xml
但实际测试发现Mondrian无法找到这个文件,提示信息是“Virtual file is not readable”。如果把相对路径改为绝对路径则是可以的,例如:
Catalog=file:/c:/my/cube/folder/FoodMart.xml
绝对路径的问题是在不同开发部署环境下不太可能相同,所以还是得找其他办法。官方文档里没有写其他例子,按经验试试classpath协议(cube文件放在classpath下):
Catalog=classpath:/my/cube/resource/FoodMart.xml
在windows下居然成功了,其实Mondrian也是调用java.net.URL来获取资源的,所以能解释通。问题是,在linux下同样代码却不行,提示信息是“unknown protocal: classpath ”,两个开发环境都是JDK 1.7,没道理。(这个问题一直没解决)
后来查saiku(基于mondrian的一个开源BI软件)问题,发现还可以用这种写法(链接1、链接2):
Catalog=res:/my/cube/resource/FoodMart.xml
试了一下,在windows和linux下都顺利通过。前提依然是cube文件要放在classpath下。这也是目前使用的解决方案。
补充:还有一种方法是直接写http://开头的链接,这需要把cube文件暴露出来,感觉不如res:的干净。