私が尋ねる理由は、Sinatra Framework (1.3.2) を使用して Ruby (1.8.7-p357) で記述された Web アプリケーションを持っているからです。インタプリタは JRuby (1.6.7.2) です。AS/400 (System i v6r1) に接続しています。コードでデータベースに接続するための間違ったパスワードをアプリに入力すると、正しいパスワードを入力するように Java ダイアログ ボックスが表示されます。
これは、WEBrick を使用して私の開発マシン (Ubuntu 11.10) で問題なく動作します。ただし、間違ったパスワードでアプリケーションをデプロイすると、アプリケーションがハングします。ログ ファイルを調べてみると、システムが関数 java.awt.Dialog.show() を呼び出してユーザーからの応答を待っていることがわかります。
トレースの関連部分は次のとおりです。
http-8080-2" daemon prio=6 tid=0x03d81400 nid=0x10c in Object.wait() [0x06278000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x24a022a8> (a java.awt.Component$AWTTreeLock)
at java.lang.Object.wait(Object.java:503)
at java.awt.WaitDispatchSupport.enter(Unknown Source)
- locked <0x24a022a8> (a java.awt.Component$AWTTreeLock)
at java.awt.Dialog.show(Unknown Source)
at com.ibm.as400.access.PasswordDialog.prompt(PasswordDialog.java:284)
at com.ibm.as400.access.ToolboxSignonHandler.handleSignon(ToolboxSignonHandler.java:499)
at com.ibm.as400.access.ToolboxSignonHandler.connectionInitiated(ToolboxSignonHandler.java:50)
at com.ibm.as400.access.AS400.promptSignon(AS400.java:2153)
at com.ibm.as400.access.AS400.signon(AS400.java:3417)
- locked <0x23121378> (a com.ibm.as400.access.AS400)
at com.ibm.as400.access.AS400.connectService(AS400.java:869)
at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:3016)
at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1242)
at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:1105)
at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:355)
この方法で Web アプリケーションがクライアント マシン上で Java ダイアログを起動することは可能ですか? もしそうなら、私の展開環境で失敗するのはなぜですか?