Pentaho JNDI 源名称作为参数(Multi-Tennant)

Pentaho JNDI source name as parameter (Multi-Tennant)

我用谷歌搜索了半个小时,找到了 pentaho 参数等的匹配项,但似乎没有任何内容可以问或回答这个问题。

我有一组对每个客户都相同的报告,但需要连接到不同的数据库,具体取决于运行报告的客户。

所以我的想法是在运行时将 JNDI 数据源名称作为参数传递给报表,以便客户连接到正确的数据库。

这可能吗,或者是否有更好的方法来管理不同客户运行在不同数据库但在 pentaho 引擎的同一个实例中使用的一组通用报告?

好的,我找到了一个更好的解决方案,使用了很少记录的多租户功能。

1) 停止 Pentaho

2) 修改 ( pentaho-solutions/system/pentahoObjects.spring.xml )

<!-- Original Code
 <bean id="IDBDatasourceService" class="org.pentaho.platform.engine.services.connection.datasource.dbcp.DynamicallyPooledOrJndiDatasourceService" scope="singleton">
   <property name="pooledDatasourceService" ref="pooledOrJndiDatasourceService" />
   <property name="nonPooledDatasourceService" ref="nonPooledOrJndiDatasourceService" />
 </bean>
 -->

 <!--Begin Tenant -->
   <bean id="IDBDatasourceService" class="org.pentaho.platform.engine.services.connection.datasource.dbcp.tenantaware.TenantAwareLoginParsingDatasourceService"
   scope="singleton">
     <property name="requireTenantId" value="false" />
     <property name="datasourceNameFormat" value="{1}-{0}" />
     <property name="tenantSeparator" value="@" />
     <property name="tenantOnLeft" value="false" />
   </bean>
 <!-- End Tenant -->

3) 为数据源添加后缀 ( biserver-ce/tomcat/webapps/pentaho/META-INF/context.xml )

<Resource
  name="jdbc/MYDBSRC-xxx"
  auth="Container"
  type="javax.sql.DataSource"
  factory="org.apache.commons.dbcp.BasicDataSourceFactory"
  maxActive="20"
  maxIdle="5"
  maxWait="10000"
  username="XXXX"
  password="XXXX"
  driverClassName="net.sourceforge.jtds.jdbc.Driver"
  url="jdbc:jtds:sqlserver://192.168.42.0:1433;DatabaseName=SOMEDB"
/>

<Resource
  name="jdbc/MYDBSRC-aaa"
  auth="Container"
  type="javax.sql.DataSource"
  factory="org.apache.commons.dbcp.BasicDataSourceFactory"
  maxActive="20"
  maxIdle="5"
  maxWait="10000"
  username="XXXX"
  password="XXXX"
  driverClassName="net.sourceforge.jtds.jdbc.Driver"
  url="jdbc:jtds:sqlserver://192.168.42.0:1433;DatabaseName=AOTHERDB"
/>

4) 删除/tomcat/conf/Catalina/localhost/pentaho.xml

5) 重启Pentaho,创建用户someone@xxx etc etc

6) 使用 JNDI 名称创建报告 "MYDBSRC"

7) 以 someone@xxx 身份登录,与以 user 或 user@aaa

登录相比,您将获得不同的报告/数据源

塔达!!