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));
を条件に追加設定すれば良い。
カテゴリー: Java
UbuntuにJava7をインストール
Ubuntu 12.04でJavaを入れておく場合は
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
としておけば、Oracle Java 7がインストールできる。
CentOS6でのJava7のインストール時のエラー
CentOS 6でJava 7をインストールすると
# rpm -ivh /tmp/jdk-7u7-linux-x64.rpm
準備中... ########################################### [100%]
1:jdk ########################################### [100%]
Unpacking JAR files...
rt.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_07/jre/lib/rt.pack
jsse.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_07/jre/lib/jsse.pack
charsets.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_07/jre/lib/charsets.pack
tools.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_07/lib/tools.pack
localedata.jar...
Error: Could not open input file: /usr/java/jdk1.7.0_07/jre/lib/ext/localedata.pack
というようなエラーが出る。実際にはrt.jarなど存在すれば無視して良いみたい。というわけで、無視しておく。