Ich bin ein bisschen neu in Spring und im Ruhezustand, daher versuche ich, eine einfache Webanwendung zu implementieren, die auf Spring 3 + Hibernate 4 basiert, während ich Tomcat starte. Ich habe diese Ausnahme:
java.lang.NoClassDefFoundError: org/hibernate/cache/CacheProvider
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.getDeclaredMethods(Class.java:1791)
...
Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
Ich habe festgestellt, dass sich diese Klasse im Ruhezustand-Kern für Ruhezustand 3 befindet, aber ich habe sie im Ruhezustand 4 nicht gefunden.
Der Teil meiner context.xml für die Persistenz:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:oracle:thin:@IP_Address:SID"/>
<property name="username" value="xxx"/>
<property name="password" value="xxx"/>
<property name="initialSize" value="5"/>
<property name="maxActive" value="20"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.huawei.vms.user"/>
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.Oracle10gDialect</prop>
</props>
</property>
</bean>
Bitte helfen Sie mir herauszufinden, warum CacheProvider geladen werden soll, da ich in context.xml keine Einstellungen dafür habe und welche JAR ich in meinem Projekt hinzufügen muss. Vielen Dank!
Antworten:
Ändern Sie Ihre AnnotationSessionFactoryBean in
org.springframework.orm.hibernate4.LocalSessionFactoryBean
(Hibernate 4) und Sie können loslegen. Die AnnotationSessionFactoryBean wurde durch die LocalSessionFactoryBean ersetzt, da jetzt das Scannen von Klassenpfaden durchgeführt wird.quelle
Dies kann auf Änderungen in Hibernate 4 zurückzuführen sein, die nicht mit der Spring-Unterstützung für Hibernate kompatibel sind. In dieser Ausgabe wird über das Hinzufügen eines separaten Pakets zur Unterstützung von Ruhezustand 4 gesprochen. Dazu benötigen Sie Spring 3.1. Die andere Möglichkeit besteht darin, sich an den Ruhezustand 3 zu halten, wenn Sie keine in 4 eingeführte spezielle Funktion benötigen.
quelle
Das Aktualisieren von AnnotationSessionFactoryBean auf hibernate4 funktioniert einwandfrei. Stellen Sie außerdem sicher, dass Ihr transactionManager auch auf hibernate4 zeigt.
quelle
Ein wirklich einfaches Problem, das den gleichen Fehler verursacht, besteht einfach darin, dass die Version im Ruhezustand im POM (4.something) nicht mit der in der Spring-Konfiguration angegebenen Version übereinstimmt.
quelle