JT400 - IBMi 机器拒绝 JDBC 连接,但在 Windows 机器上工作
Posted
技术标签:
【中文标题】JT400 - IBMi 机器拒绝 JDBC 连接,但在 Windows 机器上工作【英文标题】:JT400 - JDBC connection refused from IBMi machine but working from Windows machine 【发布时间】:2021-06-30 11:33:48 【问题描述】:JT400 - 从 Windows 机器连接到 IBMi 机器时,JDBC 连接工作正常。
DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());
String sysname = "xxx.xxx.xx.xxx";
String xref = "IBMISQLLIB";
String url = "jdbc:as400://" + sysname + ";translate binary=true;prompt=false;naming=sql;libraries=" + xref;
Connection connection = DriverManager.getConnection(url, "USERNAME", "PASSWORD");
print("Connection created successfully");
但无法使用相同的代码创建连接 - 在同一台 IBMi 机器上运行代码时(通过“QSH 命令条目”上的可运行 jar),错误:
java.sql.SQLException:应用程序请求者无法建立 联系。 (远程主机拒绝了尝试的连接操作。 (连接被拒绝))在 com.ibm.as400.access.JDError.createSQLExceptionSubClass(JDError.java:887) 在 com.ibm.as400.access.JDError.throwSQLException(JDError.java:610) 在 com.ibm.as400.access.JDError.throwSQLException(JDError.java:568) 在 com.ibm.as400.access.AS400JDBCConnectionImpl.setProperties(AS400JDBCConnectionImpl.java:3522) 在 com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1430) 在 com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:1280) 在 com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:403) 在 java.sql.DriverManager.getConnection(DriverManager.java:675) 在 java.sql.DriverManager.getConnection(DriverManager.java:258)
知道现在出了什么问题吗??
因为这是几天前的工作 相同的代码在其他 IBMi 服务器上运行有关 IBMi 机器的更多详细信息是:
-
连接配置文件中使用的用户名没有访问权限问题
IBMi 机器上没有设置防火墙
TCP/IP 配置已按照说明进行验证 - Configuring TCP/IP on IBM i
【问题讨论】:
我认为这值得重新打开,它似乎是特定于在 IBM i 上本地运行的 Java。我没有看到任何可能是 OP 问题的链接问题的答案。如果 OP 使用本机驱动程序看到相同的行为,我会很好奇。com.ibm.db2.jdbc.app.DB2Driver
和 "jdbc:db2://localhost"
也可以在连接属性上使用 "driver"="native
@Kishore_2021 - 如果您在标签下看到“重新打开”选项,您可以投票重新打开您自己的问题。
另外,无论这个问题是否被重新打开,您都可以尝试在其他地方寻求帮助。最好的可能是midrange.com mailing lists。您必须订阅(免费)并等待管理员启用您才能发帖,但他通常会在一天内回复。我建议至少订阅MIDRANGE-L,但也可以订阅您感兴趣的任何其他内容。
似乎JAVA400-L 和OpenSource 也可能与您直接相关。另一种选择是Ryver。
【参考方案1】:
数据库主机服务器是否处于活动状态?使用 WRKACTJOB 查看名为 QZDASOINIT 的作业是否正在运行。
如果没有,请尝试使用命令 STRHOSTSVR *DATABASE 启动主机服务器。
【讨论】:
OP 提到 Java 程序在 PC 上运行时可以工作。【参考方案2】:如果您从 QSH 运行 jar 文件,则需要确保允许多线程。这可能会搞砸事情。
相同的代码如果在 PC 上也能正常工作,除非您可能也使用不同版本的 jt400.jar 文件。
尝试使用 localhost 代替系统名称。
或者甚至编写一个小的 Java 类来打开和关闭连接。
【讨论】:
【参考方案3】:问题与默认 TCP/IP 端口有关,该端口未侦听 JDBC 连接请求。
最后通过重新启动 IBMi 机器解决了问题。
:)
【讨论】:
如果您找到了答案,您应该接受它(即使您回答了自己的问题。 TCP/ip 的工作方式与其他系统不同。我最终编写了一个健全性检查器来确定事情是否符合预期。以上是关于JT400 - IBMi 机器拒绝 JDBC 连接,但在 Windows 机器上工作的主要内容,如果未能解决你的问题,请参考以下文章
Cognos 10.2.2 as400 iSeries DB2 jdbc 连接