войти зарегистрироваться

JAVAHibernate cache

Довольно часто в java приложениях с целью снижения нагрузки на БД используют кеш. Не много людей реально понимают как работает кеш под капотом, добавить просто аннотацию не всегда достаточно, нужно понимать как работает система. Поэтому этой статье я попытаюсь раскрыть тему про то, как работает кеш популярного ORM фреймворка. Итак, для начала немного теории.

Прежде всего Hibernate cache — это 3 уровня кеширования:
  • Кеш первого уровня (First-level cache);
  • Кеш второго уровня (Second-level cache);
  • Кеш запросов (Query cache);

Кеш первого уровня

Кеш первого уровня всегда привязан к объекту сессии. Hibernate всегда по умолчанию использует этот кеш и его нельзя отключить. Давайте сразу рассмотрим следующий код:
SharedDoc persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId);
System.out.println(persistedDoc.getName());
user1.setDoc(persistedDoc);

persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId);
System.out.println(persistedDoc.getName());
user2.setDoc(persistedDoc);

Возможно, Вы ожидаете, что будет выполнено 2 запроса в БД? Это не так. В этом примере будет выполнен 1 запрос в базу, несмотря на то, что делается 2 вызова load(), так как эти вызовы происходят в контексте одной сессии. Во время второй попытки загрузить план с тем же идентификатором будет использован кеш сессии.
Один важный момент — при использовании метода load() Hibernate не выгружает из БД данные до тех пор пока они не потребуются. Иными словами — в момент, когда осуществляется первый вызов load, мы получаем прокси объект или сами данные в случае, если данные уже были в кеше сессии. Поэтому в коде присутствует getName() чтобы 100% вытянуть данные из БД. Тут также открывается прекрасная возможность для потенциальной оптимизации. В случае прокси объекта мы можем связать два объекта не делая запрос в базу, в отличии от метода get(). При использовании методов save(), update(), saveOrUpdate(), load(), get(), list(), iterate(), scroll() всегда будет задействован кеш первого уровня. Собственно, тут нечего больше добавить.

JAVA Hibernate или другие ORM в крупных, нагруженных проектах это зло или нет?

Проголосовало 440 человек. Воздержалось 276 человек.

JAVAHibernate для самых маленьких и не только

Доброго всем времени суток! При написании программы, которая так или иначе будет взаимодействовать с базой данных, пользуются разными средствами. Это и старый добрый jdbc, также применяют: EclipseLink,TopLink, iBatis (уже MyBatis), Spring Framework и конечно же герой нашей статьи — Hibernate. Конечно я здесь перечислил не все средства работы с базой данных, но постарался указать самые распространенные. В данной статье будет показано, как при помощи Hibernate вызывать хранимые процедуры, маппить как таблицы, так и запросы к классам. В качестве подопытной базы данных возьмем Oracle.

Веб-разработкаВнедрение Spring Security в связку ZK+Spring Framework+Hibernate: часть третья

Всем доброго времени суток. Вот и подошла к концу серия статей (один и два) про внедрение Spring Security в веб-приложение, написанное на ZK. В прошлом посте мы возложили на себя механизм проверки на соответствие правильности логина и пароля, переопределив метод protected UserDetails retrieveUser, от унаследованного класса AbstractUserDetailsAuthenticationProvider.
Давайте пойдем другим путем. Возложим проверку на соответствие логин-пароль на один из важных интерфейсов системы Spring Security — на UserDetailsService, который выполняет загрузку пользовательских данных через метод loadUserByUsername.

Веб-разработкаВнедрение Spring Security в связку ZK+Spring Framework+Hibernate: часть вторая

Всем доброго времени суток. Данная статья является продолжением статьи про способы внедрения секьюрности в веб-приложение. За основу возьмем наше приложение, которое было описано и в предыдущем и в этом постах.
План работы:
  • добавим необходимые таблицы и определим для них маппинг-отображения;
  • изменим форму авторизации;
  • создадим класс, унаследованный от класса AbstractUserDetailsAuthenticationProvider, и реализуем в нем логику выполнения авторизации;

Веб-разработкаВнедрение Spring Security в связку ZK+Spring Framework+Hibernate: часть первая

