Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Cache Abstraction + EhCache / 6 сообщений из 6, страница 1 из 1
27.10.2014, 23:25
    #38788721
krutimsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Cache Abstraction + EhCache
Добрый вечер. В веб-приложении для кэширования используется связка Spring Cache Abstraction + EhCache.
Кэширую метод DAO-уровня:

@Override
@Cacheable(value="cityCache", key="#root.methodName")
public List<City> getActiveMainCities(){

Session sess = sessionFactory.getCurrentSession();
List<City> cities = (List<City>)sess.createSQLQuery("SELECT * FROM city WHERE cit_enable IS TRUE").addEntity(City.class).list();

return cities;
}

Метод Service-уровня выглядит так:
@Override
public List<City> getActiveMainCities(){

return cityDao.getActiveMainCities();
}

Далее, это метод вызывается в контроллере:
List<City> cities = cityService.getActiveMainCities();

И тут начинается самое интересное! Если в контроллере сделать так:
List<City> cities = cityService.getActiveMainCities();
cities.add(new City("London", true));

то закэшируется модифицированный список , т.е. содержащий город London, а не то что было на выходе метода DAO-уровня.
ПОЧЕМУ? Может быть так и должно быть? Пожалуйста если кто знает почему так происходит поделитесь знаниями )
...
Рейтинг: 0 / 0
28.10.2014, 09:12
    #38788885
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Cache Abstraction + EhCache
krutimsoft,

Потому что вместо того чтобы заниматься фигней, стоит прочитать про кэш второго уровня Hibernate и включить его.
...
Рейтинг: 0 / 0
28.10.2014, 09:18
    #38788888
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Cache Abstraction + EhCache
krutimsoftПожалуйста если кто знает почему так происходит поделитесь знаниями )
Можно предположить что кэш не делает snapshot объекта. А просто держит ссылку в памяти. Добавление к списку меняет тот же объект что и содержится к кэше.
Гугл по запросу EhCache mutable object выдаёт кучу статей с материалом по теме
V Object mutability gotcha: http://doanduyhai.wordpress.com/2012/07/01/cache-abstraction-in-spring-3/
Mutable Value Objects: http://ehcache.org/documentation/2.6/configuration/distributed-cache-configuration
...
Рейтинг: 0 / 0
28.10.2014, 12:00
    #38789128
krutimsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Cache Abstraction + EhCache
Blazkowicz, какой ORM в highload проектах.
...
Рейтинг: 0 / 0
28.10.2014, 12:03
    #38789136
krutimsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Cache Abstraction + EhCache
Blazkowicz, большое спасибо, помог разобраться
...
Рейтинг: 0 / 0
28.10.2014, 12:47
    #38789184
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Cache Abstraction + EhCache
krutimsoftBlazkowicz, какой ORM в highload проектах.
Ну, без кэша, конечно. А с кэшированием всё нормально.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Cache Abstraction + EhCache / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]