MultiECLockManagerを適当に使ってみた。

 どうせ私がひとりでチマチマ更新するモノですからと、当ページ管理部分ではRDBMSへほとんど直保存状態です。が、戯れにNested EOEditingContextでも導入して、データを溜め込み一括保存に変更してしまおうかと。でもって、例の本Practical WebObjectsでも推奨されているJonathan Rochkindさん謹製のMultiECLockManagerのお世話になろうかなと。

 何かと面倒がなさそうだから親EditingContextはdefaultEditingContext()を使う事にする。子EditingContextはとりあえずセッション発動時に一つ作ってそれを使う。コンポーネント単位だと手に負えなさそうなので、lock()とunlock()はセッション単位で。
 という前提条件を踏まえた上のSession.javaファイルの内容が以下にダラダラと。

public MultiECLockManager lockManager;
public EOEditingContext childEC;

public Session() {
    super();

    /* ** Put your per-session initialization code here ** */
    lockManager = new MultiECLockManager();
    childEC = new EOEditingContext(this.defaultEditingContext());
    lockManager.registerEditingContext(childEC);
}

public void awake() {
    super.awake();

    lockManager.lock();
}

public void sleep() {
    super.sleep();

    try {
        lockManager.unlock();
    } catch (Exception e) {
    }
}

 sleep()時のunlock()がtryブロックで囲まれているのは、terminate()を実行した際に例外がスローされるのをインチキするため。

 実は“最初の方のコメントをいい加減に読んでやってみたら動いた”レベルの結果なので「コレでいいんじゃろか?」な気分でいっぱいなのだけど、とりあえず機能している模様。あ、でも、全然“マルチ”じゃないねぇ。