복붙노트

[SPRING] CacheProvider의 예외 NoClassDefFoundError

SPRING

CacheProvider의 예외 NoClassDefFoundError

나는 Spring과 Hibernate에서 새로운 것이므로 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>

CacheProvider를로드하려고하는 이유를 알아내는 데 도움이됩니다. 왜냐하면 CacheProvider에 대한 설정이 context.xml에 없으며 어떤 Jar 파일을 프로젝트에 추가해야하는지 알 수 없기 때문입니다. 감사!

해결법

  1. ==============================

    1.AnnotationSessionFactoryBean을 org.springframework.orm.hibernate4.LocalSessionFactoryBean (Hibernate 4)로 변경하면 잘 될 것이다. AnnotationSessionFactoryBean은 이제 클래스 경로 검색과 마찬가지로 LocalSessionFactoryBean으로 대체되었습니다.

    AnnotationSessionFactoryBean을 org.springframework.orm.hibernate4.LocalSessionFactoryBean (Hibernate 4)로 변경하면 잘 될 것이다. AnnotationSessionFactoryBean은 이제 클래스 경로 검색과 마찬가지로 LocalSessionFactoryBean으로 대체되었습니다.

  2. ==============================

    2.이것은 Hibernate에 대한 Spring 지원과 호환되지 않는 Hibernate 4에서 소개 된 변경들 때문일 수있다. 이 문제는 최대 절전 모드 4를 지원하기 위해 별도의 패키지를 추가하는 것에 대해 이야기합니다.이를 위해 봄 3.1이 필요합니다. 다른 옵션은 4에서 소개 된 특정 기능이 필요하지 않은 경우 최대 절전 모드 3을 유지하는 것입니다.

    이것은 Hibernate에 대한 Spring 지원과 호환되지 않는 Hibernate 4에서 소개 된 변경들 때문일 수있다. 이 문제는 최대 절전 모드 4를 지원하기 위해 별도의 패키지를 추가하는 것에 대해 이야기합니다.이를 위해 봄 3.1이 필요합니다. 다른 옵션은 4에서 소개 된 특정 기능이 필요하지 않은 경우 최대 절전 모드 3을 유지하는 것입니다.

  3. ==============================

    3.AnnotationSessionFactoryBean을 hibernate4로 업데이트하는 것이 완벽하게 작동합니다. 또한 transactionManager가 hibernate4를 가리키고 있는지 확인하십시오.

    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>
    
  4. ==============================

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

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

  5. from https://stackoverflow.com/questions/7528862/exception-noclassdeffounderror-for-cacheprovider by cc-by-sa and MIT license