Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями. / 21 сообщений из 21, страница 1 из 1
20.10.2016, 23:26
    #39331121
davidovYV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
Всем Добрый день !
Очень нужна помощь! Не могу разобраться, почему приложение валится.
Подскажите, в чём может быть проблема. Для меня область совсем новая и незнакомая.

Было принято решение реализовать систему тестирования знаний на 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 очищается для освобождения ресурсов.
...
Рейтинг: 0 / 0
21.10.2016, 08:14
    #39331176
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
davidovYVПриложение написано, но апробацию не проходит: сыпятся разного рода ошибки при минимальной нагрузке (около 10 человек). Большей частью связанные с транзакциями.
Например: ...

И что, сразу посыпались все ошибки?
Честно говоря, не понятно как можно написать приложение, в котором сразу столько ошибок.

Если постепенно осваивать логику приложения, то можно понять на каком этапе возниккает ошибка и какая, а у вас все в куче - могу предположить, что никто ничего дельного не подскажет с таким описанием.

davidovYVPostgresql + EJB + JSF.
имхо, с jsf - это зря. лично я в нем разочаровался - тяжелый, не поворотливый и не гибкий фреймворк, хотя судя по описанию ошибок проблем с jsf не наблюдается.
...
Рейтинг: 0 / 0
21.10.2016, 09:20
    #39331207
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
Может не стоит использовать managed bean? Только CDI.
...
Рейтинг: 0 / 0
21.10.2016, 13:20
    #39331503
davidovYV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
rema174, Добрый день! Ошибки посыпались не сразу: отладка в процессе разработки шла сначала на одном, двух юзерах (при этом сначала транзакции не были включены вообще) и всё было хорошо.

При отключённых транзакциях, конечно пошла рассогласованность в данных, но для первого результата было достаточно...

Когда пришла пора провести первую апробацию на реальных людях, конечно транзакции были уже включены к этому времени, решили на небольшом количестве попробовать... 10-20 человек. Вот тогда и полезли проблемы.

По поводу Jsf - есть у него сложности ... но уже смотрим в сторону PrimeFaces и аналогов... Возможно, когда освоимся с направлением Java EE, что-то другое возьмём... но пока нужно было взять что-то для изучения и понимания механизмов... чтоб не тратить время выяснение, что лучше...
...
Рейтинг: 0 / 0
21.10.2016, 13:23
    #39331507
davidovYV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
olegeosМожет не стоит использовать managed bean? Только CDI.
Добрый день. Спасибо за отзыв.

Я назвал managed bean только для понимания, о каком слое я говорю. Реально используется CDI (@Named)
...
Рейтинг: 0 / 0
21.10.2016, 16:43
    #39331776
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
Просто интересно, у вас вся работа с базой происходит в ejb?
...
Рейтинг: 0 / 0
22.10.2016, 07:51
    #39332053
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
davidovYVrema174, Добрый день! Ошибки посыпались не сразу: отладка в процессе разработки шла сначала на одном, двух юзерах (при этом сначала транзакции не были включены вообще) и всё было хорошо.

При отключённых транзакциях, конечно пошла рассогласованность в данных, но для первого результата было достаточно...


Вот тут стоит насторожиться.
Если у вас бины сессионные, то как могут быть данные рассоглассованы (и вообще что вы под этим понимаете).

davidovYVКогда пришла пора провести первую апробацию на реальных людях, конечно транзакции были уже включены к этому времени, решили на небольшом количестве попробовать... 10-20 человек. Вот тогда и полезли проблемы.


Такое ощущение, что у вас statefull бины для работы с БД, ч/з которые одновременно лазят несколько сессий, и что-то там меняют.
Естественно возникают коллизии.
...
Рейтинг: 0 / 0
22.10.2016, 11:15
    #39332077
davidovYV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
olegeosПросто интересно, у вас вся работа с базой происходит в ejb?
Добрый день!
Не совсем понял вопрос ))
Но, как понял...
Нет не вся работа через EJB в том плане, что не всё через JPQL запросы: есть хранимые процедуры, есть даже низкоуровневый вызов connection для приведения колекции к DB Array, чтобы подать на вход процедуре из EJB (как это сделать через JPA, JPQL не смогли найти ... пришлось выкручиваться... хотя всё это вызывается внутри фасадного метода, посему в транзакции).
Есть даже один named native query....
Остальное в JPQL.
...
Рейтинг: 0 / 0
22.10.2016, 11:37
    #39332084
davidovYV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
mad_nazguldavidovYVrema174, Добрый день! Ошибки посыпались не сразу: отладка в процессе разработки шла сначала на одном, двух юзерах (при этом сначала транзакции не были включены вообще) и всё было хорошо.

При отключённых транзакциях, конечно пошла рассогласованность в данных, но для первого результата было достаточно...


Вот тут стоит насторожиться.
Если у вас бины сессионные, то как могут быть данные рассоглассованы (и вообще что вы под этим понимаете).


