2012-05-31 2 views
1

Один из классов EJB вызывает внешний API & Я бы хотел повторить попытку, если произошла сбой после некоторой временной задержки. Поскольку управление потоком не является хорошей идеей (Thread.sleep (1000)) не рекомендуется, может ли кто-нибудь сказать мне, как отложить/приостановить процесс в течение определенного периода времени в EJB2 ?. Благодарю.TimeDelay in EJB2

ответ

0

Я предполагаю, что ваша проблема со сном в течение 1 секунды несколько раз является ненужным временем ожидания, если поток успешный.

Вместо сна вы можете попробовать использовать соединение вместо этого.

join(5000) 

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

Метод сна использует метод polling, тогда как соединение использует модифицированную схему interrupt.

+0

Спасибо, Джон. В контейнере EJB Managed & hibernate безопасно использовать Thread ?. Приложение будет иметь 15 MDB, и каждый MDB вызывает этот EJB-сервис, который будет иметь небольшую временную задержку ТОЛЬКО, если есть Исключение из внешнего API. Благодарю. – user1388356

0

Как обходной путь, если есть сбой, то вы можете создать таймер с соответствующей продолжительностью тайм-аута, которая в этом случае будет длительностью задержки.

В режиме тайм-аута вы можете снова позвонить в EJB, который дополнительно вызовет внешний API.

Смежные вопросы