![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Hibernate записывает объекты в базу данных. Остаются ли при этом эти объекты в памяти и если да, то можно ли их извлечь? То есть идея такая: зачем лезть в базу данных каждый раз, если можно брать объекты из памяти?
|
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Hibernate можно настроить на кэширование как объектов, так и запросов в целом. Почитай вот здесь - http://www.hibernate.org/hib_docs/v3/refer...rformance-cache.
|
|||
|
||||
Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
На http://www.hibernate.org/208.html нарыл ссылки об Using the Second-level Cache.
http://ehcache.sourceforge.net/documentati...ng_started.html Описывается, что надо для использования ehcache as a Hibernate plugin: Place ehcache and the ehcache-constructs jars in your classpath accessible to your web container. Place ehcache.xml in your classpath. Configure a cache for your web page in ehcache.xml. Configure the web.xml http://ehcache.sourceforge.net/documentation/hibernate.html Описываются hibernate-маппинги и непросредственно сам ehcache.xml Все это я сделал, теперь немного затрудняюсь в использовании cache. В http://www.hibernate.org/hib_docs/v3/refer...rformance-cache описывается Using the Second-level Cache Map cacheEntries = sessionFactory.getStatistics() .getSecondLevelCacheStatistics(regionName) .getEntries(); Если скажем мне надо было бы ввести объект в базу данных, то я просто бы создал instance сессии, записал бы объект и все. Как записать этот же объект в cache (немного затрудняюсь с кодом). |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Ээээ... А зачем тебе вообще какой-то код, мне не понятно? Описываешь в XML конфигурацию кэша, Hibernate тебе сам все кэширует и сам пытается сперва найти объекты в кэше, а затем уже выполняет запрос. Причем использует для хранения кэшируемых объектов ehcache. Может быть конечно что у ehcache есть открытый API работы с кэшем объектов, тогда в его javadoc и надо смотреть, только я, честно говоря, не вижу в этом смысла раз уж Hibernate все уже за тебя делает.
|
|||
|
||||
Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
То бишь я делаю следующие действия:
Place ehcache and the ehcache-constructs jars in your classpath accessible to your web container. Place ehcache.xml in your classpath. Configure a cache for your web page in ehcache.xml Затем дописываю в маппинг класса (например User.hbm.xml) строчки типа
И делать с объектами то же что и раньше, не используя Statistics API и не прописывая ничего нового в hibernate.cfg.xml, а hibernate будет просто сам все кэшировать? Я просто думаю, что надо импортировать org.hibernate.cache.EhCacheProvider и затем использовать Statistics API для доступа к этому кэшу. |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Если хочешь, можешь конечно использовать API, но придется тогда с этим API разбираться (причем не с Hibernate, а с EhCache). Обычно использовать напрямую не требуется, Hibernate сам со всем прекрасно справится.
|
|||
|
||||
Grelloo |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Я написал следующие маппинги: ehcache.xml и Message.hbm.xml (прикреплены). Положил ehcache and the ehcache-constructs jars в свой classpath. Запустил свое приложение и в логах получил следующее:
Switch second-level cache and set cache provider
Configuration
Initialise and use
Если я все правильно понял, то hibernate использует EhCacheProvider для записи в кэш объект класса example.Message и потом достает его оттуда. Теперь возникает следующий вопрос: если мне надо создать на котором будут постоянно добавляться новые сообщения, то мне не придется создавать свой connection pool, а можно будет использовать second-level cache? Это сообщение отредактировал(а) Grelloo - 26.4.2006, 12:13 Присоединённый файл ( Кол-во скачиваний: 1 ) ![]() |
||||||
|
|||||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Все правильно. Не понял, а при чем здесь connection pool? Это совершенно разные вещи. Connection pool оптимизирует использование соединение с базой данных, вместо того, чтобы соединение закрывать перемещает его во временное хранилище чтобы потом его повторно использовать. И зачем создавать свой пул соединений? Hibernate и с этим прекрасно справляется сам, достаточно настроить. EhCache кэширует объекты в памяти/на диске чтобы без выполнения запросов можно было эти объекты получить. В production обычно нужно и то и другое. |
|||
|
||||
Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Хорошо, а как насчет выбора cache: хватит ли мне EhCacheProvider для создание средненького блога новостей или мне надо воспользоваться чем-нибудь помощней типа JBoss TreeCache?
|
|||
|
||||
vepeter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.8.2005 Репутация: нет Всего: нет |
EhCacheProvider вполне хватит. Преимуществом JBoss Cache является его транзакционность. Это сообщение отредактировал(а) tux - 26.4.2006, 15:18 |
|||
|
||||
Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Большое спасибо за помощь. Теперь буду настраивать EhCacheProvider
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |