[Seasar-user:15447] S2JDBCのjdbcManagerでSQLを実行する直前でSQL文を取得できないか(SQL文をクエリキャッシュのID値にしたいから)

渡辺 祐 [E-MAIL ADDRESS DELETED]
2008年 8月 21日 (木) 15:21:42 JST


渡辺と申します。

よくあるWebアプリをSeasar2+SAStruts+s2jdbcで作っています。

アクセスがピーク時にDB検索が走りすぎてDBサーバが過負荷にならないように
汎用的なキャッシュ機構を作りこみたいと思ってます。
キャッシュサーバはmemcachedを使おうかなと。

----- 仮想のソース -----
String cacheid = "なんか一意なID値";
Employee result = null;
HogeHogeCacheManager cacheManager = new CacheManagerFactory().getInstance();

result = cacheManager.getcache();
if (null == result) {
    result = jdbcManager.from(Employee.class)
                        .where("foo = ? and bar = ?", fooval, barval)
                        .getSingleResult();
}
----- 仮想のソース -----

上記の例で言えば、

String cacheid = fooval + barval;

にでもしてしまえば用が足りるといえば足りるのですが、
よりシンプルで汎用的なDBクエリーキャッシュ機構としたいです。

そこで、できれば、SQLを実行してしまう前にそのSQL文そのものを
取得できればそれをキャッシュidにできるので一番いいなと考えてます。

s2jdbcでは発行されたSQL文そのものをログに吐くことができるので、
それの応用でどうにかしたいのですが、なにか良い知恵はないでしょうか?

jdbcManagerの実装上難しいのかなあ、、、?




Seasar-user メーリングリストの案内