2014-05-15 6 views
0

TOMCAT_HOME/lib/ext에 공유 된 Tomcat 및 서비스 jar에 여러 웹 응용 프로그램이 배포되었습니다. 모든 응용 프로그램은 Spring을 사용하고 있고, 서비스 jar에서는 Spring 3.1 Caching annotation으로 주석 처리 된 bean을 가지고 있습니다. Ehcache 공급자를 사용하고 있습니다. 그리고 모든 웹 애플리케이션에서 하나의 CacheManager를 사용하고 싶습니다. 웹 애플리케이션 레벨에서 스프링 캐시 설정을 정의하면 캐싱은 작동하지만 모든 앱/컨텍스트에 대해 별도의 cacheManager가 작성됩니다. 'Shared'캐쉬 관리 프로그램은 문제가 발생합니다. 왜냐하면 그러한 애플리케이션 중 하나가 전개 취소되면이 공유 cacheManager가 종료되기 때문입니다. 따라서 단일 CacheManager를 내 서비스 jar에서 구성하고 웹 응용 프로그램의 Bean으로 작성된 메소드에 대한 모든 호출에 사용합니다.Spring 캐싱을 사용하여 여러 웹 응용 프로그램에 대한 단일 CacheManager 구성

<context:annotation-config/> 
<context:component-scan base-package="com.mycompany.app" /> 
<context:component-scan base-package="com.mycompany.portal.service" /> 
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cacheManager-ref="ehCacheManager"/> 

<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="ehcache.xml" ></bean> 

<cache:annotation-driven cache-manager="cacheManager"/> 

내가 정의한 부모 애플리케이션 컨텍스트를 beanRefContext.xml로를 통해 : 나의 현재의 시도는 service.jar의 applicationContext.xml에서 다음 confuguration을 정의하는 것입니다

<bean id="service.parent.context" class="org.springframework.context.support.ClassPathXmlApplicationContext"> 
    <constructor-arg> 
     <list> 
      <value>applicationContext.xml</value> 
     </list> 
    </constructor-arg> 
</bean> 

을 그리고 나는 이것을 사용하고 웹 응용 프로그램의 web.xml에서 contextParam을 사용하여 모든 웹 응용 프로그램의 상위 컨텍스트로 컨텍스트를 설정합니다.

결과는이 parentContext가로드되지만 캐싱이 전혀 작동하지 않습니다. 어떻게 해결할 수 있습니까? service.jar에서 parentContext를 정의하는 올바른 방법이 있습니까?

답변

0

나는 그렇게 생각하지 않는다. 루트 클래스 로더를 "해킹"하여 여러 응용 프로그램에 대해 단일 캐시를 갖고있는 것처럼 보입니다.

여러 애플리케이션에서 캐시를 공유해야하는 경우 해당 유스 케이스를 지원하는 캐시 관리자를 사용합니다. 즉, 각 애플리케이션에서 도달 할 수있는 서비스를 제공합니다.