Я хочу использовать Spring AOP в своем весеннем приложении. При создании прокси-сервера 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, у нас не может быть более одного кэша с одинаковым именем на одной виртуальной машине.
Я использую EhCache 2.5.1 и не хочу возвращаться к 2.4 только для этой цели. Я не уверен, действительно ли это проблема, как я могу решить эту проблему.
Примечание. Обратите внимание, поможет ли это, но я также заметил из операторов отладки, что конструктор CacheManager
no-arg вызывается только генератором прокси-сервера spring / CGLIB, а xyzCacheManager
вызывает его, передавая конфигурацию в качестве аргумента.
CacheManager
? - person jeha   schedule 10.09.2012