| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Singleton в Web приложении |
| Автор: Hidrag 14.2.2007, 13:32 |
| Такой вопрос: у меня есть веб приложение и есть БД работа с бд осуществляется через класс по паттерну Singleton. То есть при запросе клиента получаю инстанс класса и выполняю какие то действия, все последующие действия клиента с бд опять же осуществляются через этот инстанс. Но одно мне пока неизвестно: допустил клиент работает с веб приложением, для него создался инстанс класса для операций с БД. В этот момент подключается второй клиент, что будет в этом случае? При выполнении гетИнстанс он получит уже созданный инстанс предыдущим клиентом или для него будет создан свой объект, по скольку клиенты в разных сессиях? Или стоит отказаться написания своих классов для работы с БД и посмотреть в сторону того что предлагает сервер приложений? Например, у томката есть какие то методы для работы с БД, я пока не смотрел в ту сторону, а наверное есть смысл, не зря же они там |
| Автор: Hidrag 14.2.2007, 13:54 |
Вот это например: http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html Получается что для веб приложения много подключенных клиентов то же самое что для десктоп приложения много потоков которые обращаются к одному ресурсу? |
| Автор: tux 14.2.2007, 14:19 | ||||||
Примерно так. Каждый запрос к веб-приложению обрабатывается одним потоком. То есть привязки потоков к пользователям как правило нет. Поток для выполнения поступившего запроса выбирается из пула свободных.
Нет, когда завершит работу JVM. Экземпляр объекта в Singleton хранится в статическом поле, пока существует класс, будет существовать и этот экземпляр.
А, ну дак это не методы. Это вполне стандартный способ доступа к источнику данных используя JNDI. |
| Автор: w1nd 14.2.2007, 14:56 | ||
Или когда приложение передеплоят. Заморочки с загрузкой/выгрузкой классов никто не отменял. |
| Автор: tux 14.2.2007, 15:01 | ||
Да, точно. Про это забыл. |
| Автор: alexsmirnov 17.2.2007, 01:03 |
| НЕ ИСПОЛЬЗУЙТЕ СИНГЛЕТОН в web-приложениях в чистом виде ! В силу особенности загрузчиков, или если переложите куда-нибудь в общие библиотеки, может оказаться что один экземпляр будет использоваться сразу несколькими приложениями, или остаться активным после redeploy. Экземпляр можно привязать к ContextClassLoader ( он у каждого приложения свой ) или, лучше в init-методах создавать и сохранять в ServletContext. Тогда можно и закрытие отслеживать по событиям. |