うむむ・・・となってしまう話。Plutoがリリースしようとしている雰囲気があったので、直してもらうべく、パッチを付けて、更新。そしたら、Will Not Fix で閉じられた・・・。JSR 168 の PDF の方をチェックしていたのだけど、JavaDoc で言われていることと話が違う。PDFの方は、IllegalArgumentExceptionを返すようなことは書いていないのだが、JavaDocは返すと言っている。しかし、これを返されると、JSFで困ると思うのだが・・・。というわけで、Will Not Fix で閉じられたけど、JavaDocが正しくない気もするのでねばる。はぁ・・・、JSR の基本的な仕様が曖昧だと困るんだよね・・・。はて、どうなるのか・・・。
カテゴリー: Java
ポートレットフィルタ
JSR 168 の仕様には、定義されていないので、Portals Bridges 内に作ったのだが、宣伝していないだけあった、ほとんど使われていないような・・・。ということもあり、jetspeed-userに出ていたメールに返信する。そろそろまじめに宣伝しないとな・・・。というわけで、ポートレットでフィルタを利用したい場合は、ご利用くださいませ。どっかに簡単な記事とか書くようにした方がいいのかな・・・。
commons-mathによる乱数生成
commons-mathのドキュメントを読むと、secureの方を使うと *much slower* と言っている。muchって・・・。というわけで、簡単なプログラムを作って、比較することにした。というわけで、以下のものを作る。
package com.marevol.test.random;
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.math.random.RandomData;
import org.apache.commons.math.random.RandomDataImpl;
public class App
{
public static int MAX_ROOP_COUNT = 1000;
public static void main(String[] args)
{
Date startTime;
Date endTime;
System.out.println("Start randomData()");
startTime = Calendar.getInstance().getTime();
App.randomData();
endTime = Calendar.getInstance().getTime();
System.out.println("End randomData() ---> Time: "
+ (endTime.getTime() - startTime.getTime()));
System.out.println("Start secureRandomData()");
startTime = Calendar.getInstance().getTime();
App.secureRandomData();
endTime = Calendar.getInstance().getTime();
System.out.println("End secureRandomData() ---> Time: "
+ (endTime.getTime() - startTime.getTime()));
}
public static void randomData()
{
long value = 0;
RandomData randomData = new RandomDataImpl();
for (int i = 0; i < MAX_ROOP_COUNT; i++)
{
value = randomData.nextLong(1, 1000000);
}
System.out.println("value=" + value);
}
public static void secureRandomData()
{
long value = 0;
RandomData randomData = new RandomDataImpl();
for (int i = 0; i < MAX_ROOP_COUNT; i++)
{
value = randomData.nextSecureLong(1, 1000000);
}
System.out.println("value=" + value);
}
}
結果は、だいたい以下のような感じ。
Start randomData() value=212505 End randomData() ---> Time: 12 Start secureRandomData() value=61893 End secureRandomData() ---> Time: 882
つまり、だいたい80倍くらい違うのかね。なるほどね、Secure の方は、1000回ほど呼ばれると、1秒くらいかかってしまうのか。
っで、やりたいことは、文字列の乱数取得なので、nextHexStringでも実験。すると、100文字の乱数文字を得たとしても、3倍程度の差しかないな。たとえば、randomHexString() が 103 ms くらいで、secureRandomHexString() が 291 ms くらいだな。longのときと違って、Secure出はない方に時間がかかっている。この程度の差なら、Secureの方でもいいような気が。