Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Извлечение объектов Hibernate из памяти 
:(
    Опции темы
Grelloo
Дата 25.4.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 18.3.2006
Где: г. Екатеринбург

Репутация: нет
Всего: нет



Hibernate записывает объекты в базу данных. Остаются ли при этом эти объекты в памяти и если да, то можно ли их извлечь? То есть идея такая: зачем лезть в базу данных каждый раз, если можно брать объекты из памяти?
 
PM MAIL ICQ   Вверх
tux
Дата 25.4.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Hibernate можно настроить на кэширование как объектов, так и запросов в целом. Почитай вот здесь - http://www.hibernate.org/hib_docs/v3/refer...rformance-cache
PM MAIL Skype GTalk Jabber YIM   Вверх
Grelloo
Дата 26.4.2006, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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 (немного затрудняюсь с кодом).
 
PM MAIL ICQ   Вверх
tux
Дата 26.4.2006, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Ээээ... А зачем тебе вообще какой-то код, мне не понятно? Описываешь в XML конфигурацию кэша, Hibernate тебе сам все кэширует и сам пытается сперва найти объекты в кэше, а затем уже выполняет запрос. Причем использует для хранения кэшируемых объектов ehcache. Может быть конечно что у ehcache есть открытый API работы с кэшем объектов, тогда в его javadoc и надо смотреть, только я, честно говоря, не вижу в этом смысла раз уж Hibernate все уже за тебя делает. 
PM MAIL Skype GTalk Jabber YIM   Вверх
Grelloo
Дата 26.4.2006, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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) строчки типа 
Код

<cache usage="read-write"/>

И делать с объектами то же что и раньше, не используя Statistics  API и не прописывая ничего нового в hibernate.cfg.xml, а hibernate будет просто сам все кэшировать?

Я просто думаю, что надо импортировать org.hibernate.cache.EhCacheProvider и затем использовать Statistics  API для доступа к этому кэшу. 
 
PM MAIL ICQ   Вверх
tux
Дата 26.4.2006, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Если хочешь, можешь конечно использовать API, но придется тогда с этим API разбираться (причем не с Hibernate, а с EhCache). Обычно использовать напрямую не требуется, Hibernate сам со всем прекрасно справится. 
PM MAIL Skype GTalk Jabber YIM   Вверх
Grelloo
Дата 26.4.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 18.3.2006
Где: г. Екатеринбург

Репутация: нет
Всего: нет



Я написал следующие маппинги: ehcache.xml и Message.hbm.xml (прикреплены). Положил ehcache and the ehcache-constructs jars в свой classpath. Запустил свое приложение и в логах получил следующее:

Switch second-level cache and set cache provider
Код

14:26:44,769  INFO SettingsFactory:209 - Second-level cache: enabled
14:26:44,769  INFO SettingsFactory:213 - Query cache: disabled
14:26:44,769  INFO SettingsFactory:325 - Cache provider: org.hibernate.cache.EhCacheProvider
14:26:44,785  INFO SettingsFactory:228 - Optimize cache for minimal puts: disabled
14:26:44,785  INFO SettingsFactory:237 - Structured second-level cache entries: disabled



Configuration
Код

14:26:44,910 DEBUG CacheManager:191 - Creating new CacheManager with default config
14:26:44,926 DEBUG CacheManager:164 - Configuring ehcache from classpath.
14:26:44,926 DEBUG Configurator:121 - Configuring ehcache from ehcache.xml found in the classpath: file:/D:/Documents%20and%20Settings/exadel1/Zhdanov/HiberSer4/build/web/WEB-INF/classes/ehcache.xml


Initialise and use
Код

14:26:44,973 DEBUG MemoryStore:147 - example.Message Cache: Using SpoolingLinkedHashMap implementation
14:26:44,973 DEBUG MemoryStore:128 - initialized MemoryStore for example.Message
14:26:44,973 DEBUG Cache:277 - Initialised cache: example.Message
14:26:50,425 DEBUG Cache:906 - example.Message: Is element with key example.Message#1 expired?: false


Если я все правильно понял, то hibernate использует EhCacheProvider для записи в кэш объект класса example.Message и потом достает его оттуда.

Теперь возникает следующий вопрос: если мне надо создать на котором будут постоянно добавляться новые сообщения, то мне не придется создавать свой connection pool, а можно будет использовать second-level cache? 
  

Это сообщение отредактировал(а) Grelloo - 26.4.2006, 12:13

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  Ehcache_Message_xml.rar 1,31 Kb
PM MAIL ICQ   Вверх
tux
Дата 26.4.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(Grelloo @  26.4.2006,  17:06 Найти цитируемый пост)
Если я все правильно понял, то hibernate использует EhCacheProvider для записи в кэш объект класса example.Message и потом достает его оттуда.

Все правильно.

Цитата(Grelloo @  26.4.2006,  17:06 Найти цитируемый пост)
Теперь возникает следующий вопрос: если мне надо создать на котором будут постоянно добавляться новые сообщения, то мне не придется создавать свой connection pool, а можно будет использовать second-level cache? 

Не понял, а при чем здесь connection pool? Это совершенно разные вещи. Connection pool оптимизирует использование соединение с базой данных, вместо того, чтобы соединение закрывать перемещает его во временное хранилище чтобы потом его повторно использовать. И зачем создавать свой пул соединений? Hibernate и с этим прекрасно справляется сам, достаточно настроить. EhCache кэширует объекты в памяти/на диске чтобы без выполнения запросов можно было эти объекты получить. В production обычно нужно и то и другое. 
PM MAIL Skype GTalk Jabber YIM   Вверх
Grelloo
Дата 26.4.2006, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 18.3.2006
Где: г. Екатеринбург

Репутация: нет
Всего: нет



Хорошо, а как насчет выбора cache: хватит ли мне EhCacheProvider для создание средненького блога новостей или мне надо воспользоваться чем-нибудь помощней типа JBoss TreeCache? 
PM MAIL ICQ   Вверх
vepeter
Дата 26.4.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.8.2005

Репутация: нет
Всего: нет



Цитата(Grelloo @ 26.4.2006,  13:32)
хватит ли мне EhCacheProvider для создание средненького блога новостей или мне надо воспользоваться чем-нибудь помощней типа JBoss TreeCache?

EhCacheProvider вполне хватит. Преимуществом JBoss Cache является его транзакционность.  

Это сообщение отредактировал(а) tux - 26.4.2006, 15:18
PM MAIL   Вверх
Grelloo
Дата 26.4.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 18.3.2006
Где: г. Екатеринбург

Репутация: нет
Всего: нет



Большое спасибо за помощь. Теперь буду настраивать EhCacheProvider 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0864 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.