_ weblogic でイメージを表示する
いまやっているサーブレットの開発で、やっと開発マシンでイメージを表示する一歩まで来た。weblogic.logに以下のような例外が出た
java.lang.NoClassDefFoundError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:58)
at sun.awt.motif.MToolkit.(MToolkit.java:57)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at java.awt.Toolkit$2.run(Toolkit.java:512)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:503)
at java.awt.Toolkit.getEventQueue(Toolkit.java:1150)
at java.awt.EventQueue.isDispatchThread(EventQueue.java:439)
at javax.swing.SwingUtilities.isEventDispatchThread(SwingUtilities.java:1159)
at javax.swing.JComponent.revalidate(JComponent.java:3587)
at javax.swing.JComponent.setVisible(JComponent.java:1842)
at jsp_servlet._mnas._jsp._mall._back._graph._graph_img.getChart(_graph_img.java:60)
at jsp_servlet._mnas._jsp._mall._back._graph._graph_img._jspService(_graph_img.java:325)
これは、開発マシンでXが動いていない(インストールされていない?)ために起こるものらしい。xvfbというものを使えばいいらしい。
RedHatLinux6.2以降ならばXvfbはXと一緒にインストールされているようだ。
Xvfb :2 -screen 0 1600x1200x32
と起動後(:0だとなぜかもうXが上がっているよといっておこられる)、
startWebLogic.shに
export DISPLAY=localhost:2.0
としてみたがやっぱり、同じエラーが出てしまう。
しょうがないのでホストマシンでコンソールログインし、startxしたのちxhost+する。
エラーは出なくなったが、イメージも出てこない。
なんでだろうといろいろ試すこと3時間、
weblogic5.1 sp9 では、imageタグの場合でも、
jspの中の改行文字を削除してイメージを作ってくれないことがわかった。
例えば
<% import="hogehoge"%>
<%
//グラフを出力するコードがある....
%>
なんて書いたとすると、Tomcatでは画像が表示されるが、weblogicでは、インポート文のうしろの改行をそのまま出力してしまうため、フォーマットが正しくなく、画像が出力されないということになるらしい。jsp中の<%%>で囲まれていない改行コードを削除したらイメージが表示された。
webで探してみたけど、こういう話はどこにものってなかった(見つけるのが下手という話もある)。とにかくつかれた。でも、表示できてよかった。
_ XVfbの後日談(4/30)
Xvfb :2 -screen 0 1024x768x8
だとweblogicからイメージが出力できた。色とサイズのどちらがだめだったのかは調べていない。