Spring-Hibernate-Anwendung: Illegal access: this web application instance gestoppt wurde schon
Ich bin Handhabung der verbindungen in geeigneter Weise.
1. Ich bin mit 'Hibernate' Verbindungs-pooling in meiner Anwendung. Immer wenn ich eine Verbindung aus dem pool, bin ich wieder zurück zum pool nach Abschluss der Transaktion.
2. Ich habe überwacht die Datenbank überprüfen Sie die Anschlüsse. Ich habe eine 'Verbindung im Leerlauf" - Zeit auf 60 Sekunden eingestellt. Ich fand keine Verbindung-Objekte werden mit mehr als 60 Sekunden.
Bin ich noch immer diesen Fehler sehr oft. Und meine web-Anwendung wird immer beendet. Ich starten Sie tomcat neu, jeden Tag einmal. Jedoch, ich bin auf der Suche nach einer dauerhaften Lösung ohne Neustart des tomcat.
Kann irgend jemand erklären, die Ursache? damit ich dies beheben können.
Fehler Melden:
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)
Meine 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>
Edit1:
Ich habe einen anderen Fehler heute. Hier ist der log:
[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
Beispiel-code, wie ich die verbindungen:
@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;
}
Bitte korrigieren Sie mich, wenn ich mache irgend etwas falsch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten, werden Sie wahrscheinlich wollen, um die Verwendung von Spring transaction manager und Hibernate ist OpenSessionInViewFilter zu verwalten, Session und transaction management. Mit diesen zwei, die Sie nicht haben, um sorgen über die Verwaltung von verbindungen und greifen kann, eine Sitzung mit itsSessionFactory.getCurrentSession().
Nächste, Sie sollten wahrscheinlich hinzufügen p:testConnectionOnCheckout="true", um Ihre dataSource-bean.
Was passiert mit Ihrer Anwendung ist, dass, sobald eine Verbindung tot ist bleibt er tot. Dies ermöglicht eine tote Verbindung neu gestartet werden.
Das problem, das Sie konfrontiert sind, ist nicht mit einer Datenbank-verbindungen.
Ich denke, Sie nicht vor diesem Problem, wenn Sie starten Sie tomcat neu, und nicht erneut bereitstellen Sie, die app, richtig?
Die Ursache ist die erneute Implementierung der Applikation in tomcat. Jedes mal, wenn Sie erneut bereitstellen Sie, die Anwendung neue Instanz einer web-Anwendung erstellt und das alte ist beendet. Es ist wahrscheinlich eine alte Klasse geladen, die durch Vorherige Anwendung irgendwo oder die Anwendung noch nicht eingesetzt wurde, ist nicht korrekt.
Haben Sie einige jar im tomcat/lib?
Könnten Sie zeigen die JobQuoteFormController und JobServiceImpl Klassen?
1.service tomcat stoppen
2.ps -ef|grep java look der Prozess von java und alle töten
3.Service tomcat starten und dann ist es Arbeit
ps:Sie können log in tomcat/logs/catilina.aus-und localhost-2018....melden Sie