我在过去的半小时里用谷歌搜索了这个,并发现了pentaho参数的点击等,但似乎没有任何问题或回答这个问题。
我有一组对每个客户都相同的报告,但需要根据运行报告的客户连接到不同的数据库。
所以我的想法是在运行时将JNDI数据源名称作为参数传递给报表,以便客户连接到正确的数据库。
这是可能的,还是有更好的方法来管理在不同数据库上运行但在同一个pentaho引擎实例中的不同客户使用的一组通用报告?
答案 0 :(得分:1)
好的,我已经找到了一个更好的解决方案,使用了很少记录的多租户功能。
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,创建用户@ xxx等等
6)使用JNDI名称“MYDBSRC”
创建报告7)以@ xxx登录,您将获得与以用户登录或用户@aaa
不同的报告/数据源Tadah !!