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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Cеанс и работа с БД, проблема организации 
:(
    Опции темы
Hidrag
Дата 22.2.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Такая ситуация: есть web приложение которое должно работат с БД есть синглетоновский класс для работы с БД - все работает!

Но работает, как мне кажется, неэфективно, например: пользователь вводит логин и пароль, нажимает субмит, jsp страница получает инстанс "БД" класса, передает ему логин и пароль, этот инстанс создает соединение с БД, выполняет метод, закрывает соединение с БД, возвращает результат назад. Все бы хорошо, но если пользователей много, и кроме "входа на сайт" выполняются другие операции с БД, то мне кажется я насилую СУБД постоянными подключениями/отключениями. 

Как вариант решения проблемы вижу так: Пользователь при первом обращении к БД открывает соединение и это соединения не закрывается пока он сидит на сайте, как только он ушел с него соединение закрылось...

Как такое сделать я пока не знаю, то есть отловить момент ухода пользователя с сайта.

ЗЫ А в идеале наверное было бы хорошо создавать соединение для каждого подключеня, но это уже другая тема, и после решения текущей возможно вернусь к ней.


--------------------
user posted image
PM WWW ICQ   Вверх
tux
Дата 22.2.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Цитата(Hidrag @  22.2.2007,  15:35 Найти цитируемый пост)
мне кажется я насилую СУБД постоянными подключениями/отключениями. 

В общем случае ты не базу насилуешь, а клиента по части производительности - операции подключения и отключения отнюдь не быстрые. Вообще подобная проблема неоднократно обсуждалась и ее решение - это использование пула соединений с базой данных. Суть в следующем. Создается массив соединений с БД, как правило, ограниченный по размеру. В начале работы он пустой. При первом обращении к БД создается новое соединение, выполняется какая-то операция и соединение не закрывается, а помещается в этот массив. При следующем обращении к БД, реализация пула ищет в массиве свободные соединения и берет первое попавшееся, если нет свободных, то создается новое. Если количество соединений достигло максимума, запрашивающий поток переводится в состояние ожидания. Все соединений закрываются скопом когда происходит закрытия источника данных. Есть множество готовых реализаций пула соединений. Какие есть реализации можно посмотреть здесь - http://www.java-source.net/open-source/connection-pools. Я работал с DBCP, вполне себе ничего. Его же использует Tomcat. Поведение конкретного пула может отличаться от того, что я написал, но в общем случае это так.

Это сообщение отредактировал(а) tux - 22.2.2007, 15:50
PM MAIL Skype GTalk Jabber YIM   Вверх
IDVsbruck
Дата 24.2.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А зачем вообще заморачиваться со столь низкоуровневым управлением общения с базой, если есть Hibernate или OJB, в настройках которых можно определить тип подключения к БД. Заодно и запросно-ответную базу проще реализовать ...
PM MAIL   Вверх
Hidrag
Дата 24.2.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я пока еще только учусь и не знаком с этим. Да и делаю это для веб приложения, которое у меня на бесплатном хостинге, где есть только Resin (или как его там...) и MySQL и больше ничего, даже EJB не поддерживается...


--------------------
user posted image
PM WWW ICQ   Вверх
connectionlost
Дата 24.2.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Даже ЙэДжиБи...  smile 

Маштабный вы человек  smile 

Это сообщение отредактировал(а) connectionlost - 24.2.2007, 20:51
PM   Вверх
Hidrag
Дата 24.2.2007, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну... у меня это на очереди по изучению J2EE после Serlet/Jsp smile


--------------------
user posted image
PM WWW ICQ   Вверх
seth
Дата 26.2.2007, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(tux @ 22.2.2007,  15:49)
В общем случае ты не базу насилуешь, а клиента по части производительности - операции подключения и отключения отнюдь не быстрые. Вообще подобная проблема неоднократно обсуждалась и ее решение - это использование пула соединений с базой данных. Суть в следующем. Создается массив соединений с БД, как правило, ограниченный по размеру. В начале работы он пустой. При первом обращении к БД создается новое соединение, выполняется какая-то операция и соединение не закрывается, а помещается в этот массив. При следующем обращении к БД, реализация пула ищет в массиве свободные соединения и берет первое попавшееся, если нет свободных, то создается новое. Если количество соединений достигло максимума, запрашивающий поток переводится в состояние ожидания. Все соединений закрываются скопом когда происходит закрытия источника данных. Есть множество готовых реализаций пула соединений. Какие есть реализации можно посмотреть здесь - http://www.java-source.net/open-source/connection-pools. Я работал с DBCP, вполне себе ничего. Его же использует Tomcat. Поведение конкретного пула может отличаться от того, что я написал, но в общем случае это так.

Тут возникло пару вопросов по реализации: 
1. А как при поиске свободного соединения проверяются права на доступ к БД?
2. Всмысле закрытия источника данных?


--------------------
PM MAIL   Вверх
tux
Дата 26.2.2007, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Цитата(seth @  26.2.2007,  10:27 Найти цитируемый пост)
А как при поиске свободного соединения проверяются права на доступ к БД?

Никак. А надо что-то проверять?

Цитата(seth @  26.2.2007,  10:27 Найти цитируемый пост)
Всмысле закрытия источника данных? 

Не понял вопроса.
PM MAIL Skype GTalk Jabber YIM   Вверх
ylims
Дата 28.2.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(IDVsbruck @ 24.2.2007,  15:00)
А зачем вообще заморачиваться со столь низкоуровневым управлением общения с базой, если есть Hibernate или OJB, в настройках которых можно определить тип подключения к БД. Заодно и запросно-ответную базу проще реализовать ...

а есть ли линка на документацию по Hibernate или OJB (желательно на rus) 
--------------------
ЦитатаНу и запросы у вас - сказала база данных и повисла.
PM MAIL ICQ   Вверх
tux
Дата 28.2.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Цитата(ylims @  28.2.2007,  13:14 Найти цитируемый пост)
а есть ли линка на документацию по Hibernate или OJB (желательно на rus)  

У Hibernate родная документация отличная - http://www.hibernate.org/hib_docs/v3/refer...en/html_single/. На русском не существует в природе насколько я знаю.
PM MAIL Skype GTalk Jabber YIM   Вверх
ylims
Дата 1.3.2007, 03:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(tux @ 28.2.2007,  13:21)

У Hibernate родная документация отличная - http://www.hibernate.org/hib_docs/v3/refer...en/html_single/. На русском не существует в природе насколько я знаю.


Вот нашёл на русском, http://www.hibernate.org/hib_docs/referenc...html/index.html

Это сообщение отредактировал(а) ylims - 1.3.2007, 03:47
--------------------
ЦитатаНу и запросы у вас - сказала база данных и повисла.
PM MAIL ICQ   Вверх
tux
Дата 1.3.2007, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Цитата(ylims @  1.3.2007,  03:46 Найти цитируемый пост)
Вот нашёл на русском, http://www.hibernate.org/hib_docs/referenc...html/index.html

Мдя, существует оказывается. Только это по версии 2.1.3, ей лет 5 от роду.
PM MAIL Skype GTalk Jabber YIM   Вверх
ylims
Дата 1.3.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(tux @ 1.3.2007,  08:11)
Цитата(ylims @  1.3.2007,  03:46 Найти цитируемый пост)
Вот нашёл на русском, http://www.hibernate.org/hib_docs/referenc...html/index.html

Мдя, существует оказывается. Только это по версии 2.1.3, ей лет 5 от роду.

значит что, инфа там уже не актуальна и нужно читать инфу посвежее?
--------------------
ЦитатаНу и запросы у вас - сказала база данных и повисла.
PM MAIL ICQ   Вверх
tux
Дата 1.3.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Цитата(ylims @  1.3.2007,  12:22 Найти цитируемый пост)
значит что, инфа там уже не актуальна и нужно читать инфу посвежее? 

Для ознакомления можно почитать конечно, но там поменялось с тех пор очень многое вплоть до названий пакетов. Лучше взять что-то свежее, я думаю. В общем рекомендую следующее. Если на английском читать совсем тяжело, то читай на русском. Но учитывай следующее:
  • структура XML-документов описания соответствия между классами и таблицами совместима с новыми версиями за тем исключением, что сменился заголовок, конечно
  • названия пакетов в версии 3.0 поменялись с net.sf на org
  • поменялись некоторые интерфейсы и классы
  • добавилось много новых интересных возможностей
Примеры должны работать с новыми версиями с учетом того, что я перечислил. Еще смущает качество перевода.
PM MAIL Skype GTalk Jabber YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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