複数の Web アプリケーションを Tomcat にデプロイし、サービス jar を TOMCAT_HOME/lib/ext で共有しています。すべてのアプリケーションは Spring を使用しており、サービス jar には、Spring 3.1 キャッシング アノテーション で注釈が付けられた Bean があります。Ehcache プロバイダーを使用しています。そして、すべての Web アプリケーションで単一の CacheManager を使用したいと考えています。Web アプリケーション レベルでスプリング キャッシュ構成を定義すると、キャッシュは機能しますが、アプリ/コンテキストごとに個別の cacheManager が作成されます。これらのアプリケーションの 1 つがアンデプロイされると、この共有キャッシュ マネージャーがシャットダウンされるため、「共有」キャッシュ マネージャーが問題を引き起こしています。したがって、サービス jar で構成され、Web アプリの Bean から行われるメソッドへのすべての呼び出しに使用される単一の CacheManager が必要です。私の現在の試みは、service.jar の applicationContext.xml で次の構成を定義することです。
<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 を介して親アプリケーション コンテキストを定義しました。
<bean id="service.parent.context" class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
<list>
<value>applicationContext.xml</value>
</list>
</constructor-arg>
</bean>
そして、このコンテキストをすべての Web アプリの親コンテキストとして使用し、Web アプリの web.xml で次の contextParam を使用しています。
<context-param>
<param-name>parentContextKey</param-name>
<param-value>service.parent.context</param-value>
</context-param>
その結果、このparentContextはロードされますが、キャッシュはまったく機能しません。これを解決するにはどうすればよいですか? service.jar での parentContext の定義は正しいですか?