先从最基础的JPivot开始,JPivot可以说是Mondrian的姊妹项目,是基于Java的数据仓库表现层工具。这个项目的主页在http://jpivot.sourceforge.net/,那里除了JPvoit之外,还有一个比较有用的东西,据说是Mondrian的EClipse插件,上一篇文章中我是手工撰写schema的,这个插件应该有类似MS的图形化设计界面吧,以后再研究这个插件吧,言归正传,今天研究的主题是JPivot。
首先注意到两个要点:
JPivot 使用 WCF (Web Component Framework) ,基于XML/XSLT来渲染Web UI组件。
JPivot是完全基于taglib的。
1. 寻找突破口
从哪里开始呢,当然是先从demo入手了,在浏览器里面打开demo,点击其中的例子,发现他们指向的链接是
http://localhost/mondrian/testpage.jsp?query=mondiran
http://localhost/mondrian/testpage.jsp?query=xmla
http://localhost/mondrian/testpage.jsp?query=fourthier
这下比较清楚目标了,先研究一下testpage.jsp吧。
2. testpage.jsp研究
在testpage.jsp中,比较重要的一段是
<%-- include query and title, so this jsp may be used with different queries --%>
<wcf:include id="include01" httpParam="query" prefix="/WEB-INF/queries/" suffix=".jsp"/>
<c:if test="${query01 == null}">
<jsp:forward page="/index.jsp"/>
</c:if>
<%-- define table, navigator and forms --%>
<jp:table id="table01" query="#{query01}"/>
其中<wcf:include id="include01" httpParam="query" prefix="/WEB-INF/queries/" suffix=".jsp"/>取得参数query的值,并且匹配位置在/WEB-INF/queries/,扩展名是jsp的文件。
另一句<jp:table id="table01" query="#{query01}"/>指明了query的名称是query01。
注意这两个query是不一样的,wcf的query是http的参数名称叫做query,而jp的query是mondrian的query对象。
在testpage.jsp的后面还定义了form,navigator,chart等等,这里先不做深入研究了。
2.mondrian.jsp研究
下面看看testpage.jsp用到的mondrian.jsp,打开/WEB-INF/queries/mondrian.jsp,哈哈,真是似曾相识啊。这里定义了mondrian的query,它的id是query01,还有jdbc的相关信息。以及这个query对应的mdx查询select语句。
再打开xmla.jsp发现也是同样的结构,这样就比较清楚了。下面就可以依葫芦画瓢,进行我们的测试了。
3.测试
首先写一个mondriantest.jsp放在/WEB-INF/queries目录
<%@ page session="true" contentType="text/html; charset=ISO-8859-1" %>
<%@ taglib uri="http://www.tonbeller.com/jpivot" prefix="jp" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<jp:mondrianQuery id="query01" jdbcDriver="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://localhost/mondrian" catalogUri="/WEB-INF/queries/mondriantest.xml"
jdbcUser="root" jdbcPassword="" connectionPooling="false">
select {[Measures].[Salary]} ON COLUMNS, {[Employee].[employeeId].Members} ON ROWS from CubeTest
</jp:mondrianQuery>
<c:set var="title01" scope="session">Test Query uses Mondrian OLAP</c:set>
这里用到的mondriantest.xml就是上一篇文章中写的那个。
然后在浏览器地址栏输入http://localhost/mondrian/testpage.jsp?query=mondriantest,大功告成