2. 配置 Pentaho

  1. 下载并安装 Pentaho 社区版。

  2. http://www.pentaho.com/marketplace/ 下载 Saiku Analytics 插件 (Meteorite BI),然后安装。

  3. saiku 移到 $PENTAHO_HOME$/pentaho-server/pentaho-solutions/system 下面,这里 $PENTAHO_HOME 是 Pentaho 安装的目录。

  4. 如果 Saiku 插件跟最新版本的 Pentaho 服务器不兼容的话,按照下面步骤解决:

    • $PENTAHO_HOME$/pentaho-server/pentaho-solutions/system/saiku/lib 目录删除 cpf-core-6.0.0.0-353.jarcpf-pentaho5-6.0.0.0-353.jar

    • 从 Pentaho 的安装目录(比如 $PENTAHO_HOME$/pentaho-server/pentaho-solutions/system/sparkl/lib 或者 …​/cgg/lib)拷贝新的 lib 到 $PENTAHO_HOME$/pentaho-server/pentaho-solutions/system/saiku/lib 目录。

      cpf-core-7.1.0.0-12.jar
      
      cpf-pentaho-7.1.0.0-12.jar
      
      cpk-core-7.1.0.0-12.jar
      
      cpk-pentaho5-7.1.0.0-12.jar
      Tip

      也许安装的 Pentaho 版本不带 cpk-core…​cpk-pentaho…​ Jar 包。这样的话只需要使用 cpf-corecpf-pentaho Jar 包。

  5. 访问 http://licensing.meteorite.bi 并且注册一个新账号。验证了账号之后,创建一个公司,并且为公司生成一个社区版许可:

    • 登录系统点击 CREATE NEW LICENSE 按钮。

    • 在创建新许可的页面设置许可类型为:COMMUNITY_EDITION。

    • 保存然后下载许可。重命名许可文件为 license.lic 然后拷贝该文件到 $PENTAHO_HOME$/pentaho-server/pentaho-solutions/system/saiku 目录。

  6. 下载并安装 Pentaho Data Integration 工具。

  7. 更改 Pentaho 默认端口为 18081:

    • 目录切换到 $PENTAHO_HOME/pentaho-server/tomcat/conf

    • server.xml 文件中修改 Tomcat 默认端口为 18081:

    <Connector URIEncoding="UTF-8" port="18081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="18443" />
  8. server.xml 修改 Tomcat shutdown 端口为 8015,避免跟 CUBA 默认的 shutdown 端口冲突:

    <Server port="8015" shutdown="SHUTDOWN">
        ...
    </Server>
  9. 在 Pentaho 设置 CUBA 用户的认证:

    • 下载 cuba-bi-pentaho-1.6.0.jar 然后拷贝到 $PENTAHO_HOME$/pentaho-server/tomcat/webapps/pentaho/WEB-INF/lib

    • 下载 cuba-bi-pentaho-1.6.0-plugin.zip,解压后拷贝 saiku-cuba-bi 目录到 $PENTAHO_HOME/pentaho-server/pentaho-solutions/system

    • $PENTAHO_HOME/pentaho-server/pentaho-solutions/system 目录创建新文件 cuba-pentaho-community-authentication.xml,并添加如下内容:

      <?xml version="1.0" encoding="UTF-8"?>
      
      <!--+ | Application context containing FilterChainProxy. +-->
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:util="http://www.springframework.org/schema/util"
             xmlns:sec="http://www.springframework.org/schema/security"
             xmlns:pen="http://www.pentaho.com/schema/pentaho-system"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.1.xsd http://www.pentaho.com/schema/pentaho-system http://www.pentaho.com/schema/pentaho-system.xsd"
             default-lazy-init="true">
      
          <!-- ======================== FILTER CHAIN ======================= -->
          <!-- if you wish to use channel security, add "channelProcessingFilter," in front of "httpSessionContextIntegrationFilter" in the list below -->
          <bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
              <constructor-arg>
                  <util:list>
                      <sec:filter-chain pattern="/webservices/**" filters="securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,cubaAuthenticationFilter,basicProcessingFilter,anonymousProcessingFilter,sessionMgmtFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS" />
                      <sec:filter-chain pattern="/api/repos/**" filters="securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,cubaAuthenticationFilter,basicProcessingFilter,requestParameterProcessingFilter,anonymousProcessingFilter,sessionMgmtFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS,preFlightFilter" />
                      <sec:filter-chain pattern="/api/**" filters="securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,cubaAuthenticationFilter,basicProcessingFilter,requestParameterProcessingFilter,anonymousProcessingFilter,sessionMgmtFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS" />
                      <sec:filter-chain pattern="/plugin/reporting/api/jobs/**" filters="securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,basicProcessingFilter,requestParameterProcessingFilter,anonymousProcessingFilter,sessionMgmtFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS,preFlightFilter" />
                      <sec:filter-chain pattern="/plugin/**" filters="securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,basicProcessingFilter,requestParameterProcessingFilter,anonymousProcessingFilter,sessionMgmtFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS" />
                      <sec:filter-chain pattern="/**" filters="securityContextHolderAwareRequestFilter,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,httpSessionReuseDetectionFilter,logoutFilter,authenticationProcessingFilter,cubaAuthenticationFilter,basicProcessingFilter,requestParameterProcessingFilter,anonymousProcessingFilter,sessionMgmtFilter,exceptionTranslationFilter,filterInvocationInterceptor" />
                  </util:list>
              </constructor-arg>
          </bean>
      
          <bean id="cubaAuthenticationProvider" class="com.haulmont.addon.bi.pentaho.CubaAuthenticationProvider"/>
      
          <!-- ======================== AUTHENTICATION ======================= -->
          <bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager">
              <constructor-arg>
                  <util:list>
                      <ref bean="cubaAuthenticationProvider"/>
                      <pen:bean class="org.springframework.security.authentication.AuthenticationProvider"/>
                      <ref bean="anonymousAuthenticationProvider" />
                  </util:list>
              </constructor-arg>
              <property name="eraseCredentialsAfterAuthentication" value="false" />
              <property name="authenticationEventPublisher">
                  <ref bean="defaultAuthenticationEventPublisher" />
              </property>
          </bean>
      
          <bean id="cubaAuthenticationFilter" class="com.haulmont.addon.bi.pentaho.CubaPentahoAuthenticationFilter">
              <property name="userRoleDao">
                  <ref bean="userRoleDaoTxn" />
              </property>
              <property name="authenticationManager">
                  <ref bean="authenticationManager" />
              </property>
              <property name="extraRoles" ref="extraRoles" />
              <property name="cubaConnectionUrl" value="http://localhost:8080/app"/>
          </bean>
      </beans>
      Tip

      cubaAuthenticationFilter bean 中的 cubaConnectionUrl 属性设置 CUBA 应用程序的 URL:

      <property name="cubaConnectionUrl" value="http://localhost:8080/app"/>
    • pentaho-solutions/system 目录下编辑 pentaho-spring-beans.xml 文件在 <import resource="applicationContext-spring-security.xml" /> 后添加一行 <import resource="cuba-pentaho-community-authentication.xml" />

      <import resource="applicationContext-spring-security.xml" />
      <import resource="cuba-pentaho-community-authentication.xml" />
  10. 启动 Pentaho 服务:

    • 切换到 $PENTAHO_HOME/pentaho-server 目录。

    • 运行 start-pentaho.bat