2011-09-14 85 views
0

我正在將我的pentaho報告從3.6.1升級到3.8.0在我的Web應用程序中。當我更新了所有必需的jar文件時,在我的一個類中實現了一個編譯錯誤,它實現了ConnectionProvider。以下是我的課程。Pentaho報告connectionFactory添加了新方法但沒有說明

public class DataSourceConnectionProvider implements ConnectionProvider 
{ 

.... 

} 

錯誤是說,我的類應該實現,因爲它是在ConnectionProvider接口中定義的方法getConnectionHash()。但它在3.6.1版本中不存在。所以我有點困惑,爲什麼他們已經添加了它,以及如何在我的課堂上實現它。

+0

我剛纔注意到ConnectionProvider接口中的這​​個新方法在3.7.0發佈之前並不存在。 – parimal

回答

0

此方法返回一個可比較且可散列的對象,用於緩存數據源期間。它允許我們構建某種關鍵字來檢測連接定義中的更改,同時許多報表在同一個JVM中運行。

緩存實現本身並不知道各種數據源的任何細節,「ConnectionHash」允許我們保持結果集獨立。

我的基本實現只是返回一個ArrayList,其中添加了所有相關的連接屬性。

簡單的例子,如何以及在需要的地方:

假設你有一個連接到幾個模式具有相同的表結構存在的數據庫,例如在多租戶環境中,每個租戶有一個JDBC數據源他自己的模式。

通過查詢「SELECT * FROM CUSTOMERS WHERE COUNTRY = $ {country-parameter}」,數據源將根據租戶執行查詢返回不同的數據集。 「connection-hash」,「query-name」和「查詢中使用的參數」之和現在形成一個唯一的標識符,我們可以使用它來存儲並稍後從緩存中查找結果集。

+0

好吧有道理。所以在我的情況下,我只定義了一個DataSource,並且應用程序以及pentaho報告模塊在需要時從它獲取連接。對於pentaho報告模塊,我定義了自己的ConnectionProvider實現,名爲「DataSourceConnectionProvider」。我通過Spring配置向這個類注入數據源對象。所以getConnection()方法將從這個DataSource返回新的連接。我每個數據庫也只有一個模式。所以我應該只將數據源對象存儲在ArrayList中並從getConnectionHash()方法返回它? – parimal

+0

在列表中返回通過彈簧注入的任何內容。您在arraylist中返回的對象必須正確實現「equals」和「hashcode」方法,否則您將在緩存中看到錯誤。 –

+0

感謝您提供有關此方法及其實施的詳細信息。順便說一句,我在哪裏得到不同pentaho版本的javadoc?實際上我找不到在javaDoc中爲這個接口解釋的細節。 – parimal