0

複数の 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 の定義は正しいですか?

4

1 に答える 1

0

私はそうは思わない。ルート クラスローダを「ハッキング」して、複数のアプリケーションに単一のキャッシュを持たせようとしているようです。

複数のアプリケーション間でキャッシュを共有する必要がある場合は、そのユース ケースをサポートする (つまり、各アプリケーションからアクセスできるサービスを提供する) キャッシュ マネージャーを使用します。

于 2014-05-31T05:54:04.407 に答える