Помните, что net.sf.ehcache.Cache должен находиться в пути к классам (я не уверен, но я думаю, что ehcache-core.jar содержит этот класс), если вы хотите использовать EhCahceProvider.Здесь идет его подпись
@Name("org.jboss.seam.cache.cacheProvider")
@Scope(APPLICATION)
@BypassInterceptors
@Install(value = false, precedence=BUILT_IN, classDependencies="net.sf.ehcache.Cache")
@AutoCreate
public class EhCacheProvider extends CacheProvider<CacheManager> {
Обратите внимание на атрибут classDependencies.Его документация ясна
Указывает, что компонент не должен быть установлен , если только данные определения класса доступны на пути к классам
Так что, если ваш путь к классу содержит net.sf.ehcache.Cache , вам не нужно объявлять
<cache:eh-cache-provider/>
И, поскольку это область действия приложения, выможно получить, кроме @ In-jection, используя
ApplicationContext.getContext().get("cacheProvider");
UPDATE
Прежде всего
- удалитьдекларация.Я сказал вам, почему (см. Выше)
Второй из всех
Хотя я почти уверен, что CacheProvider не может быть нулевым , потому что @В обязательном атрибуте по умолчанию установлено значение true, которое не может быть нулевым.Внутри вашего бизнес-метода убедитесь, что ваш CacheProvider не равен нулю
asache cacheProvider! = Пусто
Треть всех
- Думаю, вы не нужно вызывать метод cacheProvider.instance () .Если его область по умолчанию - Приложение. Почему вы хотите получить другой CacheProvider ??? Это не имеет смысла.
Четвертый из всех
- Это не такисключение .Это просто предупреждающее сообщение, потому что вы пытаетесь использовать более одного поставщика кэша, где оба используют одно и то же пространство в памяти