невозможно ввести провайдер кеша - PullRequest
3 голосов
/ 16 июня 2010

Env: Seam 2.2, ehcache-core 2.1.0

Я попытался внедрить CacheProvider, используя следующий вызов в моем bean-объекте, определенном для сеанса

    @In CacheProvider cacheProvider;

    WEB-INF\components.xml contains the following line to enable the cache provider
    <cache:eh-cache-provider/>

The above configuration seems to return a null value for the cache provider


Using the cache provider like this         
CacheProvider cacheProvider = CacheProvider.instance();
throws the following warning

    15:29:27,586 WARN [CacheManager] Creating a new instance of CacheManager using
    the diskStorePath "C:\DOCUME~1\user5\LOCALS~1\Temp\" which is already used by an
    existing CacheManager.
    The source of the configuration was net.sf.ehcache.config.generator.Configuratio
    nSource$DefaultConfigurationSource@15ed0f9.
    The diskStore path for this CacheManager will be set to C:\DOCUME~1\user5\LOCALS
    ~1\Temp\\ehcache_auto_created_1276682367586.
    To avoid this warning consider using the CacheManager factory methods to create
    a singleton CacheManager or specifying a separate ehcache configuration (ehcache
    .xml) for each CacheManager instance.

Что мне здесь не хватает?

1 Ответ

1 голос
/ 20 июня 2010

Помните, что 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 ??? Это не имеет смысла.

Четвертый из всех

  • Это не такисключение .Это просто предупреждающее сообщение, потому что вы пытаетесь использовать более одного поставщика кэша, где оба используют одно и то же пространство в памяти
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...