|
|
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
В методе execute() наследника Action вызываются private-методы, которым передаются HttpServletRequest, HttpServletResponse. Но это неудобно таскать за собой хвост из параметров. Удобнее сохранить его в переменную класса (ну и геттеры/сеттеры и все такое). Однако насколько мне известно, у Struts какие-то проблемы (кто-то скажет фичи) с синхронизацией, и один экземпляр экшина будет использоваться всеми запросами. И значит, переменная класса обламывается. Есть выход? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 17:22 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 17:44 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
На самом деле выход есть элементарный: во первых я не уверен, что по умолчанию при разных запросах будет дергаться один и тот же акшен (где это написано), то что actionForm храниться в сессии это да, а про акшены не уверен. во вторых у акшена как и form-bean есть scope, т.е. если в struts-config прописать <action path="/logonSubmit" type="app.LogonAction" name="logonForm" scope="request" ...(struts in action.pdf page 35) то видимо (не нашел подтверждения) он будет создаваться заново при каждом запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 18:11 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
>>я не уверен, что по умолчанию при разных запросах будет дергаться один и тот же акшен откуда неуверенность? :) >>то видимо (не нашел подтверждения) он будет создаваться заново при каждом запросе смотрим в javadoc - класс ActionConfig scope - scope ("request" or "session") within which our form bean is accessed, if any. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 18:27 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
признаю, лоханулся :) ну значит один вариант переопределить метод execute чтоб он создавал новый, но енто уже изврат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 19:06 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
220 VВ методе execute() наследника Action вызываются private-методы, которым передаются HttpServletRequest, HttpServletResponse. Но это неудобно таскать за собой хвост из параметров. Удобнее сохранить его в переменную класса (ну и геттеры/сеттеры и все такое). Однако насколько мне известно, у Struts какие-то проблемы (кто-то скажет фичи) с синхронизацией, и один экземпляр экшина будет использоваться всеми запросами. И значит, переменная класса обламывается. Есть выход? читаю читаю и не могу понять в чём суть вопроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 11:20 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
Pitbull terrier 1)ThreadLocal 2)упаковать параметры в бин и дергать его геттеры-сеттеры и все такое 3)выхода нет! что в бин упаковать это ясно, а ThreadLocal зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 11:23 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
>>что в бин упаковать это ясно, а ThreadLocal зачем? ну хочет пациент сетить члены класса экшена параметрами и затем читать их из private-методов создаем для каждого параметра ThreadLocal<ParamType> контейнер, и вычитываем оттуда значения. отсутствие проблем с синхронизацией налетсо (я не говорю что это хорошее решение, просто вариант) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 11:41 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
а что без этого нельзя обойтись? то ли голова у меня седня туго работает, то ли тут объяснили не совсем понятно. есть екшн, есть бин отдельно. создай экземпляр бина, через сеты поставь параметры в бин и передавай в методы. зачем ThreadLocal? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 11:52 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
да без всего можно обойтись просто как вариант Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 11:54 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
Pitbull terrier да без всего можно обойтись просто как вариант Posted via ActualForum NNTP Server 1.3 а зачем такой замороченный вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 12:00 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
:) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 12:02 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
johanna Pitbull terrier да без всего можно обойтись просто как вариант Posted via ActualForum NNTP Server 1.3 а зачем такой замороченный вариант? :) потомучто это вариант, а варианты они ведь разные бывают :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 12:04 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 12:27 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
всё равно хотелось бы знать, чего хотел спросить автор вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 12:28 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
johanna 220 VВ методе execute() наследника Action вызываются private-методы, которым передаются HttpServletRequest, HttpServletResponse. Но это неудобно таскать за собой хвост из параметров. Удобнее сохранить его в переменную класса (ну и геттеры/сеттеры и все такое). Однако насколько мне известно, у Struts какие-то проблемы (кто-то скажет фичи) с синхронизацией, и один экземпляр экшина будет использоваться всеми запросами. И значит, переменная класса обламывается. Есть выход? читаю читаю и не могу понять в чём суть вопроса? Товарищ боится, что если он запомнит request и response как атрибуты объекта класса-наследника Action, то при обработке запроса могут быть проблемы с доступом к этим атрибутам из других потоков. Товарищ, не бойтесь. Если атрибуты не статические, никаких проблем не будет. Struts задействует для выполнения запроса определенный экземпляр класса-наследника Action и до окончания выполнения запроса (выхода из метода execute() ) только этот поток (поток контейнера, выполняющий запрос) будет иметь доступ к этому экземпляру. В этом существенное отличие Action от Servlet. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 22:25 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
М.Голованов Товарищ боится, что если он запомнит request и response как атрибуты объекта класса-наследника Action, то при обработке запроса могут быть проблемы с доступом к этим атрибутам из других потоков. Товарищ, не бойтесь. Если атрибуты не статические, никаких проблем не будет. Struts задействует для выполнения запроса определенный экземпляр класса-наследника Action и до окончания выполнения запроса (выхода из метода execute() ) только этот поток (поток контейнера, выполняющий запрос) будет иметь доступ к этому экземпляру. В этом существенное отличие Action от Servlet. правда? а почему тогда в Oreilly's struts cookbook рекомендуется не сетить локальные поля именно по причине проблем с синхронизацией??? зы - доберусь до дома - проверю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 23:18 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
проверил - один экземпляр экшена на приложение откуда инфа про один экземпляр на поток? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2005, 11:11 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
johanna 220 VВ методе execute() наследника Action вызываются private-методы, которым передаются HttpServletRequest, HttpServletResponse. Но это неудобно таскать за собой хвост из параметров. Удобнее сохранить его в переменную класса (ну и геттеры/сеттеры и все такое). Однако насколько мне известно, у Struts какие-то проблемы (кто-то скажет фичи) с синхронизацией, и один экземпляр экшина будет использоваться всеми запросами. И значит, переменная класса обламывается. Есть выход? читаю читаю и не могу понять в чём суть вопроса? всё поняла в чём тут дело. (иногда туго доходит :)) выход есть - подумать над дизайном раз такой вопрос возник. :) в приложении существует один экземпляр экшина, как заметил уже неоднократно Pitbull terrier. поэтому никаких локальных переменных класса, кроме разве констант, в экшине создавать не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2005, 12:45 |
|
||
|
Struts, Action и синхронизация
|
|||
|---|---|---|---|
|
#18+
Pitbull terrier проверил - один экземпляр экшена на приложение откуда инфа про один экземпляр на поток? Posted via ActualForum NNTP Server 1.3 да, действительно... один экземпляр на все потоки. так что номер не пройдет. Я, однако, с такой проблемой не сталкиваюсь по той простой причине, что Action у меня - только контроллер. Все операции выполняются классами-наследниками Executor, которые достаются из пулов по одному на запрос. Можете следовать этой идее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2005, 12:55 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33359651&tid=2151053]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
204ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 571ms |

| 0 / 0 |
