Lock File

Servlet/JSPでロックファイルを作成するにはどうするんだろうと思ってちょっと調べてみた。

テキストファイルへの同時書き込みを防ぐという手もあるようだが、10分以上たったロックファイルを強制的に削除したり、delete()メソッドを使っているあたりがちょっとあやしい。ロックファイルプロトコルの実装にはJava2 SDK のドキュメントではFile.createNewFile()とFile.deleteOnExit()とを組み合わせるというような記述があるので、そうした方がいいだろう。しかし、File.deleteOnExit()はVMが終了するときにしかファイルを削除しないのでServlet/JSPでは使えない。

もうちょっと調べてみたところ、java.nio.channels.FileChannel.lock() を使うのが良さそうだ。しかしこれも「ファイルロックは Java 仮想マシン全体のために保持されます。これらは、同一仮想マシン内の複数スレッドによるファイルへのアクセスを制御するには適していません。」なんて書かれている。もっと言えば、「他の言語で書かれたプログラムが動作するプロセスのためにも保持される」のだろう。ちょっと強力すぎる感じだ。

結局のところ、マルチスレッド対応のSingletonを用意して、そいつにキーとしてファイル名を渡すとロック用オブジェクトを返すようなメソッドを持たせて、synchronizedで排他制御するのが良いのでは、という結論に達した。

カテゴリー: Java

Batik

Batik は何と1.5.1になっていた。OpenOfficeで作成したグラデーションつきの絵をSVGで出力したものをBatikで表示すると90度回転してしまってたのでBatikのせいかと思ったら、最新版でも直っていないようだった。さすがにおかしいと思って、AdobeのSVG Viewer でも確認してみた。結果は、同じだったのでOpenOfficeの出力がいけないらしい。なんてこった。

カテゴリー: Java

sample program

ちょっとしたプログラムを作成したので書いておく。

public class Reverse {
private String s;
private java.util.Stack stack = new java.util.Stack();
public Reverse(String s_) throws Exception {
if (s_.length() < 1 || 1000 < s_.length()) {
throw new Exception(“文字列長が不正です”);
}
s = s_;
}
public String execute() {
char[] cs = s.toCharArray();
for (int i=0 ; i<cs.length ; i++) {
stack.push(new Character(cs[i]));
}
StringBuffer sb = new StringBuffer();
while (!stack.empty()) {
Character c = (Character)stack.pop();
sb.append(c.charValue());
}
return new String(sb);
}
public static void main(String[] args) {
try {
String s = “0123456789”;
Reverse rev = new Reverse(s);
String rs = rev.execute();
System.out.println(“入力文字列:”+s);
System.out.println(“反転文字列:”+rs);
} catch(Exception e) {
System.out.println(“エラーが発生しました”);
}
}
}

 

続きを読む

カテゴリー: Java

Trap

WebアプリケーションをWindowsで開発してもらって、それをFedora Core Linux で動作させるためにインストールをしたのだが、思ったように動作してくれない。URLとして http://hostname/context/controller?cmd=selectみたいなものを入力すると、Windows上ではきちんと動作していたのに、LinuxではgetParameterメソッドでcmd=selectが取得できないのだ。HTMLフォームを使ってPOSTメソッドで送るときちんとパラメータが送られるようだ。この違いはいったい何なのかよくわからないが、結構時間を食ってしまった。

文字コードの問題や文字列の埋め込み問題も発生していて、結構細かいところに多くの罠があって思うとおりに作業が進まなかった。とりあえず、作ってもらったコードはもったいないので授業でリファクタリングしながら紹介でもしていこうかと思う。しかし、なかなかプログラミング技能というのは身に付かないものだ。やっていることが細かいと言えば細かいような気もするが、丁寧にやるべきところで丁寧にやれるかどうかが大きな差だろうなぁとも思った。でも、勢いも大切なので、若いうちは若いらしく力業で強引に行ってもらいたい気もする。まぁ、時間切れにならないように後は資料をしっかりまとめておいてもらえれば、結構満足できるものができあがっていると言えば、そう言えるので、残りの部分をがんばってもらいたいものだ。

そうそう、明日に備えて準備、準備。

カテゴリー: Java

Jakarta Velocity

000987.jpg
Jakarta Velocityをちょっとだけさわってみた。テンプレートエンジンとして結構面白そうな使い方ができるようだ。Velocityに含まれるTexenは、Torqueでも使われているようだ。実行にはApache Antが必要なのであらかじめダウンロードしてインストールしておこう。

Velocityのインストールは簡単で、Apache Jakarta Binary Downloadsからvelocity-1.3.1.tar.gzをダウンロードして、展開する。その後、buildディレクトリでantを実行するとbinディレクトリができあがる。テストを実行して成功すればインストールは終了だ。

> tar xzf velocity-1.3.1.tar.gz
> cd velocity-1.3.1\build
> ant
> ant -f testcases.xml

続きを読む

カテゴリー: Java

JCP

Ref :Opinion:Javaをめぐる領土争い

業界全体としては、標準化をするなら迅速にしてもらいたいだろうけど、企業のエゴが入り込んでくると受け入れたくなくなってしまう。難しいが、標準化団体のプロセスが無効化されないように注視する必要があるだろう。

カテゴリー: Java