思うように書けない。

最近は久々に技術ブログっぽくなってきました。先進かつ有用なネタは全くないのだけど。
(釣り目的でこのサイトに訪れている方には申し訳ないのだが。)

前の記事に書いた通り、そのサイトはGoogle App Engineで動かしているので、処理には少し気を使います。
とはいえ、弱小サイトなので無料運用は余裕ですが...。
ただ、本人的にはもう少し利用者を増やすぞという気持ちもあるので、利用者が増えても大丈夫にしたいと思っています。

Google App EngineではDatastoreへのアクセス回数を減らしてMemcacheにデータを乗せるというのがセオリーです。
Datastoreへのアクセス回数は可能な限り少なくできれば、無料運用しやすいので。

Slim3 ModelのModelRefでレイジーロードするときにDatastoreにアクセスするので、そこを改造していました。
ModelRefを継承したCachedModelRefを作成し、refreshメソッドの処理を書き換えて...と。

作成したクラスは以下みたいな感じで書きましたが、呼び出し元での書き方がわからず...。
package xxx.base.datastore;
import org.slim3.datastore.ModelRef;
/**
* CachedModelRef
*/
public class CachedModelRef<M> extends ModelRef<M> {
  private Class<CachedDaoBase<M>> daoClass;
  @Override
  public M refresh() {
    try {
      return daoClass.newInstance().get(key);
    } catch (InstantiationException | IllegalAccessException e) {
      throw new RuntimeException(e);
    }
  }
  public CachedModelRef(Class<M> modelClass, Class<CachedDaoBase<M>> daoClass) throws NullPointerException {
    super(modelClass);
    this.daoClass = daoClass;
  }
}

結局、コンストラクタのClass<CachedDaoBase<M>>をClass<?>にしちゃいました。