Мы используем ehcache для кеширования в нашем проекте.@Общая аннотация не работает
import com.googlecode.ehcache.annotations.Cacheable;
// Other imports
@Component
public class Authenticator{
@Cacheable(cacheName = "rest_client_authorized")
public boolean isUserAuthorized(final String user, final String sessionId) {
// Method code
}
}
При входе в метод отсутствует перехватчик кеша. То, что мы проверили до сих пор:
- Мы не называем этот метод внутри класса, а снаружи. Таким образом, проблема заключается не в внутренних вызовах, которые приводят к обходу прокси-сервера.
- Мы добавили интерфейс для этого класса, и мы изменили инъекции, в которых этот класс вызывается, чтобы использовать представление интерфейса вместо конкретного класса.
Мы определили менеджер кэша в нашем контексте приложения таким образом:
<ehcache:annotation-driven cache-manager="ehCacheManager" />
<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<!-- use a share singleton CacheManager -->
<property name="shared" value="true" />
</bean>
Кэш определяется следующим образом:
<cache name="rest_client_authorized"
eternal="false"
maxElementsInMemory="50"
overflowToDisk="false" diskPersistent="false"
timeToIdleSeconds="0" timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LRU" />
Когда мы тестируем менеджер кэша с помощью Jconsole что мы можем см., что кеш * rest_auth_disabled * существует и пуст.
Любые идеи относительно того, почему это не сработает, будут оценены по достоинству. Благодаря!
Updates (агрегатные от комментариев ниже):
================================ ========== **
Это устаревший код, который отлично работал с классом и определениями, которые я предоставил. Метод, о котором я говорю здесь, нова, но остальная часть класса работала в прошлом. Поэтому мы пытаемся понять, что изменилось. Мы также попытались заменить аннотацию на весну Cacheable, но все равно ничего:/ Возможно, это зависит от кода, который вызывает этот новый метод, который отличается от другого весеннего компонента, чем то, что мы использовали для других методов. Но я все еще не могу найти проблему.
Также попытался вернуть Boolean вместо boolean после ответа ниже, и это не сработало. У нас есть новое руководство, которое, вероятно, связано с тем, как мы вводим компонент (используя @Autowire). Будет обновляться, если это действительно так.
Что живучесть провайдер вы используете? При использовании спящего режима см. [HH-5303] (https://hibernate.atlassian.net/browse/HHH-5303) –
Хорошо, мы используем Hibernate. Но мы уже использовали @Cacheable в этом проекте, и он сработал. Кэш кэшируется в памяти, а не в БД. Также обратите внимание, что это не аннотация JPA, поэтому я не уверен, что это так. Как вы думаете? – Avi
Вы правы, я не прочитал фактическое заявление импорта и предположил, что это была аннотация JPA, о которой вы говорили. Какой сервер приложений вы используете? –