|
|
|
EJB 3.1: странное поведение @Singleton при использовании @WebListener?
|
|||
|---|---|---|---|
|
#18+
Просьба не пинать. С EJB 3.1 только начал знакомиться. Есть вот такой Singleton-бин, смысл которого как-бы отслеживать http-сессии: Код: java 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. 42. И вот такой простейший сервлет: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. При деплое (в glassfish 4.1) в выводе вижу такое: Код: powershell 1. 2. 3. После 1-го обращения к сервлету через браузер (который выдаёт "Bean(2) has count: 0") появляется: Код: powershell 1. 2. После выгрузки приложения: Код: powershell 1. 2. 3. Получается, что контейнер создаёт два экземпляра бина, помеченного как @Singleton. Разве это не противоречит его идеологии? p.s. Идею использовать вместе @Singleton и @WebListener взял из этого примера . p.p.s. Архив с maven-проектом в аттаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 15:29 |
|
||
|
EJB 3.1: странное поведение @Singleton при использовании @WebListener?
|
|||
|---|---|---|---|
|
#18+
Dim666p.s. Идею использовать вместе @Singleton и @WebListener взял из этого примера . Идея выглядит очень сомнительной. Парочке NetBeans/GF я бы не доверял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 15:39 |
|
||
|
EJB 3.1: странное поведение @Singleton при использовании @WebListener?
|
|||
|---|---|---|---|
|
#18+
Dim666, Если в класс добавить конструктор Код: java 1. 2. 3. 4. То можно узнать действительно ли создаются 2 экземпляра и увидеть кто именно их создаёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 15:58 |
|
||
|
EJB 3.1: странное поведение @Singleton при использовании @WebListener?
|
|||
|---|---|---|---|
|
#18+
@Singleton in java EJB Be careful with Singleton Session Bean Насколько я понимаю, аннотация @Singleton должна использоваться тогда, когда у вашего кода проблемы с многопоточностью, но если одного экземпляра не хватит для обслуживания запросов, контейнер создаст ещё один или даже несколько. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 16:47 |
|
||
|
EJB 3.1: странное поведение @Singleton при использовании @WebListener?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczDim666, Если в класс добавить конструктор То можно узнать действительно ли создаются 2 экземпляра и увидеть кто именно их создаёт.Конструктор вообще 3 раза отработал :-) Но для 1-го не выполнялись методы, помеченные @PostConstruct и @PreDestroy. Как я понимаю, 1-й экземпляр создаёт org.glassfish.ejb.startup.EjbApplication.loadContainers, 2-й - com.sun.enterprise.web.WebApplication.start, 3-й - com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke (если кому интересно, то архив дапмов в аттаче). В принципе наверно всё правильно: @Singleton должен обеспечивать единственный экземпляр бина для обращений от всех клиентов (в моём случае это обращение из сервлета)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 17:34 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38816213&tid=2126202]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
75ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 444ms |

| 0 / 0 |
