Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java EE (J2EE) и Spring > Извлечение объектов Hibernate из памяти |
Автор: Grelloo 25.4.2006, 14:29 |
Hibernate записывает объекты в базу данных. Остаются ли при этом эти объекты в памяти и если да, то можно ли их извлечь? То есть идея такая: зачем лезть в базу данных каждый раз, если можно брать объекты из памяти? |
Автор: tux 25.4.2006, 14:41 |
Hibernate можно настроить на кэширование как объектов, так и запросов в целом. Почитай вот здесь - http://www.hibernate.org/hib_docs/v3/reference/en/html/performance.html#performance-cache. |
Автор: Grelloo 26.4.2006, 00:02 |
На http://www.hibernate.org/208.html нарыл ссылки об Using the Second-level Cache. http://ehcache.sourceforge.net/documentation/getting_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/reference/en/html/performance.html#performance-cache описывается Using the Second-level Cache Map cacheEntries = sessionFactory.getStatistics() .getSecondLevelCacheStatistics(regionName) .getEntries(); Если скажем мне надо было бы ввести объект в базу данных, то я просто бы создал instance сессии, записал бы объект и все. Как записать этот же объект в cache (немного затрудняюсь с кодом). |
Автор: tux 26.4.2006, 01:52 |
Ээээ... А зачем тебе вообще какой-то код, мне не понятно? Описываешь в XML конфигурацию кэша, Hibernate тебе сам все кэширует и сам пытается сперва найти объекты в кэше, а затем уже выполняет запрос. Причем использует для хранения кэшируемых объектов ehcache. Может быть конечно что у ehcache есть открытый API работы с кэшем объектов, тогда в его javadoc и надо смотреть, только я, честно говоря, не вижу в этом смысла раз уж Hibernate все уже за тебя делает. |
Автор: Grelloo 26.4.2006, 07:31 | ||
То бишь я делаю следующие действия: 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 26.4.2006, 08:23 |
Если хочешь, можешь конечно использовать API, но придется тогда с этим API разбираться (причем не с Hibernate, а с EhCache). Обычно использовать напрямую не требуется, Hibernate сам со всем прекрасно справится. |
Автор: Grelloo 26.4.2006, 12:06 | ||||||
Я написал следующие маппинги: 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, 13:32 |
Хорошо, а как насчет выбора cache: хватит ли мне EhCacheProvider для создание средненького блога новостей или мне надо воспользоваться чем-нибудь помощней типа JBoss TreeCache? |
Автор: vepeter 26.4.2006, 14:25 | ||
EhCacheProvider вполне хватит. Преимуществом JBoss Cache является его транзакционность. |
Автор: Grelloo 26.4.2006, 14:51 |
Большое спасибо за помощь. Теперь буду настраивать EhCacheProvider |