SAStruts の Maven Archetype 1.0.4-sp9.1 をリリース

SAStruts のサイトにて、Maven Archetype を公開しているのですが、DBFlute がリリースされたので、それに合わせて更新しました。かなり久しぶりのリリースになります。まぁ、Seasar2 自体がたまにしかリリースされないので、更新する理由がないので仕方がありませんが。というわけで、Maven な方は DBFlute Maven Plugin と合わせて、ご利用していただけると嬉しいです。

DBFlute Maven Plugin 1.0.0 をリリースしました

今まで、maven-dbflute-plugin という名前だったものを 1.0.0 に合わせて、Maven の命名ルールに従って、dbflute-maven-plugin に変更しました。機能的には manage タスクが使えるようになったことかと思います。サイトもここになりますが、SAStruts Archetypeを使って CRUD サイトの作り方をまとめてあります(これを執筆時にはサイトがまだ反映されていないので、そのページがなければしばらくしてから見ていただければ良いかと)。Fess はその CRUD 機能を使って管理ページを生成して、それを元に画面を作ることで手間を省いたりしてます。個人的には、このCRUD機能はもっと拡張したいな、とは思っているものの手が回っていない感じです。そんな感じで、そこを拡張していただける方がいると嬉しいな、と思う今日このごろです。

MySQLでOOMが発生する

S2RobotでMySQLを使って大量の件数の処理をするときにDBFluteでselectCursorを使っていたのだけど、Java heap spaceで怒られた…。コード的には以下のような感じ。

public void iterate(final String sessionId,
final AccessResultCallback accessResultCallback) {
final AccessResultCB cb = new AccessResultCB();
cb.setupSelect_AccessResultDataAsOne();
cb.query().setSessionId_Equal(sessionId);
cb.query().addOrderBy_CreateTime_Asc();
accessResultBhv
.selectCursor(
cb,
new EntityRowHandler() {
@Override
public void handle(
final org.seasar.robot.db.exentity.AccessResult entity) {
accessResultCallback.iterate(entity);
}
});
}

MySQLはデフォルトでResultSetに全件を読み出すみたい。というわけで、回避するためには

cb.configure(new StatementConfig().fetchSize(Integer.MIN_VALUE));

を条件に追加設定すれば良い。

S2Utilでハッシュ値を得る

可逆な暗号化をする場合はCipherPoolUtilを使えば良いですが、一方向ハッシュ化して可逆じゃない文字列を得たい場合はMessageDigestUtilを利用します。用途的にはパスワードをハッシュ化して保存したりするのに使ったりとかでしょうか。

使いかたは簡単です。digestメソッドを呼ぶだけです。以下のような感じです。

String text = "パスワード";
String value = MessageDigestUtil.digest("MD5", text);

第一引数にアルゴリズムを指定して、第二引数にハッシュ化したい文字列を記述します。戻り値は文字列をハッシュ化された文字列です。アルゴリズムには SHA-256 など使えます。詳しくはjava.security.MessageDigestのjavadocで使えるアルゴリズムを確認してください。