powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF + Hibernate + Oracle
14 сообщений из 14, страница 1 из 1
JSF + Hibernate + Oracle
    #38309782
vlad_nal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте !
Подскажите пожалуйста: сессия хибера = сессия Oracle ?
Не нашел внятного обьяснения в инете. Или ткните кто нибудь носом.

Почему возник вопрос : я делаю запросы к Oracle опираясь на выставленные, в этой же сессии хибера, параметры в сессии Oracle.
Я понимаю, что сессии хибера возвращаются в пул. Каждый раз при получении сессии :
....
sessionFactory =
new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
.....
if (session == null) {
session = sessionFactory.openSession();
<выполнение инициализации параметров на стороне Oracle>
.......
Я инициирую параметры в сессии Oracle.
Опасения по сути только в одном : могут ли несколько клиентов моего Web сервера(Tomcat), использовать один и тот же экземпляр session Hibernate ?

Заранее спасибо.
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38309934
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad_nal,
- нет. Сессия хибера это Open и Close рессурса (напр. хэндла файла). Т.е. чисто внутреннее дело хибера.
- если пул, то это значит Обезличенные\публичные пользователи или Веб-проект.
Код: java
1.
2.
3.
4.
5.
6.
using(var session = SessionFactory.OpenSession())
using(var transaction = session.BeginTransaction())
{
    var a = session.Get<Order>(100);
    var b = session.Get<Order>(100);
}


т.е. а=b в ООП на сервере, так же как и в БД это одинковые строки.
у хибера transaction-scoped identity, условие идентичности гарантируется в рамках транзакции (имеется ввиду не database transaction).

Т.е. сессию оракла не рекомендуется трогать, т.к. 1) пул и 2) транзакции - короткие.
Но это веб-подход. Есть разные проекты.
Т.е. обычно Бизнес транзакция = сессии хибера или равна времени реквеста (ответа) HTTP сервера
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38310011
vlad_nal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не понял ответ.
про то что сессия хибера не равна сессии БД, понял. Сессия хибера конечно может быть связанна и с чтением из линейного файла.
больше волнует вопрос: я получил сессию хибера связанную с коннектом к БД.
этот же экземпляр сессии, параллельно, может использоваться несколькими web пользователями ?
я вот не представляю как можно через один коннект к БД делать параллельно несколько запросов сразу.
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38310035
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad_nalне понял ответ.
про то что сессия хибера не равна сессии БД, понял. Сессия хибера конечно может быть связанна и с чтением из линейного файла.

===== это был просто аналог из другой области...о том что СессХибера надо открывать и закрывать.

больше волнует вопрос: я получил сессию хибера связанную с коннектом к БД.
этот же экземпляр сессии, параллельно, может использоваться несколькими web пользователями ?

==== 1) Хто такой веб пользователь? Не может, т.к. разные пользователи запускают РАЗНЫЕ ЗАПРОСЫ В РАЗНЫХ ТРАНЗАКЦИЯХ \ Осликах. И это правильно.

я вот не представляю как можно через один коннект к БД делать параллельно несколько запросов сразу.

========= изучи как работает простой пул на 2 коннекта для 100 пользователей.
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38310036
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad_nalя вот не представляю как можно через один коннект к БД делать параллельно несколько запросов сразу.
Никак. JDBC этого не позволяет. Поэтому на каждый параллельный запрос по отдельному конекшну.
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38310058
vlad_nal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так понимаю, что пул на 2 конекта для 100 пользователей будет работать только тогда когда я сессию возвращаю в пул.

Веб пользователь = сессия web сервера, при jsf, это обьекты имеющие :
@SessionScoped

Подскажите, если я не закрываю сессию явно , то есть никаких session.close не делаю, когда происходит возврат сессии в пул ?
И происходит ли вообще?
Вот сейчас по логам своего приложения(но правда в одно пользовательском режиме) и вижу, что я один раз получил обьект session хибера и так с ним и работаю.

Это значит что если у меня зайдут 150 пользователей у меня будет 150 коннектов к БД ?
А если в настройках хибера стоит ограничение пула в 50 коннектов ? остальные обломяться ?
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38310067
vlad_nal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
========= изучи как работает простой пул на 2 коннекта для 100 пользователей.

Я бы с удовольствием. А как это сделать ? Юнит тесты написать ? просто как сэмулить 100 пользователей ? или где то есть уже описание как все работает ? киньте ссылку пожалуйста!
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38310086
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad_nalPetro123,
========= изучи как работает простой пул на 2 коннекта для 100 пользователей.

Я бы с удовольствием. А как это сделать ? Юнит тесты написать ? просто как сэмулить 100 пользователей ? или где то есть уже описание как все работает ? киньте ссылку пожалуйста!
1. Я JSF не знаю, возможно там специфика и РУками ничего делать не надо.
2. Ты полез в сессию Оракла. Зачем?
3. Нужно взять демки по JSF и ответить - что не получилось.
"не ищи там где светло (сессии), а ищи что потерял (нагрузочное тестирование хоть на 2 пользователя)".
авторВот сейчас по логам своего приложения(но правда в одно пользовательском режиме) и вижу, что я один раз получил обьект session хибера и так с ним и работаю.
сделай 2-х в двух Ослах или 2-х девайсах.
IMHO
ЗЫ
в пуле все ждут, когда будет освободившийся коннект от другого.
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38310099
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad_nal,
WAPT - нагрузочное тестирование сайта виртуальными пользюками
http://www.loadtesting.ru/product.shtml
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38310100
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad_nalЯ так понимаю, что пул на 2 конекта для 100 пользователей будет работать только тогда когда я сессию возвращаю в пул.

Веб пользователь = сессия web сервера, при jsf, это обьекты имеющие :
@SessionScoped

