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.

Reply via email to