Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по SingleThreadModel / 25 сообщений из 46, страница 1 из 2
26.09.2007, 12:24:58
    #34827310
324f4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Добрый день други! Помогите сервлет-чайнику!

В процессе разработки возникли такие вопросы:
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?
Заранее благодарен!
...
Рейтинг: 0 / 0
26.09.2007, 12:29:29
    #34827332
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
1). Данная модель запрещена, т.к. сильно снижается производительность. Забудьте о ней.
2). Я думаю, то же не лучшее решение.
Такой вопрос - а зачем вам нужно синхронизировать doPost? Наверняка, как-то можно без этого обойтись.
...
Рейтинг: 0 / 0
26.09.2007, 12:30:02
    #34827340
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
1) Зависит от реализации сервера, один из типичных вариантов - контейнер создаст один-единственный экземпляр сервлета и выстроит запросы к нему в очередь. Другой вариант - создание пула инстансов. Какой именно вариант используется в используемом Вами сервере - ответит документация.
2) С чего бы это оно будет создаваться, если сервлет не имплементит SingleThreadModel? Просто опять же обработка запросов будет производиться последовательно, а не параллельно.
ЗЫ SingleThreadModel вообще deprecated, так что не надо ее использовать, лучше методы сервлетов писать реентерабельными.
...
Рейтинг: 0 / 0
26.09.2007, 13:00:21
    #34827501
324f4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Leonidv
2). Я думаю, то же не лучшее решение.
Такой вопрос - а зачем вам нужно синхронизировать doPost? Наверняка, как-то можно без этого обойтись.
Возникла необходимость последовательной обработки метода doPost, так как при параллельных обработках возникают проблемы. В качестве контейнера сервлетов установлен Tomcat 5.0. Пока знаю только такие варианты синхронизации (см. мое сообщение). Если знаете варианты лучше, то пожалуйста подскажите )
...
Рейтинг: 0 / 0
26.09.2007, 13:07:55
    #34827531
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
324f4Возникла необходимость последовательной обработки метода doPost, так как при параллельных обработках возникают проблемы .
Вот их и надо решать.
...
Рейтинг: 0 / 0
26.09.2007, 13:16:26
    #34827582
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
324f4Возникла необходимость последовательной обработки метода doPost, так как при параллельных обработках возникают проблемы.
Ответ никакой. Это и так понятно. Напишите, какие проблемы возникают.
...
Рейтинг: 0 / 0
26.09.2007, 14:06:15
    #34827847
324f4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
В методе doPost создается некая объект-коллекция, которая заполняется значениями из запроса, БД затем закрывается.
...
Рейтинг: 0 / 0
26.09.2007, 14:14:07
    #34827885
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
324f4В методе doPost создается некая объект-коллекция, которая заполняется значениями из запроса, БД затем закрывается.
И в чем проблема?
...
Рейтинг: 0 / 0
26.09.2007, 14:18:33
    #34827905
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Blazkowicz 324f4В методе doPost создается некая объект-коллекция, которая заполняется значениями из запроса, БД затем закрывается.
И в чем проблема?
Видимо, объект-коллекция является полем сервлета...
...
Рейтинг: 0 / 0
26.09.2007, 14:43:40
    #34828027
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Зашедший Blazkowicz 324f4В методе doPost создается некая объект-коллекция, которая заполняется значениями из запроса, БД затем закрывается.
И в чем проблема?
Видимо, объект-коллекция является полем сервлета...
Либо объект класса Connection :)
...
Рейтинг: 0 / 0
26.09.2007, 14:53:41
    #34828066
324f4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Там используются объекты DFC, (Documenum Fundation Classes). Там дополнительно много всяких надстроек. Могу скинуть фрагмент исходника, если нужно.
...
Рейтинг: 0 / 0
26.09.2007, 15:25:02
    #34828190
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
324f4Там используются объекты DFC, (Documenum Fundation Classes). Там дополнительно много всяких надстроек. Могу скинуть фрагмент исходника, если нужно.
А объяснить на словах в чем проблема никак?
...
Рейтинг: 0 / 0
27.09.2007, 06:07:08
    #34829812
324f4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Проблема в том, что коллекция еще не успела закрыться, а к ней лезет уже другой поток.
Еще скажите, чем же синхронизация doPost() вам не по душе? Будет только последовательно он работать. Или же есть еще какие-то предложения?
...
Рейтинг: 0 / 0
27.09.2007, 06:18:36
    #34829814
324f4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Проблема в том, что не успевает коллекция отработать и закрыться, как в не лезет другой поток. Скажите лучше, чем синхронизированный метод doPost() вам не угодил. Ну будет он выполняться последовательно да и только. Или есть какие-то другие варианты решения проблемы?
...
Рейтинг: 0 / 0
27.09.2007, 10:24:30
    #34830187
kest_ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Синхронизированный doPost превратит твое приложение в однопользовательскую систему :)
Даже при нескольких одновременных пользователях начнутся тормоза.

Сделай так чтобы при синхронной работе сервлета проблем не возникало. Ты кстати не рассказал в чем они выражаются?
Используется поле сервлета? Это неправильно.
Ошибки при доступе к коллекции? Можно использовать синхронизированную коллекцию.
Проблема при доступе к содержимому коллекции? Нужно смотреть в чем проблема, и решать ее соответственно.
...
Рейтинг: 0 / 0
27.09.2007, 10:34:01
    #34830225
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
324f4Проблема в том, что не успевает коллекция отработать и закрыться, как в не лезет другой поток. Скажите лучше, чем синхронизированный метод doPost() вам не угодил. Ну будет он выполняться последовательно да и только. Или есть какие-то другие варианты решения проблемы?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 private   static  Collection list;

 public   void  doPost(...){
    ....  
     synchronized  (list){
        list.add(object);
    }
    ....  
}
...
Рейтинг: 0 / 0
27.09.2007, 11:19:54
    #34830393
