2015-06-03 4 views
2

Это исключение, которое произошло при создании пула соединений с помощью c3p0.Как исправить исключение инициализации пула соединений 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 

Это классы, которые я использовал.

----- Подключение и пула соединений ---

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(); 
    } 
} 

---- Интерфейс -------

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; 
    } 


} 

--- Класс реализации ----

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; 

    } 


} 

Когда я запускаю следующий сервлет, я получил выше исключения.

--- 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(); 
     } 
    } 

В здесь я хочу знать, как это исключение возникшие и почему? Я мог выполнить свою ожидаемую задачу, но это купило меня выше ошибки. И я новичок в пуле соединений.

+0

У вас есть 'c3po.jar' в вашем пути к классу? Если да, то какая версия? – Jens

+0

@Jens c3p0-0.9.5.jar – Barrier

+0

И эта банка находится в вашем пути к классу во время выполнения? – Jens

ответ

2

Привет У меня было то же самое исключение в одном из приложения я работал .Below некоторые полезные ссылки я упомянутые, когда я столкнулся с аналогичной проблемой .:

[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?

Во время повторного развертывания классы выгружаются, если вы не закрываете sessionFactory Hibernate, вы получаете эти ошибки ClassNotFound. Один из ответов в # 2 предполагает, что вы можете добавить собственный ServletContextListener для обработки события contextDestroyed.

+0

Благодарим вас за помощь, но я не использую спящий режим в этой работе. – Barrier

Смежные вопросы