在 jboss 6 中使用数据库服务器登录模块进行身份验证时,我发现使用 hsqldb 数据库管理器 gui 管理主体和角色非常有用。这可以通过 JMX 控制台调用。当应用程序服务器驻留在我使用 JMX 控制台的同一台机器上时,完全没有问题。
现在我处于应用服务器在另一台机器上运行的情况,比如我通过 ssh 连接到的 linux 机器,tail -f 用于调试和其他东西的日志,我在一台安装了简单 Vista 的机器上开发.
当然 JMX 控制台仍然可以访问,但是这次我无法让 hsqldb 数据库管理器窗口显示出来。
我在没有任何特殊配置的情况下安装了经典的 XMing X 服务器(我对 X 服务器不是很精通,所以我实际上使用默认设置),我发现的只是需要设置和导出 DISPLAY 环境变量在远程机器上,使其指向开发机器,如下所示:
set DISPLAY=192.168.0.5:0
export DISPLAY
我还配置了我的 ssh 客户端(简单的腻子),以便将 X11 转发到远程 DISPLAY 变量指向的相同 IP 地址。
现在,当我尝试从 JMX 控制台调用数据库管理器时,我得到以下异常跟踪:
ERROR [org.jboss.jdbc.HypersonicDatabase] (Thread-33) Failed to start database manager: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_17]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [:1.6.0_17]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [:1.6.0_17]
at java.lang.reflect.Method.invoke(Method.java:616) [:1.6.0_17]
at org.jboss.jdbc.HypersonicDatabase$1.run(HypersonicDatabase.java:530) [:6.0.0.Final]
Caused by: java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
at java.lang.Class.forName0(Native Method) [:1.6.0_17]
at java.lang.Class.forName(Class.java:186) [:1.6.0_17]
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82) [:1.6.0_17]
at java.awt.Window.init(Window.java:385) [:1.6.0_17]
at java.awt.Window.<init>(Window.java:438) [:1.6.0_17]
at java.awt.Frame.<init>(Frame.java:419) [:1.6.0_17]
at javax.swing.JFrame.<init>(JFrame.java:218) [:1.6.0_17]
at org.hsqldb.util.DatabaseManagerSwing.main(Unknown Source) [:6.0.0.Final]
... 5 more