Всем доброго времени суток. Как и обещал, попытаюсь осветить тему секьюрности в веб-приложении, написанном на ZK Framework. Почему часть первая? Потому что в данной статье я покажу вам наиболее быстрый и простой метод внедрения Spring Security с использованием в качестве страницы авторизации- jsp страницу; в последующей(их) статье(ях) будут описаны более сложные и интересные методы с использованием zul в качестве построения страницы авторизации.
Веб-приложение писать с нуля не будем, а за основу возьмем мое прошлое приложение, которое я описывал в этом топике.
Что нам понадобится:
Данный метод можно реализовывать тоже по-разному, либо хранить юзеров, их пароли и права в xml конфигурации Spring Security, либо хранить в базе данных. Так как наше приложение и так работает с базой Oracle, так чего бы и юзеров не хранить в базе. Как говорит нам документация спринга, при дефолтном развертывании Spring Security смотрит в базу на 2 таблицы (users и authorities). При групповой политики, требуется наличие еще и таких таблиц, как :groups, group_authorities, group_members (скрипты таблиц можно взять отсюда).

Веб-разработкаZK+Spring 3+Hibernate: две головы хорошо, а три лучше, быстрее, сильнее

Всем доброго времени суток. Вот решил поделиться тем, как можно объединить двух монстров Spring Framework и Hibernate с мощным j2ee фреймворком ZK. Для начала почему же именно ZK, а не GWT или вообще native jsp? Потому что (чисто субъективно) у ZK самая безболезненная интеграция с этими фреймворками, да и вообще проще я пока не встречал, что и вам попытаюсь доказать.
Мой пример будет прост, так как моя цель показать как эти все фреймворки заставить заработать, причем с наименьшей головной болью. В качестве базы данных возьмем Oracle. И напишем простое веб-приложение, которое будет отображать имена пользователей. Также, дабы показать мощь и простоту ZK, добавим немного функциональности, к примеру, удаление пользователей из системы и редактирование его имени.

JAVAOpen Source RIA на Spring Framework'e


RIA — Rich Internet Application.
Spring Framework — каркас приложения.
Open Source — открытый исходный код. Бери и пользуйся.
О том какое RIA приложение разработано, где можно его посмотреть и взять исходники под хабракатом.

JAVAHibernate Envers: аудирование операций

Зачем это надо?


В enterprise-разработке часто бывает необходимо отслеживать процесс редактирования каких-нибудь таблиц.
Скажем, завели у вас документ в системе. Потом кто-то поменял ему серию. Потом номер. Потом сменил тип с паспорта РФ на загран. паспорт Германии. Хотелось бы иметь возможность отследить историю изменений и, скажем, настучать по шапке пользователю, который совершил ошибку.

Linux для всехНастройка Archlinux на ASUS Eee 1201NL

После того, как я устроился на работу адинистратором одного веб-проекта, появилась необходимость иногда что-то делать, находясь вне дома/офиса. Так как основной задачей в таких ситуациях было зайти на сервер по SSH и в браузере проверить результат действий, то решил остановить выбор на нетбуке. Но очень не хотелось распространённго разрешения 600px по вертикали. И всё-таки хотелось использовать нетбук не только для SSH, но и для прочих приятностей, вроде просмотра фильмов. Естественно, планировалось работать под Linux, поэтому требовалась нормальная поддержка оборудования.

В результате, остановился на «непонятном недоразумении» ASUS Eee PC 1201NL. Это такой своеобразный нетбук. Очень своеобразный.
Во-первых у него диагональ аж 12", что неприлично много для устройств этого класса.
Во-вторых, разрешение экрана 1366x768, что очень неплохо, но мелковато, если не настраивать более крупное значение DPI.
В-третьих он на базе платформы nVidia ION, что даёт хорошую производительность для подобных устройств. Недостатком является малое время работы — часа 4 со включенным bluetooth/wi-fi, если запустить какую-нибудь требовательную программу (например, игру Neverwinter Nights), то время снизится ещё сильнее.

Можно сделать вывод, что, по сути, данное решение является полноценным недорогим маленьким ноутбуком. Хоть и на базе процессора Intel Atom.