gpt4 book ai didi

java - 运行应用程序时线程 "Timer-0"中抛出异常

转载 作者:行者123 更新时间:2023-12-01 22:58:17 25 4
gpt4 key购买 nike

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

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

}

最佳答案

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

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

解决办法是

  1. 从您的应用程序中删除所有与 c3p0 相关的 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>

请注意,Tomcat 支持使用数据源,并且也有自己的连接池实现。

关于java - 运行应用程序时线程 "Timer-0"中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23728688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com