CacheProvider के लिए अपवाद NoClassDefFoundError


93

मैं स्प्रिंग और हाइबरनेट में नया हूं, इसलिए मैं स्प्रिंग 3 + हाइबरनेट 4 पर आधारित कुछ सरल वेब एप्लिकेशन को लागू करने की कोशिश कर रहा हूं, जबकि मैं टॉमकैट शुरू करता हूं मेरे पास यह अपवाद है:

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)

मैंने पाया है कि यह वर्ग हाइबरनेट 3 के लिए हाइबरनेट-कोर में था लेकिन मैंने इसे हाइबरनेट 4 में नहीं पाया है।

हठ के लिए मेरे संदर्भ का हिस्सा। xml:

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

कृपया मुझे यह पता लगाने में मदद करें कि यह कैशेप्रॉइडर को लोड करने की कोशिश क्यों कर रहा है क्योंकि मेरे पास संदर्भ के लिए कोई सेटिंग नहीं है। xml और मुझे अपने प्रोजेक्ट में किस जार को जोड़ना है। धन्यवाद!


क्या आप हाइबरनेट विन्यास फाइल को पोस्ट कर सकते हैं?
कॉर्नेल क्रेन्गा

मेरे पास नहीं है। शायद यह गलतफहमी है और मुझे यह जोड़ना होगा कि मैंने किताब "स्प्रिंग इन एक्शन 3" अध्याय "5.4 इंटीग्रेटिंग हाइबरनेट विद स्प्रिंग" में वर्णित किया था। जब मैं कर रहा था कि मुझे अनुपस्थित वर्गों के साथ कुछ समस्याएं थीं जो मुझे हाइबरनेट में मिली थीं, इसलिए मैंने अपनी परियोजना में हाइबरनेट 4 को जोड़ा। लेकिन यह स्पष्ट नहीं था
Fedor Skrynnikov

1
क्या आपको यकीन है कि हाइबरनेट 4 में वह वर्ग है? मैं हाइबरनेट 3.6.x की कोशिश करूँगा
Bozho

नहीं। मैंने इसे संस्करण 4 में नहीं पाया है। वास्तव में, मैंने इसे ढूंढ लिया है, लेकिन एहचे में एक और पैकेज में। लेकिन सवाल यह है कि टॉमकैट इसे लोड करने की कोशिश क्यों करता है? और क्या वास्तव में इसकी जरूरत है?
फेडर स्कर्निकोव

यह मुझे क्या पता है से पदावनत है
कॉर्नेल क्रेन्गा

जवाबों:


184

अपना AnnotationSessionFactoryBean org.springframework.orm.hibernate4.LocalSessionFactoryBean(Hibernate 4) बदलें और आप जाने के लिए अच्छे होंगे। AnnotationSessionFactoryBean को LocalSessionFactoryBean के साथ बदल दिया गया क्योंकि यह अब क्लास पाथ स्कैनिंग करता है।


कोई अन्य संभावित विचार? यह मेरे लिए कुछ भी करने के लिए प्रतीत नहीं होता है। क्या गुणों को बदलने की आवश्यकता है?
राशि

3
सुनिश्चित करें कि आपने पैकेज को हाइबरनेट 3 से हाइबरनेट 4 में बदल दिया है - दोनों संकुल में एक लोकल सेशनफैक्टरीबीन मौजूद है। आप स्प्रिंग और हाइबरनेट के किस संस्करण का उपयोग कर रहे हैं?
एरोन डगलस

11

यह हाइबरनेट 4 में पेश किए गए परिवर्तनों के कारण हो सकता है जो हाइबरनेट के लिए स्प्रिंग समर्थन के साथ संगत नहीं हैं। यह मुद्दा हाइबरनेट का समर्थन करने के लिए अलग पैकेज को जोड़ने के बारे में बात करती है। इसके लिए आपको वसंत 3.1 की आवश्यकता होगी। यदि आप 4 में शुरू की गई किसी विशिष्ट सुविधा की आवश्यकता नहीं है, तो दूसरा विकल्प हाइबरनेट 3 से चिपके रहना है।


हाँ। मैंने hiberante 4 से संस्करण 3.6.7 तक डाउनग्रेड किया है और सब कुछ काम कर गया। धन्यवाद!
Fedor Skrynnikov

1
+1, इसे आपकी और हारून की सलाह दोनों के साथ काम करना चाहिए । (या अधिक सटीक रूप से, यह पिछले हो गया और अन्य हाइबरनेट 4 समस्याओं में चला गया ।: पी) वैसे, स्प्रिंग 3.1 अब आरसी में नहीं है (दिसंबर 2011 में पहली जीए रिलीज़)।
जोनीक

thx @gkamal। डाउन-वर्जनिंग को हाइबरनेट 3 ने मेरे लिए काम किया। समाधान: मैंने हाइबरनेट-एन्ट्रोमैनेजर और हाइबरनेट-कोर का उपयोग किया, दोनों संस्करण ३.६.१०।इनमें mvnrepository.com/search.html?query=hibernate-entitymanager
Adrien Be

8

AnnotationSessionFactoryBean को हाइबरनेट 4 में अद्यतन करना सही काम करता है। यह भी सुनिश्चित करें कि आपका लेनदेन प्रबंधक भी हाइबरनेट 4 को इंगित करता है,

<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

वास्तव में एक साधारण समस्या जो उसी त्रुटि का कारण होगी, वह है बस हाइबरनेट संस्करण के बीच पोम (4.something) और स्प्रिंग कॉन्फिगर में निर्दिष्ट संस्करण के बीच एक बेमेल होना।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.