バッチファイルからの出力が多い場合止まる
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));
}
}