|
|
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
Всем Добрый день ! Очень нужна помощь! Не могу разобраться, почему приложение валится. Подскажите, в чём может быть проблема. Для меня область совсем новая и незнакомая. Было принято решение реализовать систему тестирования знаний на Postgresql + EJB + JSF. ОРМ - EclipseLink, Управление транзакциями - CMT. Сервер приложений GlassFish 4.1 Пул соединений с БД (в качестве эксперимента 900 соединений, было 32). Пул EJB (600 шт, было 60 ) Таймаут транзакции 120 сек. Приложение написано, но апробацию не проходит: сыпятся разного рода ошибки при минимальной нагрузке (около 10 человек). Большей частью связанные с транзакциями. ================== Например: 1. JTS5067: Unexpected error occurred in commit org.postgresql.xa.PGXAException: Not implemented: 2nd phase commit must be issued using an idle connection 2. A system exception occurred during an invocation on EJB TryFacade 3. javax.ejb.EJBException: Unable to complete container-managed transaction. Caused by: javax.transaction.SystemException: org.omg.CORBA.INTERNAL: jts.exception_on_resource_operation vmcid: 0x0 minor code: 0 completed: No 4. java.lang.RuntimeException: Got exception during XAResource.end: org.postgresql.xa.PGXAException: tried to call end without corresponding start call 5. Session event listener threw exception java.util.ConcurrentModificationException 6. A system exception occurred during an invocation on EJB TryFacade 7. javax.ejb.EJBException: Transaction aborted 8. JTS5041: The resource manager is doing work outside a global transaction org.postgresql.xa.PGXAException: Error disabling autocommit 9. Постоянные DeadLock в БД ==================== Описание приложения (сорри за многословие). Архитектура проекта следующая (сформирована автоматически maven в NetBeans, единственное, что изменено - это сделана связь между web проектом и EJB для доступа из ManagedBean к SessionBean): 1. MainProj(содержит всё нижеследующие модули) 2. EARProj (Модуль сборки) 3. EJBProj (EJB Модуль) 4. WEBProj (JSF Модуль) Структура БД примерно такая: 1. Таблица вопросов 2. Таблица ответов (эталоны) 3. Таблица вопросов на конкретную попытку 4. Таблица ответов (вариант студента) 5. Таблица попыток Структура EJB слоя: 1. Entity 2. StateLess FacadeBean Структура WEB слоя 1. ManagedBean (все SessionScoped) 2. Страницы Для каждого фасадного бина в веб слое есть свой контроллер (ManagedBean). Все методы фасадных бинов продублированы в контроллерах и при работе с веб слоем взаимодействуют между собой только контроллеры по средством CDI (они уже сами идут к своему фасаду ... и дальше в БД). Логика работы приложения следующая: 1. студент попадает на страницу информации о тесте (настройки, доступ к статистике по каждой попытке, кнопка приступить) 2. При входе в тест идёт проверка наличие вопросов (select count...) 3. Если всё норм - из "контроллера попытки" в "фасаде попытки" (TryFacade) вызывается метод в котором в транзакции создаётся попытка и набираются вопросы в БД (в этом методе вызывается QuestionFacade для набора вопросов). Всё обёрнуто в try-Catch и куча проверок где идёт установка RollBack в случае ошибки. 4 Всё норм - вызывается метод для случайного выбора вопроса из набора. 5 Предоставляется вопрос (содержимое вопроса и вариантов ответа достаётся из базы отдельными запросами) 6 человек выбирает вариант ответа и нажимает на кнопку "ответить" (здесь идёт валидация данных клиента и тд) 7. Из "контроллера попытки" вызывается "контроллер вопроса" и его метод проверки правильности ответа (а там вызывается метод "контроллера ответа" для сравнения всех вариантов ответа с эталонами). 8. После проверки вызывается метод "контроллера вопроса", который уже в "фасаде" в транзакции пишет результаты в БД. 9. Идёт поиск следующего вопроса. 10 и т.д. Все данные хранятся в сессии в соответствующих контроллерах. При выходе из процесса тестирования сессия и кэш EJB очищается для освобождения ресурсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 23:26 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
davidovYVПриложение написано, но апробацию не проходит: сыпятся разного рода ошибки при минимальной нагрузке (около 10 человек). Большей частью связанные с транзакциями. Например: ... И что, сразу посыпались все ошибки? Честно говоря, не понятно как можно написать приложение, в котором сразу столько ошибок. Если постепенно осваивать логику приложения, то можно понять на каком этапе возниккает ошибка и какая, а у вас все в куче - могу предположить, что никто ничего дельного не подскажет с таким описанием. davidovYVPostgresql + EJB + JSF. имхо, с jsf - это зря. лично я в нем разочаровался - тяжелый, не поворотливый и не гибкий фреймворк, хотя судя по описанию ошибок проблем с jsf не наблюдается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 08:14 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
Может не стоит использовать managed bean? Только CDI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 09:20 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
rema174, Добрый день! Ошибки посыпались не сразу: отладка в процессе разработки шла сначала на одном, двух юзерах (при этом сначала транзакции не были включены вообще) и всё было хорошо. При отключённых транзакциях, конечно пошла рассогласованность в данных, но для первого результата было достаточно... Когда пришла пора провести первую апробацию на реальных людях, конечно транзакции были уже включены к этому времени, решили на небольшом количестве попробовать... 10-20 человек. Вот тогда и полезли проблемы. По поводу Jsf - есть у него сложности ... но уже смотрим в сторону PrimeFaces и аналогов... Возможно, когда освоимся с направлением Java EE, что-то другое возьмём... но пока нужно было взять что-то для изучения и понимания механизмов... чтоб не тратить время выяснение, что лучше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 13:20 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
olegeosМожет не стоит использовать managed bean? Только CDI. Добрый день. Спасибо за отзыв. Я назвал managed bean только для понимания, о каком слое я говорю. Реально используется CDI (@Named) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 13:23 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
Просто интересно, у вас вся работа с базой происходит в ejb? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 16:43 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
davidovYVrema174, Добрый день! Ошибки посыпались не сразу: отладка в процессе разработки шла сначала на одном, двух юзерах (при этом сначала транзакции не были включены вообще) и всё было хорошо. При отключённых транзакциях, конечно пошла рассогласованность в данных, но для первого результата было достаточно... Вот тут стоит насторожиться. Если у вас бины сессионные, то как могут быть данные рассоглассованы (и вообще что вы под этим понимаете). davidovYVКогда пришла пора провести первую апробацию на реальных людях, конечно транзакции были уже включены к этому времени, решили на небольшом количестве попробовать... 10-20 человек. Вот тогда и полезли проблемы. Такое ощущение, что у вас statefull бины для работы с БД, ч/з которые одновременно лазят несколько сессий, и что-то там меняют. Естественно возникают коллизии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2016, 07:51 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
olegeosПросто интересно, у вас вся работа с базой происходит в ejb? Добрый день! Не совсем понял вопрос )) Но, как понял... Нет не вся работа через EJB в том плане, что не всё через JPQL запросы: есть хранимые процедуры, есть даже низкоуровневый вызов connection для приведения колекции к DB Array, чтобы подать на вход процедуре из EJB (как это сделать через JPA, JPQL не смогли найти ... пришлось выкручиваться... хотя всё это вызывается внутри фасадного метода, посему в транзакции). Есть даже один named native query.... Остальное в JPQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2016, 11:15 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
mad_nazguldavidovYVrema174, Добрый день! Ошибки посыпались не сразу: отладка в процессе разработки шла сначала на одном, двух юзерах (при этом сначала транзакции не были включены вообще) и всё было хорошо. При отключённых транзакциях, конечно пошла рассогласованность в данных, но для первого результата было достаточно... Вот тут стоит насторожиться. Если у вас бины сессионные, то как могут быть данные рассоглассованы (и вообще что вы под этим понимаете). Добрый день! Да, я поясню )) конечно рассогласованность данных была не внутри методов ... Но, по логике приложения, попытка создавалась в "контроллере попыток", а набор вопросов - в "контроллере вопросов" и всё это вызывалось в "контроллере процесса тестирования". Конечно, на уровне контроллеров уже никаких транзакций нет, поэтому могло быть так, что попытка создавалась без вопросов... а так не должно быть, поэтому весь процесс создания попытки был опущен на уровень фасада. mad_nazguldavidovYVКогда пришла пора провести первую апробацию на реальных людях, конечно транзакции были уже включены к этому времени, решили на небольшом количестве попробовать... 10-20 человек. Вот тогда и полезли проблемы. Такое ощущение, что у вас statefull бины для работы с БД, ч/з которые одновременно лазят несколько сессий, и что-то там меняют. Естественно возникают коллизии. statefull бинов у нас нет, хотя уже понятно, что попытка должна быть именно такой потому, что изменяется на протяжении всего процесса тестирования изменяется одна и таже запись в разных методах и этапах тестирования. По поводу нескольких сессий мне не совсем понятно.... вроде это stateless бины возвращаются в пул и могут несколькими сессиями использоваться (и то там одновременного доступа к одному и тому же объекту бина нет...), а statefull же только к конкретной сессии относятся... Как через него могут одновременно несколько сессий лазить (только если в самом приложении разработчики реализуют многопоточность... но у нас этого нет: всё стандартно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2016, 11:37 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
davidovYVДобрый день! Да, я поясню )) конечно рассогласованность данных была не внутри методов ... Но, по логике приложения, попытка создавалась в "контроллере попыток", а набор вопросов - в "контроллере вопросов" и всё это вызывалось в "контроллере процесса тестирования". Конечно, на уровне контроллеров уже никаких транзакций нет, поэтому могло быть так, что попытка создавалась без вопросов... а так не должно быть, поэтому весь процесс создания попытки был опущен на уровень фасада. А зачем опускать создание попыток до уровня фасада?! По идее попытки должны где-то храниться, например в БД. Т.е. попытка это отдельная сущность, для которой нужна собственная модель и логика работы. Аналогично с вопросами и пр. davidovYVstatefull бинов у нас нет, хотя уже понятно, что попытка должна быть именно такой потому, что изменяется на протяжении всего процесса тестирования изменяется одна и таже запись в разных методах и этапах тестирования. ИМХО вам таки нужен statefull bean где храниться "сессия" davidovYVКак через него могут одновременно несколько сессий лазить (только если в самом приложении разработчики реализуют многопоточность... но у нас этого нет: всё стандартно) Ну многопоточность в сервере приложений by default. Самому писать не надо. P.S. Я бы посоветовал все таки постараться писать stateless с сохранением "состояния сессии" в БД. Т.е. приходят данные и id_сесии из контроллера. Читаем нужные данные из БД. Меняем их. Сохраняем в БД. Отправляем ответ в контроллер. Так вам будет проще. Потом наберетесь опыта и сможете сделать по другому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2016, 13:15 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
mad_nazgulНу многопоточность в сервере приложений by default. Самому писать не надо. многопоточностью по умолчанию для ejb не самая оптимальная, уже не помню деталей, но настроить по себя, как надо, - всегда лучше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2016, 13:35 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
Проблема не решена, но не падаем духом... Как переделаем приложение и порешаем вопрос (надеюсь) - отпишусь !)) Всем спасибо большое! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 11:01 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
Выбор стека технологий очень странный. Вы, кажется, и в Java-то не сильно. И брать при этом JSF+EJB, надо обладать определенным уровнем отваги. По ошибкам ощущение такое что где-то объекты между потоками шарятся. EntityManager, например? Нигде в поля не пишете? Только через CDI получаете? GlassFish - очень глючный сам по себе. Хотя не похоже что ваши проблемы из за этого. 1. Похож на многопоточного использование Connection-а 2. Не является самостоятельным исключением. По стэку надо смотреть причину. 3. Тоже похоже на многопоточный доступ к однопоточному соединению 4. Аналогичен №1 5. Вот тут интересно бы было посмотреть полный stacktrace 6. Не является самостоятельным исключением. 7. Не является самостоятельным исключением. 8. Аналогичен №1 9. Даже не пытались разобраться в причине взаимоблокировки? Показали бы пару примеров ваших фасадов и CDI бинов. Может там очевидные косяки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 13:47 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
Всем добрый день ! Как и обещал, пишу, так как со многими ошибками получилось разобраться.... Некоторые были вызваны ошибками в PhaseListenere по крайней мере 5. Session event listener threw exception java.util.ConcurrentModificationException пропала. Убрали XA драйвера и ушли от PREPARED TRANSACTION у нас один сервер, вроде как не нужно. Ушло 1. JTS5067: Unexpected error occurred in commit org.postgresql.xa.PGXAException: Not implemented: 2nd phase commit must be issued using an idle connection 3. javax.ejb.EJBException: Unable to complete container-managed transaction. Caused by: javax.transaction.SystemException: org.omg.CORBA.INTERNAL: jts.exception_on_resource_operation vmcid: 0x0 minor code: 0 completed: No 4. java.lang.RuntimeException: Got exception during XAResource.end: org.postgresql.xa.PGXAException: tried to call end without corresponding start call 8. JTS5041: The resource manager is doing work outside a global transaction org.postgresql.xa.PGXAException: Error disabling autocommit С непониманием отнеслись мы к управлению сущностями. Была сделана связка Попытка OneToMany Вопрос OneToMany Варианты ответов. и установлен Cascade - ALL (Хоть и в одну сторону от владельца) но в сочетании с тем, что мы использовали старые куски кода для работы с БД ... Это не допустимо из-за того же каскадного обновления всех зависимых сущностей.... и так по кругу... Каскады мы убрали ... пока, чтоб исключить множественное обновление (временно: потом код оптимизируем.) Работаем с зависимыми сущностями пока как с отдельными коллекциями... Вроде бы тут ушли DeadLock в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 19:21 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
Однако вылезла другая проблема ... Эта ошибка появляется тем чаще, чем больше пользователей. Обратившись к профайлеру мы увидели кучу блокировок в http threadPool между потоками (возможно в этом причина) Большинство блокировок как раз в Facade Beans. При этом это могут быть как методы с Required, так и Supports уровнями транзакций. Ключевым здесь является метод ManualUpdate(). Он вызывается каждый раз при нажатии кнопки Ответить CDI контроллер: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Facade Bean: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Если у кого-то есть какие-то идеи - подскажите пожалуйста в какую сторону смотреть... что мы упустили....? Возможно потребуется весь стек ошибки: java.lang.IllegalStateException: state.isBusy() : false at com.sun.enterprise.resource.pool.ConnectionPool.resourceClosed(ConnectionPool.java:1008) at com.sun.enterprise.resource.pool.PoolManagerImpl.putbackResourceToPool(PoolManagerImpl.java:426) at com.sun.enterprise.resource.pool.PoolManagerImpl.resourceClosed(PoolManagerImpl.java:380) at com.sun.enterprise.resource.listener.LocalTxConnectionEventListener.connectionClosed(LocalTxConnectionEventListener.java:77) at com.sun.gjc.spi.ManagedConnectionImpl.connectionClosed(ManagedConnectionImpl.java:783) at com.sun.gjc.spi.base.ConnectionHolder.close(ConnectionHolder.java:214) at com.sun.gjc.spi.jdbc40.ConnectionHolder40.close(ConnectionHolder40.java:591) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.closeDatasourceConnection(DatabaseAccessor.java:495) at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.closeConnection(DatasourceAccessor.java:520) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.closeConnection(DatabaseAccessor.java:520) at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.decrementCallCount(DatasourceAccessor.java:290) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.closeStatement(DatabaseAccessor.java:413) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.releaseStatement(DatabaseAccessor.java:1674) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:705) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:560) at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2055) at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570) at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:258) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectOneRow(DatasourceCallQueryMechanism.java:714) at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRowFromTable(ExpressionQueryMechanism.java:2803) at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRow(ExpressionQueryMechanism.java:2756) at org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:555) at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1175) at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:904) at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1134) at org.eclipse.persistence.queries.ReadObjectQuery.execute(ReadObjectQuery.java:441) at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1222) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1857) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1839) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1790) at org.eclipse.persistence.internal.sessions.AbstractSession.readObject(AbstractSession.java:3719) at org.eclipse.persistence.internal.sessions.MergeManager.registerObjectForMergeCloneIntoWorkingCopy(MergeManager.java:1093) at org.eclipse.persistence.internal.sessions.MergeManager.mergeChangesOfCloneIntoWorkingCopy(MergeManager.java:557) at org.eclipse.persistence.internal.sessions.MergeManager.mergeChanges(MergeManager.java:313) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.mergeCloneWithReferences(UnitOfWorkImpl.java:3521) at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.mergeCloneWithReferences(RepeatableWriteUnitOfWork.java:387) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.mergeCloneWithReferences(UnitOfWorkImpl.java:3481) at org.eclipse.persistence.internal.jpa.EntityManagerImpl.mergeInternal(EntityManagerImpl.java:553) at org.eclipse.persistence.internal.jpa.EntityManagerImpl.merge(EntityManagerImpl.java:530) at com.sun.enterprise.container.common.impl.EntityManagerWrapper.merge(EntityManagerWrapper.java:305) at ru.rgups.ui.testSystem.facade.StudentAnswerFacade.manualUpdate(StudentAnswerFacade.java:44) at sun.reflect.GeneratedMethodAccessor370.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081) at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153) at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4789) at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64) at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52) at sun.reflect.GeneratedMethodAccessor77.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140) at sun.reflect.GeneratedMethodAccessor106.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369) at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4761) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4749) at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212) at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) at com.sun.proxy.$Proxy215.manualUpdate(Unknown Source) at ru.rgups.ui.testSystem.facade.__EJB31_Generated__StudentAnswerFacade__Intf____Bean__.manualUpdate(Unknown Source) at ru.rgups.ui.testSystem.facade.StudentQuestionFacade.manualUpdate(StudentQuestionFacade.java:70) at sun.reflect.GeneratedMethodAccessor365.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081) at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153) at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4789) at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64) at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52) at sun.reflect.GeneratedMethodAccessor77.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140) at sun.reflect.GeneratedMethodAccessor106.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369) at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4761) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4749) at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212) at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) at com.sun.proxy.$Proxy218.manualUpdate(Unknown Source) at ru.rgups.ui.testSystem.facade.__EJB31_Generated__StudentQuestionFacade__Intf____Bean__.manualUpdate(Unknown Source) at ru.rgups.ui.testSystem.view.StudentQuestionController.manualUpdate(StudentQuestionController.java:72) at ru.rgups.ui.testSystem.view.StudentQuestionController.questionCheck(StudentQuestionController.java:101) at ru.rgups.ui.testSystem.view.StudentQuestionController$Proxy$_$$_WeldClientProxy.questionCheck(Unknown Source) at ru.rgups.ui.testingProcess.TestingController.initTrying(TestingController.java:147) at sun.reflect.GeneratedMethodAccessor348.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at javax.el.ELUtil.invokeMethod(ELUtil.java:332) at javax.el.BeanELResolver.invoke(BeanELResolver.java:537) at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256) at com.sun.el.parser.AstValue.invoke(AstValue.java:283) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304) at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40) at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40) at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:147) at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814) at javax.faces.component.UICommand.broadcast(UICommand.java:300) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) at ru.rgups.ui.testSystem.security.LoginFilter.doFilter(LoginFilter.java:239) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:526) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571) at java.lang.Thread.run(Thread.java:745) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 19:47 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
это вам еще повезло что ошибки сыпятся, у мяня в проекте например ошибок никаких нет, а где-то подглючивает и вообще непонятно где искать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2016, 18:37 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
rema174, добрый день! Сейчас пытаемся порешать вопрос с помощью профилирования ... может быть и Вам поможет профайлер. Сейчас пока используем YourKIT по временной лицензии.. Есть ещё JProfiler. У нас пока профайлер показывает блокировки в Http-thread-pool, но чем это вызвано мы понят не можем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2016, 10:35 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
davidovYV, делайте тестовое приложение с минимальным кодом и функционалом. Потом его под нагрузку до появления "ошибки посыпались". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2016, 10:46 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
Всем добрый день ! Делюсь новостями: последнюю ошибку "java.lang.IllegalStateException: state.isBusy() : false" и все с ней связанные (типа transaction aborted) порешали. Как я понял у сервера Glassfish 4.1.1 есть не решённый баг, из-за которого возникает конфликт потоков при обращении к транзакционным методам в фасадных бинах... (если ошибаюсь и у кого-то всё крутится на этом серваке без проблем - отпишитесь, расскажите, как у вас всё организовано). Поэтому проблему порешали переходом на WyldFly 10.01, где всё заработало так, как и планировалось и стабильно. Конечно переделали и приложение: перешли на viewScoped вместо Session там, где это было критично в контексте потокобезопасности... Разделили методы, которые могли асинхронно вызываться разными сервисами (оттестили это на Glassfish - не помогло: ошибки продолжали сыпаться в том же количестве, а на WyldFly с тем же JDBC драйвером постгреса всё пошло нормально). Всем спасибо за помощь. ! Данный вопрос я не закрываю потому как ещё множество тонкостей с которыми придётся столкнуться. Буду результаты и траблы сюда писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 13:21 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
davidovYV, Спасибо за апдейт. Я писал выше что ГФ глючный. Но не знал что он окончательно сломан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 13:38 |
|
||
|
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczdavidovYV, Спасибо за апдейт. Я писал выше что ГФ глючный. Но не знал что он окончательно сломан. Добрый день ! Не за что ) Когда выбирали - знали, что глючный: не могли даже в админке пул коннектов создать из-за ошибок... поэтому взяли Payara. Ориентировались на то, что GF считается эталонном (считался, пока Oracle активно его развивал) и его глюки заканчиваются на админской части. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 10:04 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39331121&tid=2123487]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 408ms |

| 0 / 0 |
