How to fix c3p0 connection pool initializing exception?

10,669

Solution 1

Hi I had the same exception in one of the application i worked .Below are some helpful links I referred when I faced the similar issue.:

[1] https://forums.hibernate.org/viewtopic.php?t=924835&view=next&sid=abc532479937768dd0fd58e82a1f465f

[2] Getting Exception and application not able to connect with MySqL Database when using connection pooling (c3p0-0.9.1.2) with Hibernate 3.2?

During re-deployment classes are unloaded, if you fail to close Hibernate's sessionFactory then you get these ClassNotFound errors. One of the answer in #2 suggest that you can add a custom ServletContextListener to handle the contextDestroyed event.

Solution 2

I had the same problem in a Maven project, and was two weeks dealing with it; it worked in Eclipse but didn't work in Ubuntu Server. All solutions googled didn't work.

In my case, solved the problem adding the hibernate-core and c3p0 libraries to my pom(The project already had the hibernate-c3p0 library).

That's my pom.xml added code:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.2.12.Final</version>
        <exclusions>
        <exclusion>
            <artifactId>jta</artifactId>
            <groupId>javax.transaction</groupId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Hope it helps someone! :)

Share:
10,669
Terance Wijesuriya
Author by

Terance Wijesuriya

A curious person who likes to learn new concepts. Never give up until success is knocking. A native android lover. Motivate through simple admiration.

Updated on June 04, 2022

