|
|
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
Добрый день други! Помогите сервлет-чайнику! В процессе разработки возникли такие вопросы: 1) Как известно, если сервлет (назовем его servlet1) наследует класс SingleThreadModel, то контейнер использует отдельный экземпляр servlet1 для обработки каждого из запросов. Это приведет к тому, что каждый вызов метода service() будет обработан последовательно в своем экземпляре servlet1. Хотел узнать, после отработки метода service() отдельный экземпляр сервлета servlet1 удаляется из контейнера сервлетов или остается? 2) Еще вопрос: Если я синхронизирую метод doPost (см. код) код:public synchronized void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); System.out.println(req.getCharacterEncoding()); String xmlString = null; String my = null; ..... ...... } То будет создаваться отдельный экземпляр сервлета для метода doPost? Заранее благодарен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 12:24:58 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
1). Данная модель запрещена, т.к. сильно снижается производительность. Забудьте о ней. 2). Я думаю, то же не лучшее решение. Такой вопрос - а зачем вам нужно синхронизировать doPost? Наверняка, как-то можно без этого обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 12:29:29 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
1) Зависит от реализации сервера, один из типичных вариантов - контейнер создаст один-единственный экземпляр сервлета и выстроит запросы к нему в очередь. Другой вариант - создание пула инстансов. Какой именно вариант используется в используемом Вами сервере - ответит документация. 2) С чего бы это оно будет создаваться, если сервлет не имплементит SingleThreadModel? Просто опять же обработка запросов будет производиться последовательно, а не параллельно. ЗЫ SingleThreadModel вообще deprecated, так что не надо ее использовать, лучше методы сервлетов писать реентерабельными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 12:30:02 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
Leonidv 2). Я думаю, то же не лучшее решение. Такой вопрос - а зачем вам нужно синхронизировать doPost? Наверняка, как-то можно без этого обойтись. Возникла необходимость последовательной обработки метода doPost, так как при параллельных обработках возникают проблемы. В качестве контейнера сервлетов установлен Tomcat 5.0. Пока знаю только такие варианты синхронизации (см. мое сообщение). Если знаете варианты лучше, то пожалуйста подскажите ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 13:00:21 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
324f4Возникла необходимость последовательной обработки метода doPost, так как при параллельных обработках возникают проблемы . Вот их и надо решать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 13:07:55 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
324f4Возникла необходимость последовательной обработки метода doPost, так как при параллельных обработках возникают проблемы. Ответ никакой. Это и так понятно. Напишите, какие проблемы возникают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 13:16:26 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
В методе doPost создается некая объект-коллекция, которая заполняется значениями из запроса, БД затем закрывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 14:06:15 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
324f4В методе doPost создается некая объект-коллекция, которая заполняется значениями из запроса, БД затем закрывается. И в чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 14:14:07 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
Blazkowicz 324f4В методе doPost создается некая объект-коллекция, которая заполняется значениями из запроса, БД затем закрывается. И в чем проблема? Видимо, объект-коллекция является полем сервлета... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 14:18:33 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
Зашедший Blazkowicz 324f4В методе doPost создается некая объект-коллекция, которая заполняется значениями из запроса, БД затем закрывается. И в чем проблема? Видимо, объект-коллекция является полем сервлета... Либо объект класса Connection :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 14:43:40 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
Там используются объекты DFC, (Documenum Fundation Classes). Там дополнительно много всяких надстроек. Могу скинуть фрагмент исходника, если нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 14:53:41 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
324f4Там используются объекты DFC, (Documenum Fundation Classes). Там дополнительно много всяких надстроек. Могу скинуть фрагмент исходника, если нужно. А объяснить на словах в чем проблема никак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 15:25:02 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что коллекция еще не успела закрыться, а к ней лезет уже другой поток. Еще скажите, чем же синхронизация doPost() вам не по душе? Будет только последовательно он работать. Или же есть еще какие-то предложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 06:07:08 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что не успевает коллекция отработать и закрыться, как в не лезет другой поток. Скажите лучше, чем синхронизированный метод doPost() вам не угодил. Ну будет он выполняться последовательно да и только. Или есть какие-то другие варианты решения проблемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 06:18:36 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
Синхронизированный doPost превратит твое приложение в однопользовательскую систему :) Даже при нескольких одновременных пользователях начнутся тормоза. Сделай так чтобы при синхронной работе сервлета проблем не возникало. Ты кстати не рассказал в чем они выражаются? Используется поле сервлета? Это неправильно. Ошибки при доступе к коллекции? Можно использовать синхронизированную коллекцию. Проблема при доступе к содержимому коллекции? Нужно смотреть в чем проблема, и решать ее соответственно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 10:24:30 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
324f4Проблема в том, что не успевает коллекция отработать и закрыться, как в не лезет другой поток. Скажите лучше, чем синхронизированный метод doPost() вам не угодил. Ну будет он выполняться последовательно да и только. Или есть какие-то другие варианты решения проблемы? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 10:34:01 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
Kachalov 324f4Проблема в том, что не успевает коллекция отработать и закрыться, как в не лезет другой поток. Скажите лучше, чем синхронизированный метод doPost() вам не угодил. Ну будет он выполняться последовательно да и только. Или есть какие-то другие варианты решения проблемы? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. То есть нужно синхронизировать только объект коллеции? ) Но ведь это тоже приведет к задержке с работой данного объекта. За счет чего увеличится производительность? Ведь все равно потокам нужно будет ждать, пока с коллекцией не отработает уже захвативший коллекцию объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 11:19:54 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
324f4То есть нужно синхронизировать только объект коллеции? ) Но ведь это тоже приведет к задержке с работой данного объекта. За счет чего увеличится производительность? Ведь все равно потокам нужно будет ждать, пока с коллекцией не отработает уже захвативший коллекцию объект. - производительность увеличивается за счет того что Вы синхронизируете не метод целиком (со всеми действиями которые в нем описаны и которые возможно вовсе не нуждаются в синхронизации), а только тот объект для которого этого действительно необходимо - кроме того бывают уже синхронизированные коллекции (например Vector) - кроме того можно более разумно писать код (я бы статическую коллекцию заводить не стал) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 11:33:08 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
324f4 Kachalov 324f4Проблема в том, что не успевает коллекция отработать и закрыться, как в не лезет другой поток. Скажите лучше, чем синхронизированный метод doPost() вам не угодил. Ну будет он выполняться последовательно да и только. Или есть какие-то другие варианты решения проблемы? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. То есть нужно синхронизировать только объект коллеции? ) Но ведь это тоже приведет к задержке с работой данного объекта. За счет чего увеличится производительность? Ведь все равно потокам нужно будет ждать, пока с коллекцией не отработает уже захвативший коллекцию объект. Как уже написали - будет синхронизирован только один объект (который может быть нужен не во всех ветках исполнения в методе, к примеру), т.е. в принципе работать таки станет немного быстрее, чем при полной синхронизации, но в общем Вы правы - это не решение. Надо или порождать коллекцию и работать с ней исключительно внутри метода, или, например, создавать пул коллекций, брать свободную, после использования возвращать в пул и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 12:01:12 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
А если придется синхронизировать не один, а несколько объектов?) Еще ведь можно применять wait, notifiAll)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 12:09:31 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
324f4А если придется синхронизировать не один, а несколько объектов?) -для каждого свой блок synchronized 324f4Еще ведь можно применять wait, notifiAll)) - если не очень хорошо знакомы с многопоточным программирование то есть все шансы получить deadlock или не получить никакого эффекта вообще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 12:17:40 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
Может лучше использовать что-нибудь из java.util.concurrent? Например вот это: http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/CopyOnWriteArrayList.html Или реализовать читателя/писателя. Ведь не локальный список имеет смысл только если из него обращаться из нескольких сервлетов и, скорее всего, как раз по модели читатель/писатель. Или я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 12:28:20 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
Kachalov Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Никогда не понимал - в чем смысл private static?.. От них всегда можно легко избавиться, они создают кучу неудобств, к тому же нафига вообще статические поля в сервлете? 324f4Или есть какие-то другие варианты решения проблемы? Да, причем всегда. Думать надо головой а не другими частями тела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 13:35:51 |
|
||
|
Вопрос по SingleThreadModel
|
|||
|---|---|---|---|
|
#18+
Timm Kachalov Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Никогда не понимал - в чем смысл private static?.. - блин, см. посты выше, это пример того как быть если уже сделано криво! Kachalov- кроме того можно более разумно писать код (я бы статическую коллекцию заводить не стал) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 13:39:44 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34830447&tid=2144431]: |
0ms |
get settings: |
20ms |
get forum list: |
28ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
59ms |
get topic data: |
18ms |
get forum data: |
4ms |
get page messages: |
108ms |
get tp. blocked users: |
3ms |
| others: | 367ms |
| total: | 621ms |

| 0 / 0 |