Добрый день! Да, я поясню )) конечно рассогласованность данных была не внутри методов ...
Но, по логике приложения, попытка создавалась в "контроллере попыток", а набор вопросов - в "контроллере вопросов" и всё это вызывалось в "контроллере процесса тестирования".
Конечно, на уровне контроллеров уже никаких транзакций нет, поэтому могло быть так, что попытка создавалась без вопросов... а так не должно быть, поэтому весь процесс создания попытки был опущен на уровень фасада.

mad_nazguldavidovYVКогда пришла пора провести первую апробацию на реальных людях, конечно транзакции были уже включены к этому времени, решили на небольшом количестве попробовать... 10-20 человек. Вот тогда и полезли проблемы.


Такое ощущение, что у вас statefull бины для работы с БД, ч/з которые одновременно лазят несколько сессий, и что-то там меняют.
Естественно возникают коллизии.

statefull бинов у нас нет, хотя уже понятно, что попытка должна быть именно такой потому, что изменяется на протяжении всего процесса тестирования изменяется одна и таже запись в разных методах и этапах тестирования.

По поводу нескольких сессий мне не совсем понятно.... вроде это stateless бины возвращаются в пул и могут несколькими сессиями использоваться (и то там одновременного доступа к одному и тому же объекту бина нет...), а statefull же только к конкретной сессии относятся...
Как через него могут одновременно несколько сессий лазить (только если в самом приложении разработчики реализуют многопоточность... но у нас этого нет: всё стандартно)
...
Рейтинг: 0 / 0
22.10.2016, 13:15
    #39332101
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
davidovYVДобрый день! Да, я поясню )) конечно рассогласованность данных была не внутри методов ...
Но, по логике приложения, попытка создавалась в "контроллере попыток", а набор вопросов - в "контроллере вопросов" и всё это вызывалось в "контроллере процесса тестирования".
Конечно, на уровне контроллеров уже никаких транзакций нет, поэтому могло быть так, что попытка создавалась без вопросов... а так не должно быть, поэтому весь процесс создания попытки был опущен на уровень фасада.


А зачем опускать создание попыток до уровня фасада?!
По идее попытки должны где-то храниться, например в БД.
Т.е. попытка это отдельная сущность, для которой нужна собственная модель и логика работы.
Аналогично с вопросами и пр.

davidovYVstatefull бинов у нас нет, хотя уже понятно, что попытка должна быть именно такой потому, что изменяется на протяжении всего процесса тестирования изменяется одна и таже запись в разных методах и этапах тестирования.


ИМХО вам таки нужен statefull bean где храниться "сессия"

davidovYVКак через него могут одновременно несколько сессий лазить (только если в самом приложении разработчики реализуют многопоточность... но у нас этого нет: всё стандартно)

Ну многопоточность в сервере приложений by default.
Самому писать не надо.


P.S. Я бы посоветовал все таки постараться писать stateless с сохранением "состояния сессии" в БД.
Т.е. приходят данные и id_сесии из контроллера.
Читаем нужные данные из БД.
Меняем их.
Сохраняем в БД.
Отправляем ответ в контроллер.

Так вам будет проще.

Потом наберетесь опыта и сможете сделать по другому.
...
Рейтинг: 0 / 0
22.10.2016, 13:35
    #39332107
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
mad_nazgulНу многопоточность в сервере приложений by default.
Самому писать не надо.
многопоточностью по умолчанию для ejb не самая оптимальная, уже не помню деталей, но настроить по себя, как надо, - всегда лучше
...
Рейтинг: 0 / 0
24.10.2016, 11:01
    #39332579
davidovYV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
Проблема не решена, но не падаем духом...
Как переделаем приложение и порешаем вопрос (надеюсь) - отпишусь !))
Всем спасибо большое!
...
Рейтинг: 0 / 0
24.10.2016, 13:47
    #39332716
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
Выбор стека технологий очень странный. Вы, кажется, и в Java-то не сильно. И брать при этом JSF+EJB, надо обладать определенным уровнем отваги. По ошибкам ощущение такое что где-то объекты между потоками шарятся. EntityManager, например? Нигде в поля не пишете? Только через CDI получаете?
GlassFish - очень глючный сам по себе. Хотя не похоже что ваши проблемы из за этого.

1. Похож на многопоточного использование Connection-а
2. Не является самостоятельным исключением. По стэку надо смотреть причину.
3. Тоже похоже на многопоточный доступ к однопоточному соединению
4. Аналогичен №1
5. Вот тут интересно бы было посмотреть полный stacktrace
6. Не является самостоятельным исключением.
7. Не является самостоятельным исключением.
8. Аналогичен №1
9. Даже не пытались разобраться в причине взаимоблокировки?

Показали бы пару примеров ваших фасадов и CDI бинов. Может там очевидные косяки.
...
Рейтинг: 0 / 0
31.10.2016, 19:21
    #39338262
davidovYV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
Всем добрый день ! Как и обещал, пишу, так как со многими ошибками получилось разобраться....
Некоторые были вызваны ошибками в 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 в БД.
...
Рейтинг: 0 / 0
31.10.2016, 19:47
    #39338270
davidovYV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
Однако вылезла другая проблема ... Эта ошибка появляется тем чаще, чем больше пользователей.

Обратившись к профайлеру мы увидели кучу блокировок в http threadPool между потоками (возможно в этом причина)
Большинство блокировок как раз в Facade Beans. При этом это могут быть как методы с Required, так и Supports уровнями транзакций.


Ключевым здесь является метод ManualUpdate(). Он вызывается каждый раз при нажатии кнопки
Ответить

CDI контроллер:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public Boolean manualUpdate(StudentQuestion studentQuestion, ArrayList<StudentAnswer> studentAnswerList) {
        try {
            if (studentQuestion != null && studentQuestion.getIdz() != null) {
                return getFacade().manualUpdate(studentQuestion, studentAnswerList);
            }
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
            System.out.println("StudentQuestionController -> manualUpdate " + ex);
        }
        return null;
    }


Facade Bean:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@TransactionAttribute(TransactionAttributeType.REQUIRED)
    public Boolean manualUpdate(StudentQuestion studentQuestion, ArrayList<StudentAnswer> studentAnswerList) {
        try {
            if (studentQuestion != null && studentQuestion.getIdz() != null) {
                em.merge(studentQuestion);
                if (studentAnswerList != null && !studentAnswerList.isEmpty()) {
                    studentAnswerF.manualUpdate(studentAnswerList);
                }
                return true;
            }
        } catch (Exception ex) {
            context.setRollbackOnly();
            System.err.println("StudentQuestionFacade -> manualUpdate ");
            ex.printStackTrace(System.err);
        }
        return null;
    }



Если у кого-то есть какие-то идеи - подскажите пожалуйста в какую сторону смотреть... что мы упустили....?

Возможно потребуется весь стек ошибки:

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)
...
Рейтинг: 0 / 0
01.11.2016, 18:37
    #39339265
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
это вам еще повезло что ошибки сыпятся, у мяня в проекте например ошибок никаких нет, а где-то подглючивает и вообще непонятно где искать
...
Рейтинг: 0 / 0
03.11.2016, 10:35
    #39340551
davidovYV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
rema174, добрый день! Сейчас пытаемся порешать вопрос с помощью профилирования ... может быть и Вам поможет профайлер. Сейчас пока используем YourKIT по временной лицензии.. Есть ещё JProfiler.
У нас пока профайлер показывает блокировки в Http-thread-pool, но чем это вызвано мы понят не можем.
...
Рейтинг: 0 / 0
03.11.2016, 10:46
    #39340562
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
davidovYV,
делайте тестовое приложение с минимальным кодом и функционалом.
Потом его под нагрузку до появления "ошибки посыпались".
...
Рейтинг: 0 / 0
15.11.2016, 13:21
    #39347480
davidovYV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
Всем добрый день !
Делюсь новостями: последнюю ошибку "java.lang.IllegalStateException: state.isBusy() : false" и все с ней связанные (типа transaction aborted) порешали.
Как я понял у сервера Glassfish 4.1.1 есть не решённый баг, из-за которого возникает конфликт потоков при обращении к транзакционным методам в фасадных бинах... (если ошибаюсь и у кого-то всё крутится на этом серваке без проблем - отпишитесь, расскажите, как у вас всё организовано).
Поэтому проблему порешали переходом на WyldFly 10.01, где всё заработало так, как и планировалось и стабильно.

Конечно переделали и приложение: перешли на viewScoped вместо Session там, где это было критично в контексте потокобезопасности... Разделили методы, которые могли асинхронно вызываться разными сервисами (оттестили это на Glassfish - не помогло: ошибки продолжали сыпаться в том же количестве, а на WyldFly с тем же JDBC драйвером постгреса всё пошло нормально).

Всем спасибо за помощь. !
Данный вопрос я не закрываю потому как ещё множество тонкостей с которыми придётся столкнуться. Буду результаты и траблы сюда писать.
...
Рейтинг: 0 / 0
15.11.2016, 13:38
    #39347504
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
davidovYV,

Спасибо за апдейт. Я писал выше что ГФ глючный. Но не знал что он окончательно сломан.
...
Рейтинг: 0 / 0
16.11.2016, 10:04
    #39348105
davidovYV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями.
BlazkowiczdavidovYV,

Спасибо за апдейт. Я писал выше что ГФ глючный. Но не знал что он окончательно сломан.


Добрый день ! Не за что )
Когда выбирали - знали, что глючный: не могли даже в админке пул коннектов создать из-за ошибок... поэтому взяли Payara.
Ориентировались на то, что GF считается эталонном (считался, пока Oracle активно его развивал) и его глюки заканчиваются на админской части.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / EJB+Postges+JSF Не работает приложение. Проблемы с транзакциями. / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]