もちろんはい
私は病気その後、小さなアーキテクチャを描きますが、Uにそれを説明すること:すべての
まず、あなたはマッパーhereとTDGS hereについて学ぶことができます。 マッパーにはというcacheAll()というメソッドがあり、これはTDGのメソッドを呼び出してデリゲートします。cacheAll()これはdbのテーブルからすべての行を取得するという使命を持っています。キャッシュオブジェクト)。
ので、基本的には、第1あなたがそのに全体のサーブレットコンテキストのリスナーを意味「のServletContextListener」 を実装するリスナーを作成する必要があり、そのの内側にあなたがmp.fill(Mapper.cacheAllを(呼び出す必要がありをcontextInitialized ))、それは同じようsthgされるように(これは一般的なコードで、もちろん良いことを書いて、それを最適化)
public class myServletContextListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
mp.fill(Mapper.cacheAll());
}
//
}
web.xmlにリスナーを追加することを忘れないでください:
<listener>
<listener-class>myServletContextListener </listener-class>
</listener>
これは、サーバーの起動時に、キャッシュオブジェクト内のすべてのレコードをハッシュマップmpにキャッシュします。
データベースの変更に基づいてキャッシュを更新する場合は、observer patternを使用する必要があります。
UPDATE
私はキャッシュオブジェクトについて、言及するのを忘れて、私はあなたがすべてのユーザーまたはあなたのアプリ用にアクセスしたいと仮定し、あなたがそのようなシングルトン(シングルトンパターン)、コードとしてそれをコーディングする必要があります:
public class cacheObject
{
private static Map cMap;
private static cacheObject cObject;
private cacheObject()
{
cMap = Mapper.cacheAll();
}
public static synchronized cacheObject getInstance()
{
if (cObject == null){
cObject = new cacheObject();
}
return cObject;
}
}
また、あなたがキャッシュするデータがは、ユーザーによってを変更し、それTHREADLOCALシングルトン作ることができます。
あなたは永続性のためにライブラリを使用していますか?それらの大部分はすでにさまざまな形のキャッシュをサポートしており、ホイールを再構築する必要はありません。 – Affe
いいえ。データベースへの直接SQL呼び出し – Cratylus
キャッシュを複数のプロセスに配布する必要がありますか?書き込み操作は、他のキャッシュ・インスタンスを更新する必要がありますか(または更新させるか)、書き込みを行っているプロセスにのみ関連していますか? – philwb