HttpContextはスレッド間で共有しない

HttpClient 4では

HttpResponse response = httpClient.execute(httpget, context);

みたいな感じでHttpContextを渡すかと思うけど、4.2からHttpContextはスレッド間では共有しないようにするのが正しいらしい。なので、contextをどっかで作っておいて、マルチスレッドで上記のコードを呼び出すと共有されてしまうので、

HttpResponse response = httpClient.execute(httpget, new BasicHttpContext(context));

とする必要があるようだ。S2RobotではHcHttpClientで思いっきり共有しているので、修正が必要そうだ…。

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));

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

cpan2rpmのインストール

cpan2rpm は perl の CPAN パッケージを rpm として利用できるもので、RedHat系であれば便利なもの。インストールは

# wget http://ftp.arix.com/cpan2rpm-2.028-1.noarch.rpm
# rpm -Uvh cpan2rpm-2.028-1.noarch.rpm

とすればよい。インストールは

# cpan2rpm --install パッケージ

とすればよい。もし、

エラー: マクロファイル内で "%_gpg_name" を設定しなければなりません。

というように怒られたら、–no-signオプションもつければ良い。アンインストールはperl-〜という名前でインストールされるので、そのrpmパッケージを削除すれば良い。