0

尝试使用安全网关将 bluemix 应用程序(java 自由配置文件)连接到我们的本地 db/as400。拒绝或允许所有连接不会更改错误消息。来自应用程序的请求似乎没有到达安全网关客户端(而且我在 sgw 客户端上没有看到提到连接被拒绝的消息)。

我该如何解决?这是代码:

    DB_SERVERNAME=jdbc:as400://xxx-xx-xxx-x.integration.ibmcloud.com:15XXX/dbname

    try {
                Driver driver = new com.ibm.as400.access.AS400JDBCDriver();
                DriverManager.registerDriver(driver);
                System.out.println("Driver Loaded Successfully ...");
                dbConn = DriverManager.getConnection(DB_SERVERNAME, DB_USERNAME, DB_PASSWORD);
                System.out.println("Connected...");
            }   catch (SQLException e) {                
                e.printStackTrace();

            } 

错误消息是:

Driver Loaded Successfully ...
ERR App [err] java.sql.SQLException: The application requester cannot establish the connection. (Connection refused)
ERR App [err]   at com.ibm.as400.access.JDError.throwSQLException(JDError.java:565)
ERR App [err]   at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:3308)
ERR App [err]   at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1393)
ERR App [err]   at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:1230)
ERR App [err]   at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:371)
ERR App [err]   at java.sql.DriverManager.getConnection(Unknown Source)
ERR App [err]   at java.sql.DriverManager.getConnection(Unknown Source)
ERR App [err]   at wasdev.sample.servlet.DBServlet.getDBConnection(DBServlet.java:106)
ERR App [err]   at wasdev.sample.servlet.DBServlet.doGet(DBServlet.java:64)
ERR App [err]   at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
ERR App [err]   at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
ERR App [err]   at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1290)
ERR App [err]   at [internal classes]
ERR App [err]   at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
ERR App [err]   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
ERR App [err]   at java.lang.Thread.run(Unknown Source)
ERR App [err] Caused by:
ERR App [err] java.net.ConnectException: Connection refused
ERR App [err]   at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
ERR App [err]   at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
ERR App [err]   at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
ERR App [err]   at java.net.SocksSocketImpl.connect(Unknown Source)
ERR App [err]   at java.net.Socket.connect(Unknown Source)
ERR App [err]   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
ERR App [err]   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
ERR App [err]   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
ERR App [err]   at java.lang.reflect.Method.invoke(Unknown Source)
App [err]   at com.ibm.as400.access.PortMapper.getSocketConnection(PortMapper.java:273)
ERR App [err]   at com.ibm.as400.access.PortMapper.getServerSocket(PortMapper.java:161)
ERR App [err]   at com.ibm.as400.access.AS400ImplRemote.signonConnect(AS400ImplRemote.java:2334)
ERR App [err]   at com.ibm.as400.access.AS400ImplRemote.signon(AS400ImplRemote.java:2250)
ERR App [err]   at com.ibm.as400.access.AS400.sendSignonRequest(AS400.java:3035)
ERR App [err]   at com.ibm.as400.access.AS400.signon(AS400.java:3910)
ERR App [err]   at com.ibm.as400.access.AS400.connectService(AS400.java:1168)
ERR App [err]   at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConnection.java:3300)
ERR App [err]   ... 32 more
4

3 回答 3

0

阅读您的日志,错误消息

拒绝连接

表示驱动程序工作正常,但存在连接问题,在您的情况下,使用安全网关,您应该调查 AS400 服务器和安全网关实例

  • #1 是在 Secure Gateway 实例上正确映射的 TCP 端口 15XXX(驱动程序尝试通过 JDBC url 连接的端口)
  • #2a 如果 #1 为真,AS400 服务器是否在同一 TCP 端口上侦听传入连接?
  • #2b 如果#2a 为假,AS400 服务器是否在侦听不同的 TCP 端口?
  • #3 根据 AS400 服务器侦听的 TCP 端口(#2a 或 #2b),此端口是否正确映射到 Secure Gateway 实例,允许通过 Secure Gateway 发送到 TCP 15XXX 的请求正确路由到正确的端口AS400 服务器?
  • #4 如果 #3 为真,AS400 服务器是否有防止传入连接的内部防火墙?
于 2016-06-09T10:15:44.323 回答
0

根据评论中的进一步讨论进行更新。

使用 cURLempty reply from server命令访问云主机:端口应该会在 SG 客户端上生成日志。由于数据库将如何响应这种连接,它应该等同于成功的连接。

这似乎将问题缩小到如何在您的 Bluemix 应用程序中创建请求。对最初问题的另一条评论表明您的驱动程序只接受选择端口作为输入,因此问题可能源于那里。

于 2016-06-06T19:44:50.863 回答
0

JT400 JDBC 驱动程序使用IBM i 主机服务器与 IBM i 系统通信,每个主机服务器运行在不同的端口上。您需要通过安全网关转发所有这些端口才能使其正常工作。有关更多信息,请参阅文档(您至少需要 as-database、as-central 和 as-signon)。

如果您需要更改应用程序用于连接的端口,您可以通过创建 AS400 对象并使用setServicePort更改默认端口来实现。然后传递 AS400 对象进行连接,而不是使用系统、用户名和密码。

于 2016-08-02T20:45:24.017 回答