Подскажите, если я не закрываю сессию явно , то есть никаких session.close не делаю, когда происходит возврат сессии в пул ?
И происходит ли вообще?
Вот сейчас по логам своего приложения(но правда в одно пользовательском режиме) и вижу, что я один раз получил обьект session хибера и так с ним и работаю.

Это значит что если у меня зайдут 150 пользователей у меня будет 150 коннектов к БД ?
А если в настройках хибера стоит ограничение пула в 50 коннектов ? остальные обломяться ?

Что-то у вас всё в кашу намешалось.
Oracle сессия живет внутри физического JDBC Connection. Есть разные способы и фичи оракла, но в web приложениях, чаще всего сессия в базе данных не используется. Благодаря этому разные пользователи могут использовать один и тот же Connection по-очереди. А чтобы пользователи могли работать параллельно, используется JDBC Connection Pool.
(Это лишь самый распространенный вариант, приложения могут диктовать свою специфику). Жизненый цикл использования Connection обычно совпадает с транзакцией. Так как, чаще всего, транзакция сервера просто использует механизм транзакций БД.

Hibernate Session это Unit Of Work. Обычно она никак не шарится между пользователями, а создаётся новая на каждую транзакцию. Hibernate Session кеширует в себе даннные и изменения касающиеся текущей транзакции. Возможны варианты, но для начала лучше просто принять это за данность. Для Hibernate Session никакие пулы не применяются.

SessionScoped это вообще привязка к HTTP Session сервера. Ни с Hibernate Session ни с JDBC Connection её лучше не связывать.
Не то чтобы это не возможно. Просто нужно понимать все последствия такой архитектуры.

JDBC Pool лучше настроить на сервере приложений, а не в хибернейте.
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38310181
vlad_nal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

спасибо, попробую потестить
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38310211
vlad_nal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Тогда чтоб до конца понять:

Oracle сессия живет внутри физического JDBC Connection. Есть разные способы и фичи оракла, но в web приложениях, чаще всего сессия в базе данных не используется. Благодаря этому разные пользователи могут использовать один и тот же Connection по-очереди. А чтобы пользователи могли работать параллельно, используется JDBC Connection Pool.
- Я правильно понимаю что делая: session = sessionFactory.openSession();
я не получаю коннект к БД(JDBC Connection)? тогда когда собственно обьект session в jsf получает JDBC Connection ?

Hibernate Session это Unit Of Work. Обычно она никак не шарится между пользователями, а создаётся новая на каждую транзакцию. Hibernate Session кеширует в себе даннные и изменения касающиеся текущей транзакции. Возможны варианты, но для начала лучше просто принять это за данность. Для Hibernate Session никакие пулы не применяются.
- А что же тогда такое sessionFactory как не аналог пула?

SessionScoped это вообще привязка к HTTP Session сервера. Ни с Hibernate Session ни с JDBC Connection её лучше не связывать.
-это понятно, я просто ассоциирую Web пользователя с HTTP Session.

JDBC Pool лучше настроить на сервере приложений, а не в хибернейте.

- что подразумевается под "сервером приложений" ? Томкат ?
у меня Apach+TomCat

В связи со всем вышесказанным главный вопрос : как Hibernate Session соотноситься с JDBC Connection ?
я же явно не управляю JDBC Connection, не получаю его , я работаю с Hibernate Session.
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38310234
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad_nal- Я правильно понимаю что делая: session = sessionFactory.openSession();
я не получаю коннект к БД(JDBC Connection)?
Скорее всего правильно. Надо исходники посмотреть. Hibernate возьмет JDBC Connection для этой сессии тогда когда он ему понадобится. Дока говорит тоже самое:

RTFMOpen a Session, utilizing the specified Interceptor.
JDBC connection(s will be obtained from the configured org.hibernate.connection.ConnectionProvider as needed to perform requested work.

vlad_nalтогда когда собственно обьект session в jsf получает JDBC Connection ?
JSF это фреймверк представления. Он никакого отношения к Hibernate/JDBC не имеет. JEE спека для Hibernate называется JPA. Но у вас она, кажется, не используется. Что за "обьект session в jsf" - я не знаю. Hibernate возмет Connection из своего ConnectionProvider, о чем в доке и сказано. А тот в свою очередь может использовать свой пул, или JNDI DataSource, смотря как настроить. Последнее предпочтительнее.

vlad_nal- А что же тогда такое sessionFactory как не аналог пула?
Это совершенно не аналог пула. Во-первых он не пулирует сессии, а всегда создаёт новые. Во-вторых это контейнер для настрок Hibernate, который в зависимости от этих настроек и создаёт Session.

vlad_nal-это понятно, я просто ассоциирую Web пользователя с HTTP Session.
Это понятно. Просто оно к Hibernate/JDBC отношения почти не имеет. Рекомендую сначала разобраться с чем-то одним.


vlad_nal- что подразумевается под "сервером приложений" ? Томкат ?
у меня Apach+TomCat

http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

vlad_nalВ связи со всем вышесказанным главный вопрос : как Hibernate Session соотноситься с JDBC Connection ?
я же явно не управляю JDBC Connection, не получаю его , я работаю с Hibernate Session.
В общем случае, Hibernate Session держит ссылку на JDBC Connection, пока не будет закрыта сессия.
session.close() приводит к connection.close(). Что в свою очередь возвращает соединение в пул, если пул используется. Либо закрывает соединение, если пул не используется.
Откройте SessionImpl.java и посмотрите реализацию метода close();
...
Рейтинг: 0 / 0
JSF + Hibernate + Oracle
    #38310258
vlad_nal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Огромное спасибо. Вроде стало понятно.
JDBC Connection берется из пула по мере необходимости и похоже после окончания запроса туда же возвращается.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF + Hibernate + Oracle
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]