1.6.0_14でデバッグの挙動がおかしい

メモ。Eclipse のところ (279137) でいろいろと書いてあるけど、Sun Java 1.6.0_14 で 6862295 という、開発者には困った問題がある。ブレークポイントをしかけて、デバッグで止まらないとすごい困ると思うのだけど…(-XX:+UseParallelGC をすればいいみたいだけど、P1 バグくらいな感じがするのだけど…)。

バッチファイルからの出力が多い場合止まる

https://www.seasar.org/issues/browse/DBFLUTE-536 で対応したのだけど、ProcessBuilder にがんがん改行&フラッシュとか返しちゃよくないみたい。今まで、実行しているバッチ(jdbc.batとか)から返ってくる各行で \n を返していたのだけど、行数が多いと flush ができない感じだった。というわけで、各行で送るのはやめて、ユーザーが入力したものをそのままバッチに渡るように変更してみた。これで問題自体は直ったけど、replace-schema でバッチに y をうまく送ることができず(シェルのreadから-pの文字列がこない…bash のソースも見たのだけど、strerrに渡してくれているから取れる気がするのだけど取れん。これ以上調べるのは重すぎるからやめておく…)。そんなわけで、replace-schema は環境変数で処理してくれるみたいだから、それを使ってうまく動くようにしておいた。

リクエストエンコーディングの設定

Mobyletでは、EncodingFilterの代わりにMobyletFilterを使うことになるが、MobyletFilterでも基本的にはエンコーディングの設定は同じで、

<filter>
<filter-name>mobyletfilter</filter-name>
<filter-class>jp.sf.fess.filter.FessMobyletFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>

みたいな感じ。コード的には、MobyletFilter の以下のメソッドで設定されることになる。というわけで、何も指定しなければ、windows-31j だね。

protected void initDefaultCharset(FilterConfig filterConfig) {
String defCharsetName = null;
if (filterConfig != null &&
(defCharsetName =
filterConfig.getInitParameter("encoding")) != null) {
Charset defCharset = Charset.forName(defCharsetName);
if (defCharset != null) {
SingletonUtils.put(defCharset);
}
}
if (SingletonUtils.get(Charset.class) == null) {
SingletonUtils.put(Charset.forName(DefCharset.WIN31J));
}
}