Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Struts, Action и синхронизация / 20 сообщений из 20, страница 1 из 1
02.11.2005, 17:22
    #33358351
220 V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
В методе execute() наследника Action вызываются private-методы, которым передаются HttpServletRequest, HttpServletResponse. Но это неудобно таскать за собой хвост из параметров. Удобнее сохранить его в переменную класса (ну и геттеры/сеттеры и все такое). Однако насколько мне известно, у Struts какие-то проблемы (кто-то скажет фичи) с синхронизацией, и один экземпляр экшина будет использоваться всеми запросами. И значит, переменная класса обламывается. Есть выход?
...
Рейтинг: 0 / 0
02.11.2005, 17:44
    #33358430
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
1)ThreadLocal
2)упаковать параметры в бин и дергать его геттеры-сеттеры и все такое
3)выхода нет!

"220 V" <nospam@sql.ru>; wrote in message news:2032599@sql.ru...
В методе execute() наследника Action вызываются private-методы, которым
передаются HttpServletRequest, HttpServletResponse. Но это неудобно таскать
за собой хвост из параметров. Удобнее сохранить его в переменную класса (ну
и геттеры/сеттеры и все такое). Однако насколько мне известно, у Struts
какие-то проблемы (кто-то скажет фичи) с синхронизацией, и один экземпляр
экшина будет использоваться всеми запросами. И значит, переменная класса
обламывается. Есть выход?
Тема Ответить

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
02.11.2005, 18:11
    #33358530
bolgare
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
На самом деле выход есть элементарный:
во первых я не уверен, что по умолчанию при разных запросах будет дергаться один и тот же акшен (где это написано), то что actionForm храниться в сессии это да, а про акшены не уверен.
во вторых у акшена как и form-bean есть scope, т.е. если в struts-config прописать
<action
path="/logonSubmit"
type="app.LogonAction"
name="logonForm" scope="request" ...(struts in action.pdf page 35)
то видимо (не нашел подтверждения) он будет создаваться заново при каждом запросе.
...
Рейтинг: 0 / 0
02.11.2005, 18:27
    #33358567
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
>>я не уверен, что по умолчанию при разных запросах будет дергаться один и
тот же акшен

откуда неуверенность? :)

>>то видимо (не нашел подтверждения) он будет создаваться заново при каждом
запросе

смотрим в javadoc - класс ActionConfig

scope - scope ("request" or "session") within which our form bean is
accessed, if any.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
02.11.2005, 19:06
    #33358676
bolgare
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
признаю, лоханулся :)
ну значит один вариант
переопределить метод execute чтоб он создавал новый, но енто уже изврат
...
Рейтинг: 0 / 0
03.11.2005, 11:20
    #33359528
johanna
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
220 VВ методе execute() наследника Action вызываются private-методы, которым передаются HttpServletRequest, HttpServletResponse. Но это неудобно таскать за собой хвост из параметров. Удобнее сохранить его в переменную класса (ну и геттеры/сеттеры и все такое). Однако насколько мне известно, у Struts какие-то проблемы (кто-то скажет фичи) с синхронизацией, и один экземпляр экшина будет использоваться всеми запросами. И значит, переменная класса обламывается. Есть выход?
читаю читаю и не могу понять в чём суть вопроса?
...
Рейтинг: 0 / 0
03.11.2005, 11:23
    #33359537
johanna
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
Pitbull terrier
1)ThreadLocal
2)упаковать параметры в бин и дергать его геттеры-сеттеры и все такое
3)выхода нет!


что в бин упаковать это ясно, а ThreadLocal зачем?
...
Рейтинг: 0 / 0
03.11.2005, 11:41
    #33359611
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
>>что в бин упаковать это ясно, а ThreadLocal зачем?


ну хочет пациент сетить члены класса экшена параметрами и затем читать их из
private-методов
создаем для каждого параметра ThreadLocal<ParamType> контейнер, и вычитываем
оттуда значения.
отсутствие проблем с синхронизацией налетсо

(я не говорю что это хорошее решение, просто вариант)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
03.11.2005, 11:52
    #33359651
johanna
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
а что без этого нельзя обойтись? то ли голова у меня седня туго работает, то ли тут объяснили не совсем понятно.
есть екшн, есть бин отдельно. создай экземпляр бина, через сеты поставь параметры в бин и передавай в методы.
зачем ThreadLocal?
...
Рейтинг: 0 / 0
03.11.2005, 11:54
    #33359656
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
да без всего можно обойтись
просто как вариант

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
03.11.2005, 12:00
    #33359681
johanna
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
Pitbull terrier
да без всего можно обойтись
просто как вариант

Posted via ActualForum NNTP Server 1.3

а зачем такой замороченный вариант?
...
Рейтинг: 0 / 0
03.11.2005, 12:02
    #33359691
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
:)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
03.11.2005, 12:04
    #33359698
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
johanna Pitbull terrier
да без всего можно обойтись
просто как вариант

