SpringアプリケーションでSpringAOPを使用したい。のAOPプロキシを作成しているときにnet.sf.ehcache.CacheManager
、Springコンテキストの初期化は次の例外を除いて失敗します。
nested exception is org.springframework.aop.framework.AopConfigException: Could not
generate CGLIB subclass of class [class net.sf.ehcache.CacheManager]: Common causes of
this problem include using a final class or a non-visible class; nested exception is
net.sf.cglib.core.CodeGenerationException: net.sf.ehcache.CacheException-->Another
unnamed CacheManager already exists in the same VM. Please provide unique names for
each CacheManager in the config or do one of following:
1. Use one of the CacheManager.create() static factory methods to reuse same
CacheManager with same name or create one if necessary
2. Shutdown the earlier cacheManager before creating new one with same name.
The source of the existing CacheManager is: InputStreamConfigurationSource
[stream=java.io.ByteArrayInputStream@955b34]
この問題についての私の理解は次のとおりです-SpringはのAOPプロキシを作成しようとしていますnet.sf.ehcache.CacheManager
が、これは初めて成功し、CacheManagerにデフォルトの名前を付けます__DEFAULT__
(これは、デバッグステートメントをehcacheコードに追加し、ソースごとにビルドして、私の応用)。'abcCacheManager'や'xyzCacheManager'(タイプEhCacheManagerFactoryBean)のような複数のキャッシュマネージャーがある場合、Springは複数net.sf.ehcache.CacheManager
のsに遭遇し、それらすべてのプロキシオブジェクト(のようなものnet.sf.ehcache.CacheManager$$EnhancerByCGLIB$$b18c5958
)を作成しようとしますが、EhCache>=2.5バージョンでは同じVMの下に同じ名前のキャッシュを複数持つことはできません。
私はEhCache2.5.1を使用していますが、この目的のためだけに2.4に戻ることは避けたいと思います。これが本当に問題なのか、どうすればこの問題を克服できるのかわかりません。
注:これが役立つかどうかは確認してください。ただし、デバッグステートメントから、CacheManager
no-argコンストラクターはspring / CGLIBプロキシジェネレーターによってのみ呼び出され、xyzCacheManager
引数として構成を渡すことによって呼び出されることにも気づきました。