Usually the connection is initialised as null and then assigned inside
the try block. What happens if the method above throws an error after
a connection is removed from the pool?
To try to answer this, the sample code provided is illustrative of my DAO
classes generally. The following is a listing of my connection pool class:
package visualRSS.database;
import java.sql.*;
import javax.sql.DataSource;
import javax.naming.InitialContext;
import org.apache.log4j.Logger;
import visualRSS.entity_misc_classes.PropertiesFile;
public class ConnectionPool_DB {
static final Logger logger =
Logger.getLogger(ConnectionPool_DB.class.getName());
private static ConnectionPool_DB pool = null;
private static DataSource dataSource = null;
public synchronized static ConnectionPool_DB getInstance() {
if (pool == null) {
pool = new ConnectionPool_DB();
}
return pool;
}
private ConnectionPool_DB() {
try {
InitialContext ic = new InitialContext();
dataSource = (DataSource)
ic.lookup(PropertiesFile.getProperty("visualRSS", "DATASOURCE"));
// dataSource = (DataSource)
ic.lookup("java:/comp/env/jdbc/visualRSS");
}
catch(Exception ex) {
logger.error("Error getting a connection pool's datasource\n",
ex);
}
}
public void freeConnection(Connection c) {
try {
c.close();
}
catch (Exception ex) {
logger.error("Error terminating a connection pool connection\n",
ex);
}
}
public Connection getConnection() {
try {
return dataSource.getConnection();
}
catch (Exception ex) {
logger.error("Error getting a connection pool connection\n",
ex);
return null;
}
}
}
For a typical error, I get a chain of stacktrace as follows:
ERROR|21 11 2011|12 49 53|http-8080-7|visualRSS.database.ConnectionPool_DB|
- Error getting a connection pool connection
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could
not create connection to database server. Attempted reconnect 3 times.
Giving up.
at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAcces
sorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstruc
torAccessorImpl.java:27)
at
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.Util.getInstance(Util.java:384)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
at
com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2226)
at
com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2127)
at
com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774)
at
com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
at
sun.reflect.GeneratedConstructorAccessor11.newInstance(Unknown Source)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstruc
torAccessorImpl.java:27)
at
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at
com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375)
at
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
at
org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverC
onnectionFactory.java:38)
at
org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableCon
nectionFactory.java:294)
at
org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjec
tPool.java:1148)
at
org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObject
Pool.java:84)
at
org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSourc
e.java:96)
at
org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.ja
va:880)
at
visualRSS.database.ConnectionPool_DB.getConnection(ConnectionPool_DB.java:47
)
at visualRSS.database.User_DB.get(User_DB.java:127)
at
visualRSS.database.Dataset_DB.mapDataset(Dataset_DB.java:580)
at visualRSS.database.Dataset_DB.get(Dataset_DB.java:112)
at
visualRSS.database.Visualisation_DB.mapVisualisation(Visualisation_DB.java:5
99)
at
visualRSS.database.Visualisation_DB.get(Visualisation_DB.java:101)
at
visualRSS.database.Visualisation_Recent_List_DB.mapVisualisationRecentList(V
isualisation_Recent_List_DB.java:205)
at
visualRSS.database.Visualisation_Recent_List_DB.getVisualisationRecentList(V
isualisation_Recent_List_DB.java:108)
at
org.apache.jsp.jsp.index.index_jsp._jspService(index_jsp.java:166)
at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:3
77)
at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:191)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase
.java:558)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127
)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102
)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:
859)
at
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(H
ttp11AprProtocol.java:579)
at
org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Thread.java:619)
Caused by:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data
source rejected establishment of connection, message from server: "Too many
connections"
at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAcces
sorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstruc
torAccessorImpl.java:27)
at
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.Util.getInstance(Util.java:384)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1104)
at
com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2172)
... 44 more
ERROR|21 11 2011|12 49 53|http-8080-7|visualRSS.database.User_DB| - Error
getting User 978937_19082010_1282218386857
java.lang.NullPointerException
at visualRSS.database.User_DB.get(User_DB.java:137)
at
visualRSS.database.Dataset_DB.mapDataset(Dataset_DB.java:580)
at visualRSS.database.Dataset_DB.get(Dataset_DB.java:112)
at
visualRSS.database.Visualisation_DB.mapVisualisation(Visualisation_DB.java:5
99)
at
visualRSS.database.Visualisation_DB.get(Visualisation_DB.java:101)
at
visualRSS.database.Visualisation_Recent_List_DB.mapVisualisationRecentList(V
isualisation_Recent_List_DB.java:205)
at
visualRSS.database.Visualisation_Recent_List_DB.getVisualisationRecentList(V
isualisation_Recent_List_DB.java:108)
at
org.apache.jsp.jsp.index.index_jsp._jspService(index_jsp.java:166)
at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:3
77)
at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:191)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase
.java:558)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127
)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102
)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:
859)
at
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(H
ttp11AprProtocol.java:579)
at
org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Thread.java:619)
ERROR|21 11 2011|12 49 53|http-8080-7|visualRSS.database.ConnectionPool_DB|
- Error terminating a connection pool connection
java.lang.NullPointerException
at
visualRSS.database.ConnectionPool_DB.freeConnection(ConnectionPool_DB.java:3
8)
at visualRSS.database.User_DB.get(User_DB.java:154)
at
visualRSS.database.Dataset_DB.mapDataset(Dataset_DB.java:580)
at visualRSS.database.Dataset_DB.get(Dataset_DB.java:112)
at
visualRSS.database.Visualisation_DB.mapVisualisation(Visualisation_DB.java:5
99)
at
visualRSS.database.Visualisation_DB.get(Visualisation_DB.java:101)
at
visualRSS.database.Visualisation_Recent_List_DB.mapVisualisationRecentList(V
isualisation_Recent_List_DB.java:205)
at
visualRSS.database.Visualisation_Recent_List_DB.getVisualisationRecentList(V
isualisation_Recent_List_DB.java:108)
at
org.apache.jsp.jsp.index.index_jsp._jspService(index_jsp.java:166)
at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:3
77)
at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:191)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase
.java:558)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127
)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102
)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:
859)
at
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(H
ttp11AprProtocol.java:579)
at
org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Thread.java:619)
I hope this helps.