ひとまずコミット

現状をひとまずコミットしておく。ドキュメントも書かなきゃなっと言うのもあるけど、デフォルトの動作として、簡単に使えるというところに力を入れたいところ。簡単に使えるというのは、pom.xml に s2robot を書いて、s2robot_jdbc.dicon と DB(H2) を置けば、使えるようなイメージ。まぁ、デフォルトの動きとしては、指定された場所にファイルで書き込みが良いのかな(FileTransformerみたいのを作ろう)。そんな感じで進めてます。

DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE

FindBugs に

private Integer activeThreadCount = 0;
...
synchronized (activeThreadCount) {
activeThreadCount++;
}

みたいに書いていたら、DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE と怒られた。はて、何だろと思ったら、activeThreadCount = 0 が内部的には activeThreadCount = Integer.valueOf(0) になり、Integer.valueOf(0) は -128~127 でキャッシュを利用するから、synchronized の対象が意図しない、共有されるオブジェクトになるためみたい(つまり、新規に作った固有のオブジェクトという感じじゃない)。というわけで、ロックしたかったら、それようのロックオブジェクトを作るべしということみたい。なるほどね。

S2Robot

ここ数日取り組んでいたことなのだけど、方向性が見えたのでSeasarにプロジェクト追加申請をしてみました。S2RobotとはWeb巡回ロボット(クローラー、スパイダー)を構築するためのフレームワーク(ライブラリに近いかも)です。

今まで、ポータル案件で話を進めると、全文検索の話もよくされて、対応に悩んでいたので、そのうち、Solr ベースで何か作ろうと思って、1 年以上経過している気がする。近頃は、Solr まわりにも触れる機会があったり、そんでもって、Apache の Droid を調べてみたりと(これはまだ使える気がしないのだけど)、いろいろと模索しながら経験値を上げていた。そんで、この手のロボットって、たとえば、作ったサイトのリンク切れチェックとか、サイト内のデータ収集とか、画像など特定データファイルの収集とか、いろいろな用途がありえるのだよね。つまり、これらのことが簡単にできれば、結構、いろんな場面で使うことが可能かと(Webでやることって多いし)。というわけで、それらのことができるようなWebロボットのフレームワークを作ってみた(まだ、完成はしてないけど、GWが終わる頃にはできるかと)。

仕組み的には、dicon に S2Robot を書いて実行すれば指定したURLから辿っていく感じ。アクセスしたURLは指定した Transformer インタフェースのインスタンスで処理する。つまり、Transformer を実装したクラスを用意すれば、HTMLだろうが画像だろうがその URL のデータを自由に処理できる感じ。あとは、DB も URL の保存とかに使うから、DBFluteも使っておく。DBFlute の Maven プラグインも使っているけど、pom に情報を書いておけば Maven でダウンロードからソースの生成までできるので楽チンだ。そんな感じのものですので、よろしくお願いします~。