Posted via ActualForum NNTP Server 1.3

а зачем такой замороченный вариант?
:) потомучто это вариант, а варианты они ведь разные бывают :)
...
Рейтинг: 0 / 0
03.11.2005, 12:27
    #33359789
johanna
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
bolgareНа самом деле выход есть элементарный:
во первых я не уверен, что по умолчанию при разных запросах будет дергаться один и тот же акшен (где это написано), то что actionForm храниться в сессии это да, а про акшены не уверен.
во вторых у акшена как и form-bean есть scope, т.е. если в struts-config прописать
<action
path="/logonSubmit"
type="app.LogonAction"
name="logonForm" scope="request" ...(struts in action.pdf page 35)
то видимо (не нашел подтверждения) он будет создаваться заново при каждом запросе.
это делается не для Action a для ActionForm.
...
Рейтинг: 0 / 0
03.11.2005, 12:28
    #33359801
johanna
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
всё равно хотелось бы знать, чего хотел спросить автор вопроса.
...
Рейтинг: 0 / 0
03.11.2005, 22:25
    #33361265
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
johanna 220 VВ методе execute() наследника Action вызываются private-методы, которым передаются HttpServletRequest, HttpServletResponse. Но это неудобно таскать за собой хвост из параметров. Удобнее сохранить его в переменную класса (ну и геттеры/сеттеры и все такое). Однако насколько мне известно, у Struts какие-то проблемы (кто-то скажет фичи) с синхронизацией, и один экземпляр экшина будет использоваться всеми запросами. И значит, переменная класса обламывается. Есть выход?
читаю читаю и не могу понять в чём суть вопроса?

Товарищ боится, что если он запомнит request и response как атрибуты объекта класса-наследника Action, то при обработке запроса могут быть проблемы с доступом к этим атрибутам из других потоков.

Товарищ, не бойтесь. Если атрибуты не статические, никаких проблем не будет. Struts задействует для выполнения запроса определенный экземпляр класса-наследника Action и до окончания выполнения запроса (выхода из метода execute() ) только этот поток (поток контейнера, выполняющий запрос) будет иметь доступ к этому экземпляру.

В этом существенное отличие Action от Servlet.
...
Рейтинг: 0 / 0
03.11.2005, 23:18
    #33361296
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
М.Голованов
Товарищ боится, что если он запомнит request и response как атрибуты объекта класса-наследника Action, то при обработке запроса могут быть проблемы с доступом к этим атрибутам из других потоков.

Товарищ, не бойтесь. Если атрибуты не статические, никаких проблем не будет. Struts задействует для выполнения запроса определенный экземпляр класса-наследника Action и до окончания выполнения запроса (выхода из метода execute() ) только этот поток (поток контейнера, выполняющий запрос) будет иметь доступ к этому экземпляру.

В этом существенное отличие Action от Servlet.


правда?
а почему тогда в Oreilly's struts cookbook рекомендуется не сетить локальные поля именно по причине проблем с синхронизацией???
зы - доберусь до дома - проверю
...
Рейтинг: 0 / 0
04.11.2005, 11:11
    #33361485
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
проверил - один экземпляр экшена на приложение

откуда инфа про один экземпляр на поток?

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
04.11.2005, 12:45
    #33361619
johanna
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
johanna 220 VВ методе execute() наследника Action вызываются private-методы, которым передаются HttpServletRequest, HttpServletResponse. Но это неудобно таскать за собой хвост из параметров. Удобнее сохранить его в переменную класса (ну и геттеры/сеттеры и все такое). Однако насколько мне известно, у Struts какие-то проблемы (кто-то скажет фичи) с синхронизацией, и один экземпляр экшина будет использоваться всеми запросами. И значит, переменная класса обламывается. Есть выход?
читаю читаю и не могу понять в чём суть вопроса?

всё поняла в чём тут дело. (иногда туго доходит :))
выход есть - подумать над дизайном раз такой вопрос возник. :)

в приложении существует один экземпляр экшина,
как заметил уже неоднократно Pitbull terrier.
поэтому никаких локальных переменных класса, кроме разве констант, в экшине создавать не надо.
...
Рейтинг: 0 / 0
04.11.2005, 12:55
    #33361640
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Struts, Action и синхронизация
Pitbull terrier
проверил - один экземпляр экшена на приложение

откуда инфа про один экземпляр на поток?

Posted via ActualForum NNTP Server 1.3

да, действительно... один экземпляр на все потоки. так что номер не пройдет.

Я, однако, с такой проблемой не сталкиваюсь по той простой причине, что Action у меня - только контроллер. Все операции выполняются классами-наследниками Executor, которые достаются из пулов по одному на запрос. Можете следовать этой идее.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Struts, Action и синхронизация / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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