CacheProvider에 대한 예외 NoClassDefFoundError


93

나는 Spring 3 + hibernate 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에서는 찾지 못했습니다.

지속성을위한 내 context.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>

context.xml에 대한 설정이없고 프로젝트에 추가해야하는 jar가 없기 때문에 CacheProvider를로드하려는 이유를 알아 내도록 도와주세요. 감사!


최대 절전 설정 파일을 게시 할 수 있습니까?
Cornel Creanga 2011 년

나는 그것을 가지고 있지 않다. 아마도 오해 일 수도 있고, "Spring in action 3"장 "5.4 Integrating Hibernate with Spring"에 설명 된대로 정확하게 수행했다고 덧붙여 야합니다. 이 작업을 수행하는 동안 최대 절전 모드에서 찾은 결석 클래스에 문제가 있었기 때문에 프로젝트에 최대 절전 모드 4를 추가했습니다. 그러나 그것은 enouph가 아니었다
Fedor Skrynnikov 2011 년

1
최대 절전 모드 4에 해당 클래스가 있습니까? 나는 최대 절전 모드 3.6.x를 시도 할 것
Bozho

아니요. 버전 4에서는 찾지 못했습니다. 사실, ehcache의 다른 패키지에서 찾았습니다. 그러나 질문은 왜 바람둥이가 그것을로드하려고 하는가입니다. 그리고 실제로 필요합니까?
Fedor Skrynnikov 2011 년

그것은 내가 아는 것과되지 않는 것
코르 넬 Creanga을

답변:


184

AnnotationSessionFactoryBean을 org.springframework.orm.hibernate4.LocalSessionFactoryBean(Hibernate 4) 로 변경 하면 갈 수 있습니다. AnnotationSessionFactoryBean은 이제 클래스 경로 스캔을 수행하므로 LocalSessionFactoryBean으로 대체되었습니다.


다른 가능한 아이디어가 있습니까? 이것은 나를 위해 아무것도하지 않는 것 같습니다. 속성을 변경해야합니까?
zod

3
패키지를 hibernate3에서 hibernate4로 변경했는지 확인하십시오. LocalSessionFactoryBean이 두 패키지에 모두 존재합니다. 어떤 버전의 Spring과 Hibernate를 사용하고 있습니까?
Aaron Douglas

11

이는 Hibernate에 대한 Spring 지원과 호환되지 않는 Hibernate 4에 도입 된 변경 사항 때문일 수 있습니다. 이 문제 는 최대 절전 모드 4를 지원하기 위해 별도의 패키지를 추가하는 방법에 대해 설명합니다.이를 위해 스프링 3.1이 필요합니다. 다른 옵션은 4에 도입 된 특정 기능이 필요하지 않은 경우 최대 절전 모드 3을 고수하는 것입니다.


예. 나는 hiberante 4에서 3.6.7 버전으로 다운 그레이드했고 모든 것이 작동하게되었습니다. 감사!
Fedor Skrynnikov 2011 년

1
+1, 당신과 Aaron의 조언 과 함께 작동합니다 . (또는 더 정확하게는이 문제를지나 다른 Hibernate 4 문제에 부딪 혔습니다. : P) 그런데 Spring 3.1은 더 이상 RC에 없습니다 (2011 년 12 월 첫 GA 릴리스).
Jonik 2011

thx @gkamal. 최대 절전 모드 3으로의 다운 버전이 저에게 효과적이었습니다. 해결책 : 나는 hibernate-entitymanager와 hibernate-core를 사용했고, 둘 다 버전 3.6.10.Final 참조 mvnrepository.com/search.html?query=hibernate-entitymanager
Adrien Be

8

AnnotationSessionFactoryBean을 hibernate4로 업데이트하면 완벽하게 작동합니다. 또한 transactionManager가 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

동일한 오류를 일으키는 정말 간단한 문제는 단순히 pom (4.something)의 최대 절전 모드 버전과 spring config에 지정된 버전이 일치하지 않는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.