运行应用程序时抛出线程“Timer-0”中的异常

时间:2014-05-19 01:50:23

标签: java hibernate struts2 spring-security glassfish

当我运行我的应用程序时,它可以工作但在控制台中抛出异常如下: 每次显示不同的计时器编号。我使用的所有技术都标记了问题。如果您需要我分享我的代码的任何其他部分,请告诉我。

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

}

3 个答案:

答案 0 :(得分:3)

这是c3p0连接池库,在服务器完成启动过程之前尝试进行连接维护。

在全栈Java EE服务器(如Glassfish,WildFly / JBossAS,WebLogic等)上使用第三方连接池机制是多余的。

解决方案是

  1. 从您的应用程序中删除所有与c3p0相关的jar(以及您可能添加到应用程序服务器中的任何jar)
  2. 使用根据您的hibernate配置的连接详细信息在glassfish中定义数据源
  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>
    
  4. 请注意,Tomcat支持使用DataSources,并且还拥有自己的连接池实现。

答案 1 :(得分:0)

你使用HibernateUtil.class以外的任何其他静态初始化块吗?并且用于测试更改HibernateUtil中的所有异常并捕获Throwable。

似乎在初始化Web应用程序和所有静态初始化块时发生了错误。

答案 2 :(得分:0)

从后台任务调用异常,后者的任务是清理资源,并在服务器完全初始化之前启动。

这不是您的代码导致的问题,看起来Glassfish作业没有遵循正确的执行顺序。

我建议您在Glassfish issue tracker上提交问题报告并提供给他们:

  • app server version
  • 操作系统版本
  • app config files