CacheProvider için Özel Durum NoClassDefFoundError


93

İlkbaharda biraz yeniyim ve hazırda bekletme modundayım, bu yüzden Tomcat'i başlatırken Spring 3 + hibernate 4'e dayalı bazı basit web uygulamaları uygulamaya çalışıyorum.

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)

Bu sınıfın hazırda bekletme 3 için hazırda bekletme çekirdeğinde olduğunu buldum, ancak hazırda bekletme 4'te bulamadım.

Context.xml dosyamın kalıcılık bölümü:

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

Lütfen CacheProvider'ı neden yüklemeye çalıştığını anlamama yardım et çünkü bunun için context.xml'de herhangi bir ayarım yok ve projeme hangi jar'i eklemem gerekiyor. Teşekkürler!


hazırda bekletme yapılandırma dosyasını gönderebilir misin?
Cornel Creanga

Bende yok. Belki de bu yanlış anlaşılmadır ve eklemem gerek ki "İlkbahar İş Başında 3" adlı kitabın "5.4 Hazırda Bekletmeyi Bahar ile Bütünleştirmek" bölümünde anlatılanları aynen yaptım. Bunu yaparken, hazırda bekletme modunda bulduğum eksik sınıflarla ilgili bazı problemlerim vardı, bu yüzden projeme hibernate 4'ü ekledim. Ama enouph değildi
Fedor Skrynnikov

1
Hazırda bekletme 4'ün bu sınıfa sahip olduğundan emin misin? 3.6.x hazırda bekletmeyi denerim
Bozho

Hayır. Sürüm 4'te bulamadım. Aslında buldum ama ehcache'deki başka bir pakette. Ama soru tomcat neden yüklemeye çalışıyor? Ve gerçekten gerekli mi?
Fedor Skrynnikov

Bildiğimden kaldırıldı
Cornel Creanga

Yanıtlar:


184

AnnotationSessionFactoryBean'inizi org.springframework.orm.hibernate4.LocalSessionFactoryBean(Hazırda Bekleme 4) olarak değiştirin ve gitmekte fayda var. AnnotationSessionFactoryBean, şu anda sınıf yolu taraması yaptığı için LocalSessionFactoryBean ile değiştirildi.


Başka olası fikir var mı? Bu bana hiçbir şey yapmıyor gibi görünüyor Özelliklerin değiştirilmesi gerekiyor mu?
zod

3
Paketi hibernate3'ten hibernate4'e değiştirdiğinizden emin olun - her iki pakette de LocalSessionFactoryBean mevcuttur. Spring ve Hibernate'in hangi sürümünü kullanıyorsunuz?
Aaron Douglas

11

Bunun nedeni, Hazırda Bekletme için Spring desteğiyle uyumlu olmayan Hibernate 4'te yapılan değişiklikler olabilir. Bu sorun, hazırda bekletme 4'ü desteklemek için ayrı bir paket eklemekten bahsediyor. Bunun için yay 3.1'e ihtiyacınız olacak. Diğer seçenek, 4'te tanıtılan herhangi bir özelliğe ihtiyacınız yoksa, 3'ü hazırda bekletmeye devam etmektir.


Evet. Hiberante 4'ten 3.6.7 sürümüne geçtim ve her şey işe yaradı. Teşekkürler!
Fedor Skrynnikov

1
+1, hem senin hem de Aaron'un tavsiyesine göre çalıştırdı. (Daha doğrusu, bunu aştı ve diğer Hibernate 4 problemleriyle karşılaştı.: P) Bu arada, Spring 3.1 artık RC'de değil (Aralık 2011'deki ilk GA sürümü).
Jonik

thx @gkamal. Hazırda bekletmek için aşağı sürüm oluşturma 3 benim için çalıştı. Çözüm: I-EntityManager hazırda bekletme ve çekirdekli hazırda bekleme kullanılan, hem sürümünü görmek 3.6.10.Final mvnrepository.com/search.html?query=hibernate-entitymanager
Adrien Be

8

AnnotationSessionFactoryBean'i hibernate4'e güncellemek mükemmel çalışıyor. Ayrıca, transactionManager'ınızın da hibernate4'ü gösterdiğinden emin olun,

<bean id="sessionFactory"
 class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
 <property name="dataSource" ref="dataSource"></property>
 <property name="packagesToScan" value="PACKAGE_NAME"></property>
 <property name="hibernateProperties">
    <props>
        <prop key="dialect">org.hibernate.dialect.MySQLDialect</prop>
    </props>
 </property>    
</bean>

<bean id="transactionManager" 
  class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

0

Aynı hataya neden olacak gerçekten basit bir sorun, basitçe pom'daki hazırda bekletme sürümü (4.something) ile bahar yapılandırmasında belirtilen sürüm arasında bir uyumsuzluk olmasıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.