![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Hidrag |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 2 Всего: 25 |
Такой вопрос: у меня есть веб приложение и есть БД работа с бд осуществляется через класс по паттерну Singleton. То есть при запросе клиента получаю инстанс класса и выполняю какие то действия, все последующие действия клиента с бд опять же осуществляются через этот инстанс.
Но одно мне пока неизвестно: допустил клиент работает с веб приложением, для него создался инстанс класса для операций с БД. В этот момент подключается второй клиент, что будет в этом случае? При выполнении гетИнстанс он получит уже созданный инстанс предыдущим клиентом или для него будет создан свой объект, по скольку клиенты в разных сессиях? Или стоит отказаться написания своих классов для работы с БД и посмотреть в сторону того что предлагает сервер приложений? Например, у томката есть какие то методы для работы с БД, я пока не смотрел в ту сторону, а наверное есть смысл, не зря же они там -------------------- |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Такая ситуация называется гонкой и как раз для того, чтобы избежать ее метод getInstance() объявляется synchronized. В этом случае только один поток в каждый момент времени может этот метод выполнить и такой неоднозначности не будет.
Что за методы? Никогда не слышал. В любом случае средства API конкретного сервера приложений следуем использовать только в крайнем случае и при полной уверенности, что не придется переезжать на какой-то другой сервер. |
|||
|
||||
| Hidrag |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 2 Всего: 25 |
Вот это например: http://tomcat.apache.org/tomcat-5.5-doc/jn...ples-howto.html Получается что для веб приложения много подключенных клиентов то же самое что для десктоп приложения много потоков которые обращаются к одному ресурсу? -------------------- |
|||
|
||||
| tux |
|
||||||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Примерно так. Каждый запрос к веб-приложению обрабатывается одним потоком. То есть привязки потоков к пользователям как правило нет. Поток для выполнения поступившего запроса выбирается из пула свободных.
Нет, когда завершит работу JVM. Экземпляр объекта в Singleton хранится в статическом поле, пока существует класс, будет существовать и этот экземпляр.
А, ну дак это не методы. Это вполне стандартный способ доступа к источнику данных используя JNDI. |
||||||
|
|||||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 7 Всего: 54 |
Или когда приложение передеплоят. Заморочки с загрузкой/выгрузкой классов никто не отменял. Это сообщение отредактировал(а) w1nd - 14.2.2007, 14:56 -------------------- ![]() ![]() |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
||||
|
||||
| alexsmirnov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 23.8.2005 Репутация: 5 Всего: 7 |
НЕ ИСПОЛЬЗУЙТЕ СИНГЛЕТОН в web-приложениях в чистом виде ! В силу особенности загрузчиков, или если переложите куда-нибудь в общие библиотеки, может оказаться что один экземпляр будет использоваться сразу несколькими приложениями, или остаться активным после redeploy. Экземпляр можно привязать к ContextClassLoader ( он у каждого приложения свой ) или, лучше в init-методах создавать и сохранять в ServletContext. Тогда можно и закрытие отслеживать по событиям.
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |