Добрый день.
Подскажите как решить проблему с кэшем. В приложение используется 2 подключения с возможностью кэширования одинаковых сущностей, но когда со второго соединения выполняется запрос вылетает ошибка. Как этого избежать?
Hibernate:34] > org.hibernate.cache.CacheException: 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: DefaultConfigurationSource [ ehcache.xml or ehcache-failsafe.xml ]
Здравствуйте, Аноним, Вы писали:
А>Подскажите как решить проблему с кэшем. В приложение используется 2 подключения с возможностью кэширования одинаковых сущностей, но когда со второго соединения выполняется запрос вылетает ошибка. Как этого избежать?
Приведи ehcache.xml и конфиг или код, где создается кэш-менеджер.
У тебя зарегистрировано более одного кэш-менеджера. А он нужен только один в абсолютном большинстве случаев. Возможно неправильно выставлен scope, или руками создается.
Re[2]: Hibernate cache 2 подключения
От:
Аноним
Дата:
18.05.12 17:53
Оценка:
Здравствуйте, Donz, Вы писали:
D>Здравствуйте, Аноним, Вы писали:
А>>Подскажите как решить проблему с кэшем. В приложение используется 2 подключения с возможностью кэширования одинаковых сущностей, но когда со второго соединения выполняется запрос вылетает ошибка. Как этого избежать?
D>Приведи ehcache.xml и конфиг или код, где создается кэш-менеджер. D>У тебя зарегистрировано более одного кэш-менеджера. А он нужен только один в абсолютном большинстве случаев. Возможно неправильно выставлен scope, или руками создается.
ehcache.xml по умолчанию стандартный, а вот кэш-менеджера менеджер не используется, можно немного об етом по потребной. Я просто не так давно с кэшем стал работать.
Здравствуйте, Аноним, Вы писали:
D>>Приведи ehcache.xml и конфиг или код, где создается кэш-менеджер. D>>У тебя зарегистрировано более одного кэш-менеджера. А он нужен только один в абсолютном большинстве случаев. Возможно неправильно выставлен scope, или руками создается. А>ehcache.xml по умолчанию стандартный, а вот кэш-менеджера менеджер не используется, можно немного об етом по потребной. Я просто не так давно с кэшем стал работать.
Приведи конфиг хибернейта. И ehcache.xml все-таки тоже покажи, мало ли что.
Кэш-менеджер — менеджер кэшей, соответственно Все созданные тобой кэши должны кем-то управляться. Что и как в хибернейте по умолчанию, я не помню. Но если ты используешь ehcache.xml, значит у тебя уже не по умолчанию, так как по дефолту никаких дополнительных файлов настроек не надо.
Подозреваю, что создав файл ehcache.xml ты неявно включил сам EhCache, и он создал кэш-менеджер с именем по умолчанию. И хибернейт тоже, видимо, создал свой кэш-менеджер по умолчанию. Из-за этого и конфликт. Что будет, если удалить ehcache.xml?
Re[4]: Hibernate cache 2 подключения
От:
Аноним
Дата:
21.05.12 09:42
Оценка:
Здравствуйте, Donz, Вы писали:
D>Здравствуйте, Аноним, Вы писали:
D>>>Приведи ehcache.xml и конфиг или код, где создается кэш-менеджер. D>>>У тебя зарегистрировано более одного кэш-менеджера. А он нужен только один в абсолютном большинстве случаев. Возможно неправильно выставлен scope, или руками создается. А>>ehcache.xml по умолчанию стандартный, а вот кэш-менеджера менеджер не используется, можно немного об етом по потребной. Я просто не так давно с кэшем стал работать.
D>Приведи конфиг хибернейта. И ehcache.xml все-таки тоже покажи, мало ли что. D>Кэш-менеджер — менеджер кэшей, соответственно Все созданные тобой кэши должны кем-то управляться. Что и как в хибернейте по умолчанию, я не помню. Но если ты используешь ehcache.xml, значит у тебя уже не по умолчанию, так как по дефолту никаких дополнительных файлов настроек не надо. D>Подозреваю, что создав файл ehcache.xml ты неявно включил сам EhCache, и он создал кэш-менеджер с именем по умолчанию. И хибернейт тоже, видимо, создал свой кэш-менеджер по умолчанию. Из-за этого и конфликт. Что будет, если удалить ehcache.xml?
Возможно не много не правильно описал проблему. В общем на есть сборка ear в ней 2 war разные приложение, которые имеют свои файлы конфигурации для hibernate, но в етих конфигурациях есть общие сущности, соответственно в war создаются свои сессии. В первом приложение все создается нормально, а когда во втором создается сессия, возникает данная проблема, получается в первом приложение создается свой кэш и во втором, но из за общих сущностей не выходит. Может как то можно для обоих приложение создать общий кэш?
Здравствуйте, Аноним, Вы писали:
А>Возможно не много не правильно описал проблему. В общем на есть сборка ear в ней 2 war разные приложение, которые имеют свои файлы конфигурации для hibernate, но в етих конфигурациях есть общие сущности, соответственно в war создаются свои сессии. В первом приложение все создается нормально, а когда во втором создается сессия, возникает данная проблема, получается в первом приложение создается свой кэш и во втором, но из за общих сущностей не выходит. Может как то можно для обоих приложение создать общий кэш?
Каждая копия хибернейта пытается создать свой кэш-менеджер с дефолтным названием, вот и конфликт. Видимо, оба контекста приложений сливаются в один общий. Надо или дать явное название какому-либо кэш-менеджеру (а лучше обоим), или инстанцировать его (точнее sessionFactory) один раз. Если оба приложения работают всегда вместе, то стоит выделить из них главное, которое и проинициализирует sessionFactory, а второе будет его использовать. Либо сделать оба приложения полностью независимыми.
Здравствуйте, Donz, Вы писали:
А>Возможно не много не правильно описал проблему. В общем на есть сборка ear в ней 2 war разные приложение, которые имеют свои файлы конфигурации для hibernate, но в етих конфигурациях есть общие сущности, соответственно в war создаются свои сессии. В первом приложение все создается нормально, а когда во втором создается сессия, возникает данная проблема, получается в первом приложение создается свой кэш и во втором, но из за общих сущностей не выходит. Может как то можно для обоих приложение создать общий кэш?
Это то что вы называете "2 подключения". При чем здесь "подключения", интересно?
D>Каждая копия хибернейта пытается создать свой кэш-менеджер с дефолтным названием, вот и конфликт. Видимо, оба контекста приложений сливаются в один общий. Надо или дать явное название какому-либо кэш-менеджеру (а лучше обоим), или инстанцировать его (точнее sessionFactory) один раз. Если оба приложения работают всегда вместе, то стоит выделить из них главное, которое и проинициализирует sessionFactory, а второе будет его использовать. Либо сделать оба приложения полностью независимыми.
Можно через ejb-jar вынести на уровень ear, SessionFactory хибера. Можно вообще через Persistence Unit конфиг попробовать. На уровне ear его задеплоить.