Java Web Startで挫折の巻

前回のエントリからJWSの技術検証をしています。以下の事をやりたいのです。

  • JavaのCIやBTSのようなサーバサイドアプリをミドルウェア込みでインストールできるようにしたい。
  • 配布元のjnlpのURLを叩けば、あとは対話的に質問に答えるだけでインストールはよろしくやってくれる。
  • サーバ用アプリメインなので、「GUIベース」よりむしろ「CUIベース」でやりたい。使う方にとってはGUIが有難いかもしれないが、その層をターゲットにしているわけではない。また、CUIの方が実装コストは当然低い。実現できれば、Xwindowが死んでいようが、モニタがなかろうが、SSHやtelnetを使いリモートでのインストールできる。イメージとしてはyumやapt-getのJava版といったところ。

さて、検証。
まずはSystem.out.println()でコンソールに出力するようなアプリを作り、Jarに固めて署名します。JNLPを記述して、ターミナルから実行するとJWSのスプラッシュは表示されますが何も起こっていないように見えます。これはJavaコントロールパネルで、Javaコンソールの表示がOFFになっているからです。ONにすれば、別ウィンドウでJavaコンソールというやつが表示されます。アプリとしては実行されていることがわかります。

しかし、これでは要件は満たせない。だいたい、コマンドラインからGUIが起動しちゃう時点でアウトです。GUIを扱わないアプリでもJavaコンソールで実行されます。
ただ、これくらいでは諦めません。なんとかJavaコンソールの入出力を「なんやかんや」してターミナルにリダイレクトすることを考え始めます。それが実現できれば、JWSでCUIベースの対話型アプリの作成は可能であることを意味します。
で、試行錯誤を繰り返していたのですが、衝撃的な文献に出くわしてしまいました・・・。

http://www.sun.com/bigadmin/hubs/multilingual/japanese/content/jws-glassfish4.jsp

System.in から入力を読み取るアプリケーションクライアントは、現在 Java Web Start テクノロジと連動していません。Java Web Start ソフトウェアは、キーボードから Java Web Start アプリケーションへの入力ストリームを提供しておらず、アプリケーションが System.in を使用しようとすると例外が発生し失敗します。

何ぃ!?
つまり、「なんやかんや」してリダイレクトできたとしても、CUIベースの対話的インストーラーの作成が不可能!
さすがに参りました。CUIベースはあきらめるしかないんでしょうか。GUIベースになると、リモートでインストールするにはリモートデスクトップしないといけないですねぇ(全然イケてない)。自分でJWSっぽい機構を作ることは可能でしょうが、JWSの恩恵が受けられないのはどうかと・・・。

JWSってターゲットはやっぱりGUIアプリなのね・・・(何となくそんな気はしてた)。