矢崎です。
栗原さんと、平鍋さんのやりとりに、ちょこっと
割り込みします。
Kenji Hiranabeさん wrote:
>
> > FileLockクラスの内部状態に依存しないかたちで実装したのですが、
> > ロックファイルの作成にしたときの状態によって分岐させるようにしまし
> > ょうか?
> > # 例外発生時に、lockFileフィールド値をnullにする?とか。
>
> これもいいですね.しかし,そこまですべきか,という気もします.
>
お2人のスレッドについて、誤解していたら、ごめんなさい
なのですが、ファイルを生成できたFileLockしか、そのファ
イルを削除できないようなFileLockのサブクラス、
DeleteSafeFileLockなるものを考えてみました。
#実はテストは、まだ書いていません。だから、正確に動く
かはわからないのですが、、、、、(うう、テスト・ファースト
ではない、つまり、これはXPではない。。。^^;;)
例外発生時に、lockFileフィールド値をnullする、という方法
ではなく、createというbooleanを使ったのは、lockFileフィールド
は、newした時点で値がはいるので、
FileLock fileLock = new FileLock("lock");
fileLock.release();
って、書いちゃうと、自分が作ったファイル以外でも削除可能に
なっちゃうと思ったからです。
いいかげんな部分として、削除できなかったときになんらかの
例外を返すほうがいいかもしれませんが、今はreturnするだけ
にしています。
これが多少でも役にたちそうであれば、テストを書いて、
CVSにのっけますが、どうでしょう?
/*
* $Id$
*/
package XP.jp.co.esm.wiki.extremedomo.util;
import java.io.*;
public class DeleteSafeFileLock extends FileLock{
public DeleteSafeFileLock(String nameOfLockFile){
super(nameOfLockFile);
}
public void attempt()
throws FileLockException {
attempt(0);
}
public void attempt(long milliSec)
throws FileLockException{
super.attempt(milliSec);
create = true;
}
public void release() {
if (! isCreate()) return;
super.release();
}
public final boolean isCreate(){
return create;
}
private boolean create = false;
}
--
矢崎 博英 <firo@....jp>