在尝试使用Worklight中的SQL适配器访问数据库后几小时不活动。获得以下错误。如果我第二次尝试连接数据库,我可以获取数据。
com.ibm.ws.rsadapter.jdbc.WSJdbcConnection W. DSRA8650W:关闭JDBC子包装器时出错, com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement@39ba47f8 com.ibm.db2.jcc.am.SqlException:[jcc] [10120] [10943] [4.13.127]无效 操作:语句已关闭。 ERRORCODE = -4470,SQLSTATE = null A. 在连接操作期间发生通信错误 底层套接字,套接字输入流或套接字输出流。 错误位置:T4Agent.sendRequest() - flush(-1)。信息: 连接重置。 ERRORCODE = -44
99,SQLSTATE = 08001。
目前我已将maxConnectionPerNode设置为1000,requestTimeoutInSeconds为60。
经过一天的搜索后才知道,对于JEE应用程序,当连接池有过时连接时,或者我们正在尝试访问已关闭的预准备语句时会出现此问题。如何从Worklight刷新JDBC池?或如何使连接活着?
答案 0 :(得分:2)
我假设你在谈论你的开发环境 连接池已超时,因此第一次调用时出错,第二次调用成功。一旦你转移到生产环境,我认为你不会有几个小时的不活动,如果你愿意,你可以配置连接政策。
例如,对于WebSphere Application Server Liberty Profile配置编辑server.xml
文件,并为每个<dataSource>
元素添加带有agingTimeout属性的<connectionManager>
元素:<connectionManager agedTimeout="timeout"/>
例如:
<dataSource jndiName="jdbc/AppCenterDS" transactional="false">
<connectionManager agedTimeout="7h30m"/>
<jdbcDriver libraryRef="MySQLLib"/>
...
</dataSource>