Spring-Hibernate 应用程序 : Illegal access: this web application instance has been stopped already

标签 spring hibernate tomcat7 connection-pooling

我正在以正确的方式处理连接。
1. 我在我的应用程序中使用“hibernate ”连接池。每当我从池中获得连接时,我都会在完成事务后返回池。
2. 我已监控数据库以检查连接。我将“空闲连接”时间设置为 60 秒。我发现没有连接对象运行超过 60 秒。

我仍然经常收到此错误。我的网络应用程序正在停止。我必须每天重新启动一次tomcat。但是,我正在寻找一个无需重新启动tomcat的永久解决方案。
任何人都可以解释根本原因吗?这样我就可以解决这个问题。

错误日志:

INFO: Illegal access: this web application instance has been stopped already.  Could not load com.mchange.v2.c3p0.ComboPooledDataSourceBeanInfo.  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:1587)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    ...
    ...
    ...
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:679)

我的 hibernate-contect.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p" 
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.1.xsd
            ">

    <context:property-placeholder location="/WEB-INF/spring.properties" />

    <!-- Enable annotation style of managing transactions -->
    <tx:annotation-driven transaction-manager="transactionManager" />   

    <!-- Declare the Hibernate SessionFactory for retrieving Hibernate sessions -->
    <!-- See http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/orm/hibernate3/annotation/AnnotationSessionFactoryBean.html -->                           
    <!-- See http://docs.jboss.org/hibernate/stable/core/api/index.html?org/hibernate/SessionFactory.html -->
    <!-- See http://docs.jboss.org/hibernate/stable/core/api/index.html?org/hibernate/Session.html -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
                 p:dataSource-ref="dataSource"
                 p:configLocation="${hibernate.config}"
                 p:packagesToScan="com.turborep.turbotracker"/>

    <!-- Declare a datasource that has pooling capabilities-->   
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
                destroy-method="close"
                p:driverClass="${app.jdbc.driverClassName}"
                p:jdbcUrl="${app.jdbc.url}"
                p:user="${app.jdbc.username}"
                p:password="${app.jdbc.password}"
                p:acquireIncrement="5"
                p:idleConnectionTestPeriod="60"
                p:maxPoolSize="100"
                p:maxStatements="50"
                p:minPoolSize="0" />

    <!-- Declare a transaction manager-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
                p:sessionFactory-ref="sessionFactory" />

</beans>

编辑1:
我今天又犯了一个错误。这是日志:

[ERROR] [ajp-bio-8009-exec-4 08:27:13] (JDBCExceptionReporter.java:logExceptions:234) Connections could not be acquired from the underlying database!
[ERROR] [ajp-bio-8009-exec-4 08:27:13] (JDBCExceptionReporter.java:logExceptions:234) Connections could not be acquired from the underlying database!
[ERROR] [ajp-bio-8009-exec-4 08:27:13] (JobServiceImpl.java:getRxmasterID:4399) Cannot open connection
org.hibernate.exception.GenericJDBCException: Cannot open connection
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
    ...
    ...
    ... 
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
    ... 50 more

我如何使用连接的示例代码:

@Resource(name="sessionFactory")
private SessionFactory itsSessionFactory;

@Override
public List<Userloginclone> getAllUserList() {
    itsLogger.debug("Retrieving all user list");
    Session aSession = null;
    List<Userloginclone> aQueryList = null;
    try {
        aSession = itsSessionFactory.openSession();
        Query aQuery = aSession.createQuery("FROM  Userloginclone");
        aQueryList = aQuery.list();
    } catch (Exception e) {
        itsLogger.error(e.getMessage(), e);
    } finally {
        aSession.close();
    }
    return  aQueryList;
}

如果我做错了什么,请纠正我。

最佳答案

您面临的问题与数据库连接无关。

我猜你重启tomcat并且不重新部署应用程序时不会遇到这个问题,对吧?

它的原因是在tomcat中重新部署应用程序。每次重新部署应用程序时,都会创建一个 Web 应用程序的新实例并停止旧实例。以前的应用程序可能在某处加载了旧类,或者应用程序未正确取消部署。

你在 tomcat/lib 中有一些 jar 吗? 你能展示 JobQuoteFormController 和 JobServiceImpl 类吗?

关于Spring-Hibernate 应用程序 : Illegal access: this web application instance has been stopped already,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15154652/

相关文章:

Spring @Autowired 在测试中的行为与组件不同

java - Spring Boot 1.4 测试 : Configuration error: found multiple declarations of @BootstrapWith

java - JSESSIONID 的值在 session 失效时不会更改

performance - 在 Linux 机器上关闭 Tomcat 后内存未释放

带 tomcat 的 Apache Web 服务器

java - new ClassPathXmlApplicationContext() 创建新的 bean 集

java - 使用 Spring JDBCTemplate 更新结果集

Java Hibernate 异常 MySQLSyntaxErrorException : You have an error in your SQL syntax

java - System.out.println 在客户端不起作用

java - 如何根据 NOT 条件加入 2 个实体