2009-07-06 5 views
2

ではなく、「参照データ」を扱うための通常のパターンで何How To Cache Information In A Threadsafe Manner参考データパターンを正確に、このスレッドと同様に

- 通常、データベースまたはプロパティファイルで外部頻繁にアプリケーションによって読み取られたデータ、非常にまれに更新されました(日、週、月)?データに更新されると、外部で更新されます。

が、これは通常、私はDAOに注入でき、したがって、独自のコンテンツを管理することができるだろうシングルトンだろうか?このサービスでリフレッシュ(refresh)(つまり、MBeanを介して強制的にリフレッシュ()メソッドを公開するというアイデアが気に入っていますので、アプリケーションをバウンスする必要はありません)。

他からSO人々がそのレベルで透過的にDAOの必要に応じてキャッシュをインスタンス化可能性があるように聞こえる、スレッド。

私は一種のシングルトンサービスのアイデアのようにデータベースからデータをロードし、実際のDAO、または他のハードコードされた応答を返すモック/テストダブルのいずれかを注入されています。しかし、もし私がjava enumの経由でシングルトンとしてサービスを実装しようとすると、これはSpring経由で少し問題があります。

だから、他の人がどのように参照データを扱うのですか?問合せ時には問合せを行いますが、キャッシュの下にはキャッシュがありますか?または、別のメモリ内サービスですか?

答えて

2

私は通常、Springを使用して私のサービスレイヤーにDAO実装を挿入します。言い換えれば、私のSQLベースの実装に加えてテスト実装(XMLDaoFlatFileDao)があります。小さなデータセットの場合、私は通常自分自身のキャッシュを作成し、すべてのデータをメモリの基礎となるテーブルからロードします。すべてのことを言って

は、私が適度に小さいデータセットでの作業の利点を持っています。私がより大きなデータセットを扱っていた場合、おそらく複数のJVM(例えばTerracottaなど)に分散された既製のキャッシュソリューションを検討することができます。

前のスレッドで触れたように、refresh()メソッドも公開しています。データの更新をタイムリーに伝播する必要がない場合は、単にMBean経由でこれを手動で呼び出すだけです。私がこれを自動化したい場合、私はTibrvを使ってデータベースからの更新を聞き取り、キャッシュされたデータをリフレッシュします(MS-SQLトリガーを使ってTibrvメッセージを生成します)。

私はかなりのサービスを実装するためのJavaの列挙型を使用するあなたの参照を理解していない - どのようにこの作品は、でしょうか?

+0

私はその部分で水を混乱させたかもしれません。主に、私はシングルトンに依存関係を注入することを考えています。今私はそれについて考えている、これは別の質問かもしれない。 とにかく、ブロッホによれば、Javaでシングルトンを実装するための現在のベストプラクティスは、単一の部材(インスタンス)を有する列挙型である:すなわちパブリック列挙エルビス{ INSTANCE。 } – ayang

+0

もしあなたがこのルートを下っていたら、MethodInvokingFactoryBeanを使ってSpring経由で依存関係を注入して、enumクラスの関連するセッターを呼び出すことはできませんでしたか? – Adamski

+0

はい、それは私がやっている可能性が高いです - しかし、私は私が最初の原則に戻って私がこれを間違ってやっているかどうかを知っていると思ったのは十分控えめでした。 – ayang

関連する問題