Pentaho与mondrain笔记(一)

前言

    前阵子调研Pentaho BI,mondrain最为的olap服务器也是调研重点。毕竟Pentaho BI已经做的相当成熟,研究工作在主要从功能和代码结构来分析框架,也涉及到一些源码。下面是一些散乱的点。

Pentaho记要

2.1 Pentaho模块划分

Pentaho是宽开源的BI,主要包含以下一些模块:

1) Kettle(Pentaho Data Integration,PDI),它是款以元数据驱动方式实现的ETL工具,支持拖拽操作和图形显示。

2)  BI Platform(Pentaho BI Platform and Server),它提供BI构架和解决方案所需的基础,该框架提供的核心服务包括身份验证、日志、审核、网络服务和规则引擎。该平台包括了一个集成的解决方案引擎,提供了报表、多维分析、表盘显示和数据挖掘组件。它模块化的设计和插件的构架允许第三方应用嵌入到本系统中来。

3)  Mondrian(Pentaho Analysis Services),它是款在线多维分析的服务,能够实时分析大量的数据。

4)Reporting(Pentaho Reporting),它包括报表设计器和报表引擎,支持多种格式的报表输出。

5)Weka(Pentaho Data Mining),它是全面的机器学习和数据挖掘的工具集,提供了分类、回归、关联规则和聚类等一整套预测分析算法。

还有一些其他的公共组件,如数据访问、图表、仪表盘等。

2.2 BI SERVER之结构

BI SERVER pentaho的核心,它负责将各个模块整合起来。安装后的BI目录结构划分如下:

 

 


 

 

 

    从图中可以看出,biserver的结构包含3个部分:

      data文件夹负责存储数据,这些数据包括它自带的demo数据,更主要的是包含biserver运行所需系统用户等本身权限等的数据。

      pentaho-solutions,这个文件夹包含了BI套件的解决方案,前面节介绍到biserver是提供框架和解析引擎的,而所解析的内容就是这个文件夹下的内容。其中主要是steel-wheels文件夹,包含一些默认的BI解决方案,有报表、olap等例子。System主要存储项目的配置信息,有系统配置信息,如数据库连接等,还有各个模块的配置信息和所需的插件,如下图:



 

        Biserver采用Spring初始化Java 对象并管理,利用hibernate进行系统数据库访问,利用spring security管理系统访问控制权限。

      还有Tomcat文件夹,BiServer整合了Tomcat,看到里面有3个与pentaho有关的项目。sw-style项目还不清楚具体什么作用,pentaho-style是为pentaho提供样式的,而pentaho是真正的运行解决方案的项目。

2.3 BI SERVER之启动

Biserver启动过程主要完成系统设置、Java对象初始化和数据源初始化等操作。系统设置主要设置solution-path的路径,并且数据源连接和需要初始化Java类等都在solution-path路径下以配置文件xml形式存在,因此启动过程首先设置solution-path路径。

tomcatpentaho项目中web.xml中分析出来项目的启动过程,其中首先

    <context-param>

       <param-name>solution-path</param-name>

       <param-value></param-value>

    </context-param>

定义了solution-path的存储路径,自然如果不设置就会有个默认的路径。默认路径需要到源码中才能看到了。在PentahoHttpSessionHelpergetSolutionPath方法中得知,solution-path的路径首先为web.xml中的配置,其次是其中定义的DEFAULT_LOCATIONS,最后在本项目中查找solution-path文件夹。

PentahoSolutionSpringApplicationContext中定义的getResourceByPath提供了获得solution-path下资源的方法,此方法获得是system文件夹下的,就是在初始化系统时需要用的文件夹。

然后,初始化Java对象,所需要初始化的Bean存储在solution-pathsystem文件夹下某个xml文件中,即下面配置中的xml文件。

    <context-param>

      <param-name>contextConfigLocation</param-name>     

      <param-value>pentaho-spring-beans.xml</param-value>

    </context-param>

WebSpringPentahoObjectFactoryinit方法中利用Spring框架的WebApplicationContextUtils初始化Bean,同时保存ApplicationContext类的beanFactory对象用于以后获取Bean对象。

pentaho-spring-beans.xml中包含的数据源的配置和所有所需初始化类的配置。

剩下的一些启动过程就常见的字符集设置、springSecurity设置和pentaho所用的servlet设置。其中关键

2.4 BISERVERSESSION管理

       Pentahobiserver对标准的httpSession进行了封装。利用RequestListener进行设置和封装session。其requestInitialized方法如下:

public void requestInitialized(ServletRequestEvent sre) {

    if (!(sre.getServletRequest() instanceof HttpServletRequest)) {

      return;

    }   

    HttpServletRequest request = (HttpServletRequest)sre.getServletRequest();

    IPentahoSession session = PentahoHttpSessionHelper.getPentahoSession(request);   

    if(logger.isTraceEnabled()) {

      logger.trace("binding session "+session+" to request "+sre.getServletRequest());

    }        PentahoSessionHolder.setSession(PentahoHttpSessionHelper.getPentahoSession(request));

  }

该方法主要完成对pentahosession封装,并且保存在本地线程变量中,主要用到俩个方法。

PentahoHttpSessionHelper.getPentahoSession(request)中,首先利用request.getSession()获得标准的session,然后session.getAttribute(IPentahoSession.PENTAHO_SESSION_KEY)获得IpentahoSession,自然首次请求即头次标红的地方这个IpentahoSessionnull,于是新建PentahoHttpSession,并设置入标准的session中。

PentahoHttpSession依然利用标准的HttpSession进行getAttributesetAttribute,他主要绑定个sessionParameters,里面包含pentaho常用的变量。

PentahoSessionHolder.setSession主要将此pentahoSession存入ThreadLocal对象,于是在本次请求任何函数处理过程中,都可以随时获得本session,从而减少了参数传递的复杂性。

由于Tomcat的线程池机制,一个线程在一次请求后可能被不同的session请求,于是需要在request销毁时将此pentahoSession移出线程本地变量。

 public void requestDestroyed(ServletRequestEvent sre) {    

    PentahoSessionHolder.removeSession();

 }

该方法就是将pentahosession移除本地线程变量中。

这就是PentahoSesssion管理机制。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值