0

我问的原因是,我有一个使用 Ruby (1.8.7-p357) 和 Sinatra 框架 (1.3.2) 编写的 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 回答