【问题标题】:Pentaho reporting connectionFactory has new method added but no descriptionPentaho 报告 connectionFactory 添加了新方法但没有描述
【发布时间】:2011-09-14 09:31:33
【问题描述】:

我正在将我的 web 应用程序中的 pentaho 报告从 3.6.1 升级到 3.8.0。当我更新所有必要的 jar 文件时,在我的一个实现 ConnectionProvider 的类中出现了一个编译错误。以下是我的课。

public class DataSourceConnectionProvider implements ConnectionProvider
{

....

}

错误是说我的类应该实现getConnectionHash() 方法,因为它在ConnectionProvider 接口中定义。但在 3.6.1 版本中没有。所以我有点困惑他们为什么添加它以及如何在我的课堂上实现它。

【问题讨论】:

  • 我刚刚注意到 ConnectionProvider 接口中的这​​个新方法直到 3.7.0 版本才出现。

标签: reporting pentaho


【解决方案1】:

此方法返回一个可比较且可散列的对象,并在数据源缓存期间使用。它允许我们构建某种键来检测连接定义中的变化,同时许多报告在同一个 JVM 中运行。

缓存实现本身不知道各种数据源的任何细节,“ConnectionHash”允许我们将结果集分开。

我的基本实现只是返回一个 ArrayList,其中添加了所有相关的连接属性。

如何以及在哪里需要的简单示例:

假设您有一个连接到数据库的 JDBC 数据源,其中存在多个具有相同表结构的模式,例如在每个租户都有自己的模式的多租户环境中。

使用“SELECT * FROM CUSTOMERS WHERE COUNTRY = ${country-parameter}”之类的查询,数据源将根据执行查询的租户返回不同的数据集。 “连接哈希”、“查询名称”和“查询中使用的参数”的总和现在形成了一个唯一标识符,我们可以使用它来存储和稍后从缓存中查找结果集。

【讨论】:

  • 好吧有道理。所以在我的例子中,我只定义了一个 DataSource 并且应用程序以及 pentaho 报告模块在需要时从它获取连接。对于 pentaho 报告模块,我定义了自己的 ConnectionProvider 实现,名为“DataSourceConnectionProvider”。我正在通过 Spring 配置将数据源对象注入此类。所以 getConnection() 方法将从这个 DataSource 返回新的连接。我每个数据库也只有一个模式。那么我应该只将数据源对象存储在 ArrayList 中并从 getConnectionHash() 方法返回它吗?
  • 在列表中返回您通过 spring 注入的任何内容。您在 arraylist 中返回的对象必须正确实现“equals”和“hashcode”方法,否则您将在缓存中看到错误。
  • 感谢您提供有关此方法及其实现的详细信息。顺便说一句,我在哪里可以获得不同 pentaho 版本的 javadoc?实际上我找不到你在 javaDoc 中为这个接口解释的细节。
猜你喜欢
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
相关资源
最近更新 更多