0

私が尋ねる理由は、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 ダイアログを起動することは可能ですか? もしそうなら、私の展開環境で失敗するのはなぜですか?

4

1 に答える 1

1

IBM Toolbox for Java JDBC プロパティ promptをに設定falseし、接続が失敗したときに例外をキャッチする必要があります。

ここに画像の説明を入力


java.awt.headless=trueまた、サーバー アプリケーションの実行時にJava システム プロパティを設定することをお勧めします。

Java SE プラットフォームでのヘッドレス モードの使用を 参照してください。

于 2012-06-18T21:36:34.163 に答える