|
|
|
EJB Session Bean
|
|||
|---|---|---|---|
|
#18+
Есть JSF-бин, который инжектит EJB-бин (содержащий DAO для СУБД) аннотацией @EJB В момент рендеринга страницы все методы EJB-бина отрабатывают на ура. Но страничка содержит js/ajax-элементы, которые обращаются к тому-же EJB-бину уже после рендеринга страницы (всплывающие диалоги итд). Так вот в момент их использования EJB уже не может обратиться к СУБД, ругается следующей ошибкой: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. EJB-бин и JSF-бин оба установлены как session. В чем может быть проблема? ps: glassfish 3.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2012, 17:06:17 |
|
||
|
EJB Session Bean
|
|||
|---|---|---|---|
|
#18+
Ну ок, у вас закырта сессия - вроде бы проблема кристально ясна. Показывайте код своего EJB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2012, 17:19:55 |
|
||
|
EJB Session Bean
|
|||
|---|---|---|---|
|
#18+
Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2012, 17:20:55 |
|
||
|
EJB Session Bean
|
|||
|---|---|---|---|
|
#18+
Нет, вы что-то не то выложили. Вот это место надо: at ru.vac.pagecode.base.PageCodeBase.getNextDTOId (PageCodeBase.java:102) + что бы было видно, как в этот класс EntityManager инжектится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2012, 17:30:33 |
|
||
|
EJB Session Bean
|
|||
|---|---|---|---|
|
#18+
svenom, все JSF-бины наследуются от PageCodeBase. В нем есть метод: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Из бина вызываться должен следующим образом: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Я понимаю ситуацию, если JSF-бин помечен как request и после рендеринга страницы его уже не существует. Но он же session, значит и common должен оставаться в памяти до завершения пользовательского сеанса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2012, 17:34:11 |
|
||
|
EJB Session Bean
|
|||
|---|---|---|---|
|
#18+
Ну вот это явно какой-то ппц: Код: java 1. 2. Вы обратились к EJB: common.createQuery(). В этот момент он открыл сессию, создал объект Query и вернул его вам, потом закрыл сессию и транзакцию. Далее вы пытаетесь получить результат этот запроса, и он разумеется падает, так как EntityManager, через который вы получили Query был закрыт, все логично. Что вам надо сделать? Ни в коем случае не давать объектам, которые зависят от подключения к БД (Query, Statement, ResultSet, сущности с Lazy-зависимостями и т.д..), "сбегать" ("escape") за пределы EJB, вся работа с БД должна обязательно происходить внутри бизнес-метода EJB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2012, 17:44:11 |
|
||
|
EJB Session Bean
|
|||
|---|---|---|---|
|
#18+
svenomНу вот это явно какой-то ппц: Код: java 1. 2. Вы обратились к EJB: common.createQuery(). В этот момент он открыл сессию, создал объект Query и вернул его вам, потом закрыл сессию и транзакцию. Далее вы пытаетесь получить результат этот запроса, и он разумеется падает, так как EntityManager, через который вы получили Query был закрыт, все логично. Что вам надо сделать? Ни в коем случае не давать объектам, которые зависят от подключения к БД (Query, Statement, ResultSet, сущности с Lazy-зависимостями и т.д..), "сбегать" ("escape") за пределы EJB, вся работа с БД должна обязательно происходить внутри бизнес-метода EJB. Почему вы думаете что после CommonEJBLocal.createQuery закроется транзакция, какой у этого метода атрибут транзакции? Посмотрите в персистанс хмл какой используется датасорц и проветрте его валидность и попробуйте пропинговать, через менеджмент консоль апликейшин сервера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2012, 18:58:29 |
|
||
|
EJB Session Bean
|
|||
|---|---|---|---|
|
#18+
OOsalivanПочему вы думаете что после CommonEJBLocal.createQuery закроется транзакция, какой у этого метода атрибут транзакции?Потому что это явно следует из исключения - нету сессии, а значит нету и транзакции. Но при этом объект Query был создан, значит EntityManager внутри этого EJB живой, просто автор криво спроектировал свой EJB, бывает. OOsalivanПосмотрите в персистанс хмл какой используется датасорц и проветрте его валидность и попробуйте пропинговать, через менеджмент консоль апликейшин сервераДа написано же - часть функций отрабатывают работу с БД нормально, а часть дуплит. Поэтому нечего в persistence.xml смотреть, там все в порядке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2012, 19:03:33 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37647757&tid=2132643]: |
0ms |
get settings: |
16ms |
get forum list: |
29ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
68ms |
get topic data: |
21ms |
get forum data: |
6ms |
get page messages: |
94ms |
get tp. blocked users: |
3ms |
| others: | 388ms |
| total: | 639ms |

| 0 / 0 |
