当我运行我的应用程序时,它可以工作但在控制台中抛出异常如下: 每次显示不同的计时器编号。我使用的所有技术都标记了问题。如果您需要我分享我的代码的任何其他部分,请告诉我。
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 :(得分:3)
这是c3p0连接池库,在服务器完成启动过程之前尝试进行连接维护。
在全栈Java EE服务器(如Glassfish,WildFly / JBossAS,WebLogic等)上使用第三方连接池机制是多余的。
解决方案是
将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支持使用DataSources,并且还拥有自己的连接池实现。
答案 1 :(得分:0)
你使用HibernateUtil.class以外的任何其他静态初始化块吗?并且用于测试更改HibernateUtil中的所有异常并捕获Throwable。
似乎在初始化Web应用程序和所有静态初始化块时发生了错误。
答案 2 :(得分:0)
从后台任务调用异常,后者的任务是清理资源,并在服务器完全初始化之前启动。
这不是您的代码导致的问题,看起来Glassfish作业没有遵循正确的执行顺序。
我建议您在Glassfish issue tracker上提交问题报告并提供给他们: