2016-06-06 4 views
0

보안 게이트웨이를 사용하여 우리의 구내 db/as400에 bluemix 앱 (java liberty 프로필)을 연결하려고합니다. 모든 연결을 거부하거나 허용해도 오류 메시지는 변경되지 않습니다. 앱의 요청이 보안 게이트웨이 클라이언트에 도달하지 못하는 것 같습니다 (연결을 거부하는 sgw 클라이언트에서 메시지가 표시되지 않음).on-premise db/as400에 bluemix 앱을 연결하는 방법은 무엇입니까?

어떻게 해결할 수 있습니까? 이 코드 :

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(); 

      } 

그리고 오류 MSG는 다음과 같습니다 주석의 자세한 설명에

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 
+0

'연결 거부. 거기에서 아무것도 그 ip : port 듣기, 또는 적극적으로 연결을 거부 방화벽에 아무것도 될 수 있습니다. –

+0

나는 정상적인 db2를 가지고 있으며, 보안 게이트웨이 클라이언트를 사용하여 액세스 할 수 있습니다. 문제는 db/as400에서만 발생합니다. 방화벽에 금지가있는 경우 모든 요청에 ​​해당됩니다. 또한, 나는 일부 네트워크의 다른 컴퓨터에서 로컬로 (일부 네트워크의) DB/AS400에서 데이터를 추출하기 위해 실행하는 프로그램을 가지고 있는데, 제대로 작동합니다. URL에 포트 번호를 지정하지 않았습니다. 하지만 bluemix에서는 대상 정보에 포트 번호를 지정해야합니다. –

+0

대상 호스트 또는 포트가 잘못 구성되어 있습니다. [this] (https://developer.ibm.com/bluemix/2015/04/01/reaching-enterprise-backend-bluemix-secure-gateway/)를 검토하십시오. – mustaccio

답변

0

업데이트를 기반으로.

클라우드 호스트에 대한 cURL 명령에 empty reply from server을 가져 오는 것은 SG 클라이언트의 로그를 생성해야합니다. 이것은 데이터베이스가 이러한 종류의 연결에 응답하는 방법으로 인해 성공적인 연결과 동일해야합니다.

이것은 Bluemix 앱에서 요청이 어떻게 생성되는지에 대한 문제를 좁히는 것 같습니다. 초기 질문에 대한 또 다른 의견은 드라이버가 입력으로 선택된 포트만 받아들이므로 문제가 발생할 수 있음을 암시합니다.

+0

프로토콜은 tcp/ip이며 일치합니다. 목적지에 대한 인증이 없습니다. –

+0

클라우드 호스트 : 포트에서 어떤 응답을 얻으려고합니까 (예 : 말림)? –

+0

curl -u xxx : xxx xxx-xx-xxx-x.integration.ibmcloud.com:15xxx/dbname 및이 응답이 있습니다. 서버에서 빈 회신. –

0

, 연결은 보안 게이트웨이를 사용하여,

드라이버가 잘 작동하고 있음을 의미하지만, 연결 문제가 귀하의 경우에 거부

오류 메시지 로그를 읽기 AS400 서버와 Secure 게이트웨이 인스턴스를 모두 조사해야합니다.

  • # 1은 TCP 포트 15XXX입니다 (드라이버가 연결하려고 시도한 포트 번호 e JDBC URL)
  • # 1이 참이면 AS400 서버는 들어오는 연결에 대해 동일한 TCP 포트에서 수신 대기합니까?
  • # 2a가 거짓 인 경우 # 2b, AS400 서버가 다른 TCP 포트에서 수신 대기 중입니까?
  • AS400 서버 (# 2a 또는 # 2b)에서 청취 한 TCP 포트에 따라 # 3이 Secure Gateway 인스턴스에 올바르게 매핑 된이 포트는 Secure Gateway를 통해 TCP 15XXX로 전송 된 요청을 AS400 서버의 오른쪽 포트?
  • # 3이 참이면 # 4, AS400 서버에 들어오는 연결을 방지하는 내부 방화벽이 있습니까?
0

JT400 JDBC 드라이버는 각각 다른 포트에서 실행되는 IBM i Host Servers을 사용하여 IBM i 시스템과 통신합니다. 보안 포트가 작동하려면 이러한 모든 포트를 보안 게이트웨이를 통해 전달해야합니다. 자세한 내용은 this doc을 참조하십시오 (최소한 데이터베이스로, 중앙에, 사인온이 필요합니다).

응용 프로그램에서 사용하는 포트를 변경해야하는 경우 AS400 개체를 만들고 setServicePort을 사용하여 기본 포트를 변경할 수 있습니다. 그런 다음 AS400 오브젝트를 전달하여 시스템, 사용자 이름 및 암호를 사용하는 대신 연결하십시오.