본문 바로가기

Development/Web & Server

[Hibernate] Hibernate4 와 EHCache 연동하기~!!

원래 Ehcache와 Hibernate를 따로 쓰고 있는데... 이제서야 따로 쓰지않고 알아서 연동하는게 있다는걸 알았다~!!


1. pom.xml

  <dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-ehcache</artifactId>

<version>4.2.8.Final</version>

</dependency>



2. hibernate Setting 바꾸기!!!! (아주 중요!!)


Hibernate 3.3 and higher

For instance creation:

<property name="hibernate.cache.region.factory_class">
         net.sf.ehcache.hibernate.EhCacheRegionFactory</property>

To force Hibernate to use a singleton of Ehcache CacheManager:

<property name="hibernate.cache.region.factory_class">
         net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory</property>

Hibernate 4.x

For Hibernate 4, use org.hibernate.cache.ehcache.EhCacheRegionFactory instead ofnet.sf.ehcache.hibernate.EhCacheRegionFactory andorg.hibernate.cache.ehcache.SingletonEhCacheRegionFactory instead ofnet.sf.ehcache.hibernate.SingletonEhCacheRegionFactory.


2.1 설정에서 반드시 이것을 확인하자!! 


하이버네이트 3 : net.sf.ehcache.hibernate.EhCacheRegionFactory

하이버네이트 4 : org.hibernate.cache.ehcache.EhCacheRegionFactory


2.2 아래와 같은 에러가 발생한다면 무조건!! 위의 사항 확인할것!!!!

Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.TimestampsRegion

at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

at java.lang.ClassLoader.loadClass(ClassLoader.java:306)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

... 67 more


2.3 본인은 하이버네이트4 버전이라서 아래와 같이 설정을 추가하였다.

   <prop key="hibernate.cache.use_second_level_cache">true</prop>

                <prop key="hibernate.cache.use_query_cache">true</prop>

                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>


3. 그리고 모델에 적용하기~! 각 모델에 아래와 같이 @Cache 애노테이션을 사용하면 편리하게 적용이 완료~!


@Entity

@Table (name = "Action")

@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)

public class Action {


자세한 사용방법은 여기서~!!