Comments

  • Terance Wijesuriya
    Terance Wijesuriya about 2 years

    This is an exception which was occurred when I used to create a connection pool using c3p0 .

    Jun 03, 2015 11:41:29 AM com.mchange.v2.log.MLog 
    INFO: MLog clients using java 1.4+ standard logging.
    Jun 03, 2015 11:41:29 AM com.mchange.v2.c3p0.C3P0Registry 
    INFO: Initializing c3p0-0.9.5 [built 02-January-2015 13:25:04 -0500; debug? true; trace: 10]
    Jun 03, 2015 11:41:29 AM com.mchange.v2.c3p0.management.ActiveManagementCoordinator 
    WARNING: A C3P0Registry mbean is already registered. This probably means that an application using c3p0 was undeployed, but not all PooledDataSources were closed prior to undeployment. This may lead to resource leaks over time. Please take care to close all PooledDataSources.
    Jun 03, 2015 11:41:29 AM com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource 
    INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 5, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 1hge136991f2dudczsq8hw|458d8adc, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceUseNamedDriverClass -> false, identityToken -> 1hge136991f2dudczsq8hw|458d8adc, idleConnectionTestPeriod -> 300, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:3306/ductoreh_patientdb, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 20, maxStatements -> 50, maxStatementsPerConnection -> 0, minPoolSize -> 2, numHelperThreads -> 3, preferredTestQuery -> SELECT 1, privilegeSpawnedThreads -> false, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> true, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
    Jun 03, 2015 11:42:02 AM org.apache.catalina.loader.WebappClassLoader loadClass
    INFO: Illegal access: this web application instance has been stopped already.  Could not load com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
    java.lang.IllegalStateException
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1612)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
        at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1629)
        at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:44)
        at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:2161)
        at java.util.TimerThread.mainLoop(Timer.java:555)
        at java.util.TimerThread.run(Timer.java:505)
    
    Exception in thread "C3P0PooledConnectionPoolManager[identityToken->1hge136991f284clsmmfih|19faec40]-AdminTaskTimer" java.lang.NoClassDefFoundError: com/mchange/v2/resourcepool/BasicResourcePool$AsyncTestIdleResourceTask
        at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1629)
        at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:44)
        at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:2161)
        at java.util.TimerThread.mainLoop(Timer.java:555)
        at java.util.TimerThread.run(Timer.java:505)
    Caused by: java.lang.ClassNotFoundException: com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
        ... 5 more
    Jun 03, 2015 11:42:18 AM org.apache.catalina.loader.WebappClassLoader loadClass
    INFO: Illegal access: this web application instance has been stopped already.  Could not load com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
    java.lang.IllegalStateException
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1612)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
        at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1629)
        at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:44)
        at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:2161)
        at java.util.TimerThread.mainLoop(Timer.java:555)
        at java.util.TimerThread.run(Timer.java:505)
    
    Exception in thread "C3P0PooledConnectionPoolManager[identityToken->1hge136991f28gvv1q0gwo7|753c66d3]-AdminTaskTimer" java.lang.NoClassDefFoundError: com/mchange/v2/resourcepool/BasicResourcePool$AsyncTestIdleResourceTask
        at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1629)
        at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:44)
        at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:2161)
        at java.util.TimerThread.mainLoop(Timer.java:555)
        at java.util.TimerThread.run(Timer.java:505)
    Caused by: java.lang.ClassNotFoundException: com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
        ... 5 more
    

    These are the classes I've used .

    -----Connection and Connection Pool---

    public class DBConnection
    {
        private static DBConnection     datasource;
        private ComboPooledDataSource cpds;
    
        private DBConnection() throws IOException, SQLException, PropertyVetoException {
            cpds = new ComboPooledDataSource();
            cpds.setDriverClass("com.mysql.jdbc.Driver"); //loads the jdbc driver
            cpds.setJdbcUrl("jdbc:mysql://localhost:3306/xxxxx");
            cpds.setUser("root");
            cpds.setPassword("");
    
            // the settings below are optional -- c3p0 can work with defaults
            cpds.setMinPoolSize(2);
            cpds.setAcquireIncrement(5);
            cpds.setMaxPoolSize(20);
            cpds.setMaxStatements(50);
            cpds.setIdleConnectionTestPeriod(300);        
            cpds.setTestConnectionOnCheckout(true);
            cpds.setPreferredTestQuery("SELECT 1");
    
        }
    
        public static DBConnection getInstance() throws IOException, SQLException, PropertyVetoException {
            if (datasource == null) {
                datasource = new DBConnection();
                return datasource;
            } else {
                return datasource;
            }
        }
    
        public Connection getConnection() throws SQLException {
            return this.cpds.getConnection();
        }
    }
    

    ----Interface-------

    public interface DBInterface
    {
        public List<UserBean> getUserData();
    }
    

    ----Bean------

    public class UserBean
    {
        private int idUser;
        private String companyName;
        private String country;
        private String adressLine1;
        private String addressLine2;
        private String zip;
        private String phone;
        private String email;
        private boolean isTrial;
        private Timestamp dateCreated;
        private Timestamp lastUpdated;
    
        /**
         * @return the idUser
         */
        public int getIdUser()
        {
            return idUser;
        }
    
        /**
         * @param idUser the idUser to set
         */
        public void setIdUser(int idUser)
        {
            this.idUser = idUser;
        }
    
        /**
         * @return the companyName
         */
        public String getCompanyName()
        {
            return companyName;
        }
    
        /**
         * @param companyName the companyName to set
         */
        public void setCompanyName(String companyName)
        {
            this.companyName = companyName;
        }
    
        /**
         * @return the country
         */
        public String getCountry()
        {
            return country;
        }
    
        /**
         * @param country the country to set
         */
        public void setCountry(String country)
        {
            this.country = country;
        }
    
        /**
         * @return the adressLine1
         */
        public String getAdressLine1()
        {
            return adressLine1;
        }
    
        /**
         * @param adressLine1 the adressLine1 to set
         */
        public void setAdressLine1(String adressLine1)
        {
            this.adressLine1 = adressLine1;
        }
    
        /**
         * @return the addressLine2
         */
        public String getAddressLine2()
        {
            return addressLine2;
        }
    
        /**
         * @param addressLine2 the addressLine2 to set
         */
        public void setAddressLine2(String addressLine2)
        {
            this.addressLine2 = addressLine2;
        }
    
        /**
         * @return the zip
         */
        public String getZip()
        {
            return zip;
        }
    
        /**
         * @param zip the zip to set
         */
        public void setZip(String zip)
        {
            this.zip = zip;
        }
    
        /**
         * @return the phone
         */
        public String getPhone()
        {
            return phone;
        }
    
        /**
         * @param phone the phone to set
         */
        public void setPhone(String phone)
        {
            this.phone = phone;
        }
    
        /**
         * @return the email
         */
        public String getEmail()
        {
            return email;
        }
    
        /**
         * @param email the email to set
         */
        public void setEmail(String email)
        {
            this.email = email;
        }
    
        /**
         * @return the isTrial
         */
        public boolean isIsTrial()
        {
            return isTrial;
        }
    
        /**
         * @param isTrial the isTrial to set
         */
        public void setIsTrial(boolean isTrial)
        {
            this.isTrial = isTrial;
        }
    
        /**
         * @return the dateCreated
         */
        public Timestamp getDateCreated()
        {
            return dateCreated;
        }
    
        /**
         * @param dateCreated the dateCreated to set
         */
        public void setDateCreated(Timestamp dateCreated)
        {
            this.dateCreated = dateCreated;
        }
    
        /**
         * @return the lastUpdated
         */
        public Timestamp getLastUpdated()
        {
            return lastUpdated;
        }
    
        /**
         * @param lastUpdated the lastUpdated to set
         */
        public void setLastUpdated(Timestamp lastUpdated)
        {
            this.lastUpdated = lastUpdated;
        }
    
    
    }
    

    ---Implementation Class----

    public class DBImpl implements DBInterface
    {
    
        public List<UserBean> getUserData()
        {
            System.out.println("01");
    
            Statement statement=null;
            Connection connection=null;
            ResultSet resultSet=null;
            List<UserBean> beans=new ArrayList<UserBean>();
    
            System.out.println("02");
            try
            {
                System.out.println("03");
                connection=DBConnection.getInstance().getConnection();
                System.out.println("04");
                String sql = "select * from user where isTrial=true";
                System.out.println("05");
                statement=connection.createStatement();
                System.out.println("06");
                resultSet=statement.executeQuery(sql.toLowerCase());
                System.out.println("07");
                if(resultSet.isBeforeFirst())
                {
                    System.out.println("08");
                    while(resultSet.next()){
                        System.out.println("09");
                        UserBean bean=new UserBean();
                        System.out.println("10");
    
                        bean.setIdUser(resultSet.getInt("idUser"));
                        System.out.println(resultSet.getInt("idUser"));
    
                        bean.setCompanyName(resultSet.getString("CompanyName"));
                        System.out.println(resultSet.getString("CompanyName"));
    
                        bean.setCountry(resultSet.getString("Country"));
                        bean.setAdressLine1(resultSet.getString("Address_Line1"));
                        bean.setAddressLine2(resultSet.getString("Address_Line2"));
                        bean.setZip(resultSet.getString("Zip"));
                        bean.setPhone(resultSet.getString("Phone"));
                        bean.setEmail(resultSet.getString("Email"));
                        bean.setIsTrial(resultSet.getBoolean("isTrial"));
                        bean.setDateCreated(resultSet.getTimestamp("DateCreated"));
                        bean.setLastUpdated(resultSet.getTimestamp("LastUpdated"));
                        beans.add(bean);
                    }
                }
    
    
            } catch (Exception ex)
            {
                ex.printStackTrace();
            }finally{
                try{
                    if(resultSet!=null){
                        resultSet.close();
                    }
                    if(statement!=null){
                        statement.close();
                    }
                    if(connection!=null){
                        connection.close();
                    }
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
    
            return beans;
    
        }
    
    
    }
    

    When I run the following servlet , I got above exception .

    ---Servlet---

    public class Test01 extends HttpServlet
    {
    
        /**
         * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
         * methods.
         *
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException
        {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try
            {
                DBInterface bImpl=new DBImpl();            
                List<UserBean> userData = bImpl.getUserData();            
    
                for(int i=0;i<userData.size();i++){
                    out.println(userData.get(i).toString());
                }
    
    
            } finally
            {
                out.close();
            }
        }
    

    In here I want to know how is this exception arised and why ? I could complete my expected task but this bought me above error . And I am new comer to connection pooling .

    • Jens
      Jens about 9 years
      do you have c3po.jar in your classpath? If yes wich version?
    • Terance Wijesuriya
      Terance Wijesuriya about 9 years
      @Jens c3p0-0.9.5.jar
    • Jens
      Jens about 9 years
      And this jar is in your classpath at runtime?
    • Terance Wijesuriya
      Terance Wijesuriya about 9 years
      @Jens Yes I have it .
  • Terance Wijesuriya
    Terance Wijesuriya about 9 years
    Thank you for the help but I not using hibernate in this work .