Приостановить выполнение процесса на некоторое время в ejb - PullRequest
1 голос
/ 24 ноября 2011

Думаю, я не первый, кто столкнулся с этой проблемой. Иногда пользователь отправляет кучу данных на сервер, и эти данные будет отображаться на странице ответа. Для того, чтобы дать пользователям иллюзию что передача данных и процесс происходит быстро. Мы обычно делаем это асинхронно. Теперь проблема в том, что по каким-то причинам эти данные должны сначала идти в базу данных, и быть выбранным, чтобы появиться на странице ответа. Если страница ответа отображается для пользователя слишком быстро, асинхронная отправка может не завершиться; Теперь я звоню

Thread.sleep ();

перед тем, как позвонить, я устанавливаю ResponsePage ().

, но нить в EJB не рекомендуется. Кто-нибудь знает альтернативы? Спасибо

1 Ответ

0 голосов
/ 24 ноября 2011

Это только что обсуждалось в этом вопросе: Thread.sleep () в EJB .

Я бы разделил логику на два EJB: один для вставки пользовательских данных в БДи один для получения его.Ваш веб-слой будет вызывать одну за другой, что приведет к двум отдельным транзакциям, которые должны быть правильно упорядочены базой данных (тем не менее, это может зависеть от других факторов, таких как изоляция транзакции).

EDIT

Проблема с sleep() в том, что вы никогда не знаете, как долго ждать, поэтому это почти всегда плохая идея.Я вижу случай, когда Ajax push - ваш EJB должен немедленно вернуться со страницей, на которую будут отправлены данные после завершения обработки.Я не буду давать вам дальнейших советов по этой теме, поскольку я далек от опыта в этой области.

Все еще несовершенный, но лучше, чем sleep(), может синхронизироваться при блокировках базы данных: сначала EJB вставитданные и заблокировать некоторые записи в своей транзакции, второй EJB попытается заблокировать ту же запись и прочитать данные.Таким образом, второй EJB будет ждать минимально необходимого времени.

...