Pengecualian NoClassDefFoundError untuk CacheProvider


93

Saya agak baru di Spring dan hibernate jadi saya mencoba menerapkan beberapa aplikasi web sederhana berdasarkan Spring 3 + hibernate 4 sementara saya memulai tomcat, saya memiliki pengecualian ini:

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)

Saya telah menemukan bahwa kelas ini dalam hibernate-core untuk hibernate 3 tetapi saya tidak menemukannya di hibernate 4.

Bagian dari context.xml saya untuk ketekunan:

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

Tolong bantu saya untuk mencari tahu mengapa itu mencoba memuat CacheProvider karena saya tidak memiliki pengaturan untuk itu di context.xml dan jar mana yang harus saya tambahkan dalam proyek saya. Terima kasih!


dapatkah Anda memposting file konfigurasi hibernasi?
Cornel Creanga

Saya tidak memilikinya. Mungkin ini kesalahpahaman dan saya harus menambahkan bahwa saya melakukan persis seperti yang dijelaskan dalam buku "Spring in action 3" bab "5.4 Mengintegrasikan Hibernasi dengan Musim Semi". Ketika saya melakukan itu, saya memiliki beberapa masalah dengan kelas absen yang saya temukan di hibernate, jadi saya menambahkan hibernate 4 ke dalam proyek saya. Tapi itu bukan enouph
Fedor Skrynnikov

1
apakah Anda yakin hibernate 4 memiliki kelas itu? Saya akan mencoba hibernate 3.6.x
Bozho

Tidak. Saya belum menemukannya di versi 4. Sebenarnya, saya sudah menemukannya tetapi di paket lain di ehcache. Tapi pertanyaannya adalah mengapa tomcat mencoba memuatnya? Dan apakah itu benar-benar dibutuhkan?
Fedor Skrynnikov

Ini tidak berlaku lagi dari apa yang saya tahu
Cornel Creanga

Jawaban:


184

Ubah AnnotationSessionFactoryBean Anda menjadi org.springframework.orm.hibernate4.LocalSessionFactoryBean(Hibernate 4) dan Anda akan baik-baik saja. AnnotationSessionFactoryBean diganti dengan LocalSessionFactoryBean seperti yang dilakukan pemindaian jalur kelas sekarang.


Ada ide lain yang mungkin? Ini sepertinya tidak melakukan apa-apa untuk saya. Apakah properti perlu diubah?
zod

3
Pastikan Anda telah mengubah paket dari hibernate3 ke hibernate4 - LocalSessionFactoryBean ada di kedua paket. Versi Spring dan Hibernate apa yang Anda gunakan?
Aaron Douglas

11

Ini mungkin karena perubahan yang diperkenalkan dalam Hibernate 4 yang tidak kompatibel dengan dukungan Spring untuk Hibernate. Masalah ini berbicara tentang menambahkan paket terpisah untuk mendukung hibernate 4. Anda memerlukan spring 3.1 untuk ini. Opsi lainnya adalah tetap menggunakan hibernasi 3 jika Anda tidak memerlukan fitur khusus apa pun yang diperkenalkan di 4.


Iya. Saya telah menurunkan dari hiberante 4 ke versi 3.6.7 dan semuanya berfungsi. Terima kasih!
Fedor Skrynnikov

1
+1, membuatnya berfungsi dengan saran Anda dan Aaron . (Atau lebih tepatnya, melewati ini dan mengalami masalah Hibernate 4 lainnya.: P) Ngomong-ngomong, Spring 3.1 tidak lagi ada di RC (rilis GA pertama pada Desember 2011).
Jonik

thx @gkamal. Menurunkan versi ke hibernasi 3 berhasil untuk saya. Solusi: Saya menggunakan hibernate-entitymanager dan hibernate-core, keduanya versi 3.6.10. Terakhir lihat mvnrepository.com/search.html?query=hibernate-entitymanager
Adrien Be

8

memperbarui AnnotationSessionFactoryBean ke hibernate4 berfungsi sempurna. Pastikan juga transactionManager Anda juga mengarah ke hibernate4,

<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

Masalah yang sangat sederhana yang akan menyebabkan kesalahan yang sama adalah adanya ketidaksesuaian antara versi hibernate di pom (4.something) dan versi yang ditentukan dalam konfigurasi pegas.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.