2011-09-14 8 views
0

私のWebアプリケーションでpentahoレポートを3.6.1から3.8.0にアップグレードしています。必要なすべてのjarファイルを更新したとき、私はConnectionProviderを実装している私のクラスのコンパイルエラーが1つありました。私のクラスは次のとおりです。Pentaho reporting 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"、 "query in parameter"の合計は、キャッシュから結果セットを保存し、後でルックアップするために使用できる一意の識別子を形成するようになりました。

+0

大丈夫です。私の場合、私は1つのDataSourceしか定義されておらず、アプリケーションとpentahoレポーティングモジュールは必要に応じてそこから接続します。私はpentahoレポーティングモジュールのために、 "DataSourceConnectionProvider"という名前のConnectionProviderの独自の実装を定義しました。私はSpringの設定を通してこのクラスにデータソースオブジェクトを注入しています。 getConnection()メソッドはこのDataSourceから新しい接続を返します。また、データベースごとに1つのスキーマしかありません。 ArrayListにデータソースオブジェクトを格納し、getConnectionHash()メソッドから返すだけですか? – parimal

+0

あなたが春に注射したものをリストに返します。 arraylistで返すオブジェクトは "equals"と "hashcode"メソッドを正しく実装する必要があります。そうしないと、キャッシュにエラーが表示されます。 –

+0

このメソッドとその実装の詳細については、ありがとうございます。 btw、どこで別のペンタオリリース用のjavadocを入手できますか?実際には、このインタフェースのjavaDocで説明した詳細を見つけることができませんでした。 – parimal

関連する問題