|
|
|
Непонятная работа синглтона
|
|||
|---|---|---|---|
|
#18+
Есть некий синглтон, который хранит состояние (state): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. При некоем действии (допустим, на сайт/страничку зашел новый пользователь) - из сервлета - было изменено состояние синглтона: Single.setState(false). Для отслеживания состояния есть Runnable класс (также он хранит ссылки на всех слушателей, которых надо будет оповестить об изменившемся состоянии), в котором постоянно проверяется состояние синглтона и если изменилось - производить дальнейшие действия (dispatchUpdate). Например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Вопрос состоит в следующем: при изменении флага в синглтоне мой верификатор не определяет это изменение (выделено красным). Насколько я понимаю, принцип синглтона и состоит в том, что может существовать только один экземпляр этого класса. Если говорить простым языком, то все другие классы работают с ним как с переменной, значение которой едино для всех и на любой стадии. Так ли это? В чем может состоять моя ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2007, 18:15:09 |
|
||
|
Непонятная работа синглтона
|
|||
|---|---|---|---|
|
#18+
Применение синглетона в J2EE не есть хорошая практика. Погуглите по ключевым словам J2EE singleton Коротко аргументы приведены тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2007, 18:30:07 |
|
||
|
Непонятная работа синглтона
|
|||
|---|---|---|---|
|
#18+
IDVsbruckВопрос состоит в следующем: при изменении флага в синглтоне мой верификатор не определяет это изменение (выделено красным). Насколько я понимаю, принцип синглтона и состоит в том, что может существовать только один экземпляр этого класса. Если говорить простым языком, то все другие классы работают с ним как с переменной, значение которой едино для всех и на любой стадии. Так ли это? В чем может состоять моя ошибка? Дебагом не пробовали? Breakpoint расставить в контрольных точках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2007, 18:36:19 |
|
||
|
Непонятная работа синглтона
|
|||
|---|---|---|---|
|
#18+
MikeGolovanovПрименение синглетона в J2EE не есть хорошая практика. Погуглите по ключевым словам J2EE singleton Коротко аргументы приведены тут Ерунда. В чистом EJB нельзя добится поведения singleton. Это да. Singleton в целом плохая практика. Это тоже да. А относительно J2EE в целом, это фигня. Можно и многие к сожалению пользуются. Тут вообще много к чему можно придратся. Дополнительный поток вместо wait/notify постоянно молотит холостой цикл, сажая ресурсы CPU на эту ерунду. С тем же успехом можно значения и в ServletContext помещать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2007, 18:41:34 |
|
||
|
Непонятная работа синглтона
|
|||
|---|---|---|---|
|
#18+
Шутишь, да? :) Single.getInstance().getState() получает состояние на момент запуска рунейбл-класса (по крайней мере). Думаю, я могу не до конца понимать смысл и назначение синглтона, за чем и обратился в форум. Как альтернатива: мне нужна некая сущность, которая бы могла хранить состояние (флаги, набор переменных "для всех", пр.) - ну не читать и записывать же постоянно файл на сервере с состояниями - с таким циклом и количеством посещений в винте можно будет дырку сделать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2007, 18:42:51 |
|
||
|
Непонятная работа синглтона
|
|||
|---|---|---|---|
|
#18+
Это называется «Накуя козе баян»? Если уж начали через задницу делать — постелите соломки: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Синглтоны пошел вкрячивать... Ужоснах... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2007, 18:52:11 |
|
||
|
Непонятная работа синглтона
|
|||
|---|---|---|---|
|
#18+
IDVsbruck Как альтернатива: мне нужна некая сущность, которая бы могла хранить состояние (флаги, набор переменных "для всех", пр.) - ну не читать и записывать же постоянно файл на сервере с состояниями - с таким циклом и количеством посещений в винте можно будет дырку сделать :) Может есть смысл сделать через ServletContext + ServletContextAttributeListener? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2007, 06:58:56 |
|
||
|
Непонятная работа синглтона
|
|||
|---|---|---|---|
|
#18+
IDVsbruckЕсть некий синглтон, который хранит состояние (state): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. При некоем действии (допустим, на сайт/страничку зашел новый пользователь) - из сервлета - было изменено состояние синглтона: Single.setState(false). Для отслеживания состояния есть Runnable класс (также он хранит ссылки на всех слушателей, которых надо будет оповестить об изменившемся состоянии), в котором постоянно проверяется состояние синглтона и если изменилось - производить дальнейшие действия (dispatchUpdate). Например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Вопрос состоит в следующем: при изменении флага в синглтоне мой верификатор не определяет это изменение (выделено красным). Насколько я понимаю, принцип синглтона и состоит в том, что может существовать только один экземпляр этого класса. Если говорить простым языком, то все другие классы работают с ним как с переменной, значение которой едино для всех и на любой стадии. Так ли это? В чем может состоять моя ошибка? Ошибка прежде всего в том что каждый тред - хранит слепок объекта на определенный момент - если хотите этого избежать то надо объявить переменную volatile (это самое простое) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 14:51:14 |
|
||
|
Непонятная работа синглтона
|
|||
|---|---|---|---|
|
#18+
IDVsbruckШутишь, да? :) Single.getInstance().getState() получает состояние на момент запуска рунейбл-класса (по крайней мере). Думаю, я могу не до конца понимать смысл и назначение синглтона, за чем и обратился в форум. Как альтернатива: мне нужна некая сущность, которая бы могла хранить состояние (флаги, набор переменных "для всех", пр.) - ну не читать и записывать же постоянно файл на сервере с состояниями - с таким циклом и количеством посещений в винте можно будет дырку сделать :) Не понял - а почему не делать это в базе?? Почему не сохранять состояния в базе??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 14:55:56 |
|
||
|
Непонятная работа синглтона
|
|||
|---|---|---|---|
|
#18+
Java Programmer Не понял - а почему не делать это в базе?? Почему не сохранять состояния в базе??? Ну вообще в базе дорого хранить такие вещи. Много накладных расходов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 20:19:03 |
|
||
|
Непонятная работа синглтона
|
|||
|---|---|---|---|
|
#18+
Очень много обращений и опросов. Не хочу нагружать. Так сказать, оптимизация процесса - быстро, дешево и стильно :) Спасибо товарищу выше (Софтпроктологу) - подсказал направление, так действительно лучше. Но без синглтона не обойтись - руннейбл должен быть один, а обращаются разные слушатели, нельзя их плодить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 20:22:16 |
|
||
|
Непонятная работа синглтона
|
|||
|---|---|---|---|
|
#18+
IDVsbruckОчень много обращений и опросов. Не хочу нагружать. Так сказать, оптимизация процесса - быстро, дешево и стильно :) Спасибо товарищу выше (Софтпроктологу) - подсказал направление, так действительно лучше. Но без синглтона не обойтись - руннейбл должен быть один, а обращаются разные слушатели, нельзя их плодить. кстати интересная ветка тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 20:29:22 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34926444&tid=2144062]: |
0ms |
get settings: |
13ms |
get forum list: |
22ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
51ms |
get topic data: |
18ms |
get forum data: |
5ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 354ms |
| total: | 541ms |

| 0 / 0 |
