I'm a sysadmin of a webserver with a java application that was developed inside the company. That application is using JDBC connections to access an Oracle server. The problem is that ever so often the connection to the DB are broken (cluster failover, for example) and the application is unable to reconnect. We get java exceptions, first:
java.sql.SQLException: ORA-01089: immediate shutdown in progress - no operations are permitted
then (with full stack):
java.sql.SQLException: Io exception: Broken pipe
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
at oracle.jdbc.driver.OracleConnection.setAutoCommit(OracleConnection.java:1224)
at com.sun.enterprise.resource.JdbcConnection.setAutoCommit(JdbcConnection.java:178)
at app81.servlet.DirectAccessServlet.executeGameOperation(DirectAccessServlet.java:111)
at app81.servlet.DirectAccessServlet.doPost(DirectAccessServlet.java:162)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:816)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:917)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:398)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:185)
at webutils.filter.LoggerFilter.doFilter(LoggerFilter.java:39)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:185)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:255)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:586)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:556)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:187)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:586)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:556)
at com.sun.webserver.connector.nsapi.NSAPIProcessor.service(NSAPIProcessor.java:160)
The real problem is that the server sticks in this state and only a complete webserver restart helps to get rid of this. Our java developer says that connection pools should not return broken connections and this is clearly a bug in WS. But I am suspicious and before reporting this as a bug I want to be sure that the application is
really using the pool and using it correctly. Is there a way to get this information from the WS?
We have a Sun Java System Web Server 7.0U1 deployed in a production system so minimal downtimes are permitted.