HikariCP icon indicating copy to clipboard operation
HikariCP copied to clipboard

How to connect Db2 on IBM iSeries/AS400?

Open yxmm-wxe opened this issue 2 years ago • 2 comments

Enviroment:

HikariCP version: 3.4.5
JDK version     : 1.8
Database        : Db2 on IBM iSeries/AS400
Driver:
<dependency>
    <groupId>net.sf.jt400</groupId>
    <artifactId>jt400</artifactId>
    <version>10.6</version>
</dependency>

Problem

This is my code to connect:

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:as400://serverIP:serverPort;user=xxx;password=xxx;");
config.setMaximumPoolSize(16);
config.setMinimumIdle(1);
config.setIdleTimeout(600000);
HikariDataSource dataSource = new HikariDataSource(config);
Connection connection = dataSource.getConnection();

When I use HikariCP to connect to Db2 on IBM iSeries/AS400, there will throw the following exception.
Is there something wrong with my usage or something else?

2021-09-08 00:55:54.738 [ERROR] com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:593) - HikariPool-1 - Exception during pool initialization.
java.sql.SQLException: The application requester cannot establish the connection. (Connection was dropped unexpectedly.)
        at com.ibm.as400.access.JDError.createSQLExceptionSubClass(JDError.java:887) ~[gcef-datasource-service.jar:?]
        at com.ibm.as400.access.JDError.throwSQLException(JDError.java:610) ~[gcef-datasource-service.jar:?]
        at com.ibm.as400.access.JDError.throwSQLException(JDError.java:568) ~[gcef-datasource-service.jar:?]
        at com.ibm.as400.access.AS400JDBCConnectionImpl.setProperties(AS400JDBCConnectionImpl.java:3523) ~[gcef-datasource-service.jar:?]
        at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1434) ~[gcef-datasource-service.jar:?]
        at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:1280) ~[gcef-datasource-service.jar:?]
        at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:403) ~[gcef-datasource-service.jar:?]
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:121) ~[gcef-datasource-service.jar:?]
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[gcef-datasource-service.jar:?]
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[gcef-datasource-service.jar:?]
        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[gcef-datasource-service.jar:?]
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[gcef-datasource-service.jar:?]
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[gcef-datasource-service.jar:?]
        at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:81) ~[gcef-datasource-service.jar:?]
        at com.gcef.data.common.connection.ConnectionFactory.addDataSource(ConnectionFactory.java:43) ~[gcef-datasource-service.jar:?]
        at com.gcef.data.common.connection.ConnectionFactory.getConnection(ConnectionFactory.java:24) ~[gcef-datasource-service.jar:?]
        at com.gcef.data.service.DataSourceService.testConnection(DataSourceService.java:43) ~[gcef-datasource-service.jar:?]
        at com.gcef.data.controller.DataSourceController.lambda$static$11(DataSourceController.java:128) ~[gcef-datasource-service.jar:?]
        at com.gcef.data.controller.authorization.BasicAuthAccessManager.manage(BasicAuthAccessManager.java:20) ~[gcef-datasource-service.jar:?]
        at io.javalin.http.JavalinServlet$addHandler$protectedHandler$1.handle(JavalinServlet.kt:121) ~[gcef-datasource-service.jar:?]
        at io.javalin.http.JavalinServlet$service$2$1.invoke(JavalinServlet.kt:45) ~[gcef-datasource-service.jar:?]
        at io.javalin.http.JavalinServlet$service$2$1.invoke(JavalinServlet.kt:24) ~[gcef-datasource-service.jar:?]
        at io.javalin.http.JavalinServlet$service$1.invoke(JavalinServlet.kt:129) ~[gcef-datasource-service.jar:?]
        at io.javalin.http.JavalinServlet$service$2.invoke(JavalinServlet.kt:40) ~[gcef-datasource-service.jar:?]
        at io.javalin.http.JavalinServlet.service(JavalinServlet.kt:81) ~[gcef-datasource-service.jar:?]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[gcef-datasource-service.jar:?]
        at io.javalin.websocket.JavalinWsServlet.service(JavalinWsServlet.kt:51) ~[gcef-datasource-service.jar:?]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:569) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[gcef-datasource-service.jar:?]
        at io.javalin.core.JavalinServer$start$wsAndHttpHandler$1.doHandle(JavalinServer.kt:49) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:507) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.Server.handle(Server.java:501) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:135) ~[gcef-datasource-service.jar:?]
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806) [gcef-datasource-service.jar:?]
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938) [gcef-datasource-service.jar:?]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_202]
Caused by: com.ibm.as400.access.ConnectionDroppedException: Connection was dropped unexpectedly.
        at com.ibm.as400.access.DataStream.readAfterHeader(DataStream.java:259) ~[gcef-datasource-service.jar:?]
        at com.ibm.as400.access.AS400XChgRandSeedReplyDS.read(AS400XChgRandSeedReplyDS.java:63) ~[gcef-datasource-service.jar:?]
        at com.ibm.as400.access.AS400ImplRemote.getConnection(AS400ImplRemote.java:1418) ~[gcef-datasource-service.jar:?]
        at com.ibm.as400.access.AS400ImplRemote.connect(AS400ImplRemote.java:499) ~[gcef-datasource-service.jar:?]
        at com.ibm.as400.access.AS400.connectService(AS400.java:1416) ~[gcef-datasource-service.jar:?]
        at com.ibm.as400.access.AS400JDBCConnectionImpl.setProperties(AS400JDBCConnectionImpl.java:3510) ~[gcef-datasource-service.jar:?]
        ... 53 more

yxmm-wxe avatar Sep 10 '21 04:09 yxmm-wxe

I'd suggest adding: prompt=false to your url

msillence avatar Oct 19 '21 15:10 msillence

Perhaps your connection is being dropped on the server side. If there is any connection control on the IBM i side (AS/400). Talk to your IBM i (DB2 for i) administrator to see if this control exists. For example: We have implemented security validations in our environment that prevent connections from invalid IPs, which result in this same message "Connection was dropped unexpectedly".

wille-MD avatar Nov 24 '21 15:11 wille-MD