![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
SuperFly |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Еще раз, здравствуйте.
Хотел узнать, как вы реализуете в JPA или Hibernate по 1 сессии на запрос? Есть стандартные решения или каждый делает своё? |
|||
|
||||
SuperFly |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Видмо, я что-то не так спросил? Тема обсуждалась?
|
|||
|
||||
iluvatar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 17.9.2007 Репутация: 4 Всего: 4 |
ну, у меня 1 метод=1 запрос = 1 сессия
|
|||
|
||||
SuperFly |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Хм, я думаю этот вариант весьма жесткий.
Представьте, над 1 проектом работают несколько программистов, я сомневаюсь, что они 1 методом договорятся. Необходим последовательный доступ к сессии из разных участков проекта (громко сказал, но учебный-проект тоже проект). |
|||
|
||||
skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: 2 Всего: 7 |
SuperFly,
используй пул соединений, например DBCP Добавлено @ 07:35
а что мешает создать еще сессию? по-моему, мы говорим о разных вещах... Это сообщение отредактировал(а) skhilkov - 23.11.2007, 07:35 -------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
iluvatar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 17.9.2007 Репутация: 4 Всего: 4 |
я что-то тоже не понял. Я тоже работаю в команде. И проблем не вижу. Делай метод, в который передаются все параметры, в зависимости от которых генерится запрос. создаешь сессию, выполняешь запрос, закрываешь сессию. Что здесь неправильно? |
|||
|
||||
skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: 2 Всего: 7 |
SuperFly, а ты не путаешь, случаем, сессию и соединение?
-------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
SuperFly |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
skhilkov, Ууупс, конечно путаю!
Добавлено через 1 минуту и 4 секунды Вообще неправильно все сказал :( Под запросом, имею ввиду запрос пользователя. Под сессией, всё таки как правильно заметили имею ввиду соединение. Добавлено через 2 минуты и 8 секунд Да, прошу прощения, совсем себя запутал. Добавлено через 8 минут и 48 секунд Я бы +1 поставил skhilkov, за наблюдательность. |
|||
|
||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
Я так понимаю, вопрос снят? Сейчас поставим ;) -------------------- Lost.... |
|||
|
||||
SuperFly |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Хыыы, всё таки оказалось, что вопрос не снят! Я нашел то что задумал:
Чудесное свойство ThreadLocal!!! Ну и встал вопрос как мне стартовать транзакцию и коммитировать или роллбечить? У меня дума сделать фильтр:
Но, тут проблемка с роллбеком, где я должен его обрабатывать? |
||||
|
|||||
Greg |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: 5 Всего: 7 |
Оборачивать каждый пользовательский запрос в транзакцию - неправильно. Даже если фильтр применяется не ко всем запросам - тоже неправильно. Создавать транзакцию нужно в классе, где реализуется работа с базой данных, там же фиксировать (commit) или откатывать (rollback). Настоятельно рекомендую читать про паттерн DAO (Data Access Object) и смотреть примеры.
Это сообщение отредактировал(а) Greg - 18.1.2008, 17:10 --------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
|||
|
||||
Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 10 Всего: 40 |
...
Это сообщение отредактировал(а) Platon - 22.1.2008, 14:19 |
|||
|
||||
Greg |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: 5 Всего: 7 |
Можно использовать реализацию паттерна Open Session In View из Spring framework - она инкапсулируется в фильтре org.springframework.orm.hibernate3.support.OpenSessionInViewFilter. Реализация паттерна привязывает объект org.hibernate.Session, к треду, в котором выполняется пользовательский запрос. Таким образом во время обработки пользовательского запроса разработчику не нужно заботиться о создании или освобождении сессии. Это сообщение отредактировал(а) Greg - 3.2.2008, 15:13 --------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
|||
|
||||
SuperFly |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 19.11.2007 Репутация: нет Всего: нет |
Как понять моё цитирование? Теперь сами столкнулись с такой проблемой? Но, вы же сами предложили некое решение.
|
|||
|
||||
Greg |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: 5 Всего: 7 |
В предыдущем сообщении я говорил про транзакции, потому что из Вашего примера они создаются раньше чем требуется. А сейчас я собственно ответил на первый Ваш вопрос. Подробней про паттерн можно прочитать на http://www.hibernate.org
Это сообщение отредактировал(а) Greg - 3.2.2008, 15:14 --------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |