Просто немного предыстории, я новый разработчик, который недавно принял крупный проект после того, как старший разработчик покинул компанию, прежде чем я смог понять, как он это структурировал.Я постараюсь объяснить мою проблему как можно лучше.
Это приложение создает несколько потоков MessageListner для чтения объектов из очередей JMS.Как только объект получен, данные обрабатываются на основе некоторой бизнес-логики, а затем сопоставляются с постоянным объектом для сохранения в базе данных Oracle с помощью hibernate EntityManager.
До тех пор, пока несколько недель назад не былолюбые серьезные проблемы с этой конфигурацией в прошлом году или около того с тех пор, как я присоединился к проекту.Но для одной из очередей (проблема изолирована от этой конкретной очереди) управляемый компонент Spring, который обрабатывает полученный объект, зависает в методе ниже.Моя отладка привела меня к выводу, что она завершила все в методе, но зависает после завершения.После нескольких недель попыток решить эту проблему, я дошел до конца своей проблемы.Любая помощь с этим будет принята с благодарностью.
Поскольку каждый MessageListner получает свой собственный процессор, этот метод зависания влияет только на входящие данные в одной очереди.
@Transactional(propagation = Propagation.REQUIRES_NEW , timeout = 180)
public void update(UserRelatedData userData, User user,Company company,...)
{
...
....
//business logic performed on user object
....
......
entityMgr.persist(user);
//business logic performed on userData object
...
....
entityMgr.persist(userData);
...
....
entityMgr.flush();
}
Я вставил операторы отладки просто для обхода метода, и он завершает все, включаяentityMgr.flush. ().