2014-05-19 51 views
0

當我運行我的應用程序時,它可以工作,但在控制檯中拋出異常,如下所示: 每次顯示不同的計時器編號。我使用的所有技術都被標記爲問題。請告訴我,如果您需要我分享我的代碼以外的任何其他部分。運行應用程序時拋出線程「Timer-0」中的異常

SEVERE: Exception in thread "Timer-0" 
SEVERE: java.lang.IllegalStateException: This web container has not yet been started 
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1652) 
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1611) 
    at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1481) 
    at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:32) 
    at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:1964) 
    at java.util.TimerThread.mainLoop(Timer.java:555) 
    at java.util.TimerThread.run(Timer.java:505) 

的hibernate.cfg.xml

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost/test</property> 
    <property name="hibernate.connection.username">root</property> 
    <property name="hibernate.connection.password"></property> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 

    <property name="show_sql">true</property> 

    <property name="hibernate.c3p0.min_size">5</property> 
    <property name="hibernate.c3p0.max_size">100</property> 
    <property name="hibernate.c3p0.timeout">300</property> 
    <property name="hibernate.c3p0.max_statements">50</property> 
    <property name="hibernate.c3p0.idle_test_period">3000</property> 
    <!-- Enable Hibernate's automatic session context management --> 
    <property name="current_session_context_class">thread</property> 

    <!-- Disable the second-level cache --> 
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 

的HibernateUtil

public class HibernateUtil { 

    private static SessionFactory sessionFactory = buildSessionFactory(); 

    private static SessionFactory buildSessionFactory() { 
     try { 
      System.err.println("in session Facotry"); 
      Configuration configuration = new Configuration(); 
      return configuration.configure().buildSessionFactory(
        new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()) 
        .build()); 
     } catch (HibernateException ex) { 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 

} 
+0

請添加一些上下文。我們可以用你提供的東西做得很少。 –

+0

你是什麼意思的上下文?我不是起訴這個異常的原因,而是列出了我正在使用的所有技術。 – Jack

+0

下面的代碼行 – keyser

回答

0

你使用比其他HibernateUtil.class任何其他靜態初始化塊?並用於測試更改HibernateUtil中的所有異常,並捕獲Throwable。

它似乎是在您的Web應用程序和所有靜態初始化塊初始化過程中發生的錯誤。

+0

不,沒有任何其他的靜態,我懷疑這個問題是由我最近改變它的休眠配置造成的。 – Jack

0

該異常是從後臺任務調用的,後臺任務的作用是清理資源並在服務器完全初始化之前啓動。

這不是您的代碼造成的問題,它看起來像Glassfish作業沒有遵循正確的執行順序。

我勸你上Glassfish issue tracker提交問題報告,併爲他們提供:

  • 應用服務器版本
  • OS版本
  • 應用程序配置文件
+0

您如何看待史蒂夫C的回答? – Jack

+0

我認爲他是對的。贊成他的迴應。在JEE中,您應該使用由AS提供的DS,因爲這些由事務管理器管理。 –

3

這是C3P0連接池庫嘗試在服務器完成啓動過程之前執行連接維護。

使用第三方連接池機制的是一個完整的堆棧Java EE服務器如Glassfish的,WildFly/JBossAS時,We​​bLogic等對冗餘

的解決方案是

  1. 刪除所有C3P0從您的應用程序相關的罐子(及任何可能已添加到應用程序服務器)
  2. 定義一個數據源中的GlassFish與連接的詳細信息,按您的Hibernate配置
  3. 減少ÿ我們的Hibernate配置屬性:

    <property name="hibernate.connection.datasource">jndi name of the datasource you defined in step 2</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="show_sql">true</property> 
    <!-- Enable Hibernate's automatic session context management --> 
    <property name="current_session_context_class">thread</property> 
    
    <!-- Disable the second-level cache --> 
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
    

注意的Tomcat支持使用數據源,並有它自己的連接池實現也是如此。

+0

感謝您的回答,我可以知道什麼時候應該使用c3p0嗎?爲什麼c3p0在服務器完成啓動過程之前嘗試進行連接維護?請勿在應用程序運行時出現此錯誤。 – Jack

+0

如果您的應用程序設計爲獨立運行,而不是在Java EE託管環境中,則可以使用c3p0。我從來沒有使用c3p0,所以我不能解釋它的行爲。 –

+0

謝謝,那麼你是什麼意思獨立? – Jack

相關問題