324f4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Kachalov 324f4Проблема в том, что не успевает коллекция отработать и закрыться, как в не лезет другой поток. Скажите лучше, чем синхронизированный метод doPost() вам не угодил. Ну будет он выполняться последовательно да и только. Или есть какие-то другие варианты решения проблемы?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 private   static  Collection list;

 public   void  doPost(...){
    ....  
     synchronized  (list){
        list.add(object);
    }
    ....  
}

То есть нужно синхронизировать только объект коллеции? ) Но ведь это тоже приведет к задержке с работой данного объекта. За счет чего увеличится производительность? Ведь все равно потокам нужно будет ждать, пока с коллекцией не отработает уже захвативший коллекцию объект.
...
Рейтинг: 0 / 0
27.09.2007, 11:33:08
    #34830447
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
324f4То есть нужно синхронизировать только объект коллеции? ) Но ведь это тоже приведет к задержке с работой данного объекта. За счет чего увеличится производительность?
Ведь все равно потокам нужно будет ждать, пока с коллекцией не отработает уже захвативший коллекцию объект.
- производительность увеличивается за счет того что Вы синхронизируете не метод целиком (со всеми действиями которые в нем описаны и которые возможно вовсе не нуждаются в синхронизации), а только тот объект для которого этого действительно необходимо

- кроме того бывают уже синхронизированные коллекции (например Vector)

- кроме того можно более разумно писать код (я бы статическую коллекцию заводить не стал)
...
Рейтинг: 0 / 0
27.09.2007, 12:01:12
    #34830583
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
324f4 Kachalov 324f4Проблема в том, что не успевает коллекция отработать и закрыться, как в не лезет другой поток. Скажите лучше, чем синхронизированный метод doPost() вам не угодил. Ну будет он выполняться последовательно да и только. Или есть какие-то другие варианты решения проблемы?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 private   static  Collection list;

 public   void  doPost(...){
    ....  
     synchronized  (list){
        list.add(object);
    }
    ....  
}

То есть нужно синхронизировать только объект коллеции? ) Но ведь это тоже приведет к задержке с работой данного объекта. За счет чего увеличится производительность? Ведь все равно потокам нужно будет ждать, пока с коллекцией не отработает уже захвативший коллекцию объект.
Как уже написали - будет синхронизирован только один объект (который может быть нужен не во всех ветках исполнения в методе, к примеру), т.е. в принципе работать таки станет немного быстрее, чем при полной синхронизации, но в общем Вы правы - это не решение. Надо или порождать коллекцию и работать с ней исключительно внутри метода, или, например, создавать пул коллекций, брать свободную, после использования возвращать в пул и т.д.
...
Рейтинг: 0 / 0
27.09.2007, 12:09:31
    #34830627
324f4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
А если придется синхронизировать не один, а несколько объектов?) Еще ведь можно применять wait, notifiAll))
...
Рейтинг: 0 / 0
27.09.2007, 12:17:40
    #34830672
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
324f4А если придется синхронизировать не один, а несколько объектов?)
-для каждого свой блок synchronized

324f4Еще ведь можно применять wait, notifiAll))
- если не очень хорошо знакомы с многопоточным программирование то есть все шансы получить deadlock или не получить никакого эффекта вообще
...
Рейтинг: 0 / 0
27.09.2007, 12:28:20
    #34830725
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Может лучше использовать что-нибудь из java.util.concurrent? Например вот это:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/CopyOnWriteArrayList.html
Или реализовать читателя/писателя. Ведь не локальный список имеет смысл только если из него обращаться из нескольких сервлетов и, скорее всего, как раз по модели читатель/писатель.
Или я не прав?
...
Рейтинг: 0 / 0
27.09.2007, 13:35:51
    #34831086
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Kachalov
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 private   static  Collection list;

 public   void  doPost(...){
    ....  
     synchronized  (list){
        list.add(object);
    }
    ....  
}

Никогда не понимал - в чем смысл private static?..
От них всегда можно легко избавиться, они создают кучу неудобств, к тому же нафига вообще статические поля в сервлете?
324f4Или есть какие-то другие варианты решения проблемы?
Да, причем всегда. Думать надо головой а не другими частями тела.
...
Рейтинг: 0 / 0
27.09.2007, 13:39:44
    #34831111
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Timm Kachalov
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 private   static  Collection list;

 public   void  doPost(...){
    ....  
     synchronized  (list){
        list.add(object);
    }
    ....  
}

Никогда не понимал - в чем смысл private static?..
- блин, см. посты выше, это пример того как быть если уже сделано криво!
Kachalov- кроме того можно более разумно писать код (я бы статическую коллекцию заводить не стал)
...
Рейтинг: 0 / 0
27.09.2007, 14:06:18
    #34831236
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по SingleThreadModel
Timm...От них всегда можно легко избавиться...
Не всегда. Например, если используется некий "фреймворк", в котором такая фигня воткнута в базовый класс, а переписать это нельзя (какая-нить ERP).
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по SingleThreadModel / 25 сообщений из 46, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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