Попытка управления потоками на вашем сервере JBoss в конечном итоге вызовет больше проблем и быстро превратится в кошмар. JBoss уже очень хорошо управляет соединениями с базой данных и транзакциями; поэтому, если ваша база данных не находится где-то за пределами вашей локальной сети, маловероятно, что ваша транзакция потерпит неудачу из-за перебоев в работе сети. Кроме того, добавление логики «повторных попыток» в ваши бизнес-методы (аля сеансные компоненты) также не очень хорошая идея, так как это приведет к длительным транзакциям, которые приведут к тайм-аутам транзакций и проблеме блокировки сущностей - что ставит вас в ту же самую ситуацию, что и менее вероятное отключение сети.
Как правило, вы будете отлавливать любые ошибки отката на стороне клиента и обрабатывать попытки там. Но если вам действительно нужно ввести поведение «повторных попыток» на стороне сервера, я бы порекомендовал использовать MessageDrivenBeans для асинхронного выполнения этих операций. Когда клиент вызывает метод для вашего сессионного компонента, вместо запуска бизнес-логики конструирует и доставляет Сообщение JMS в локальную очередь. Это сообщение будет содержать имя вызываемого метода и карту параметров, переданных клиентом. Прослушивание этой очереди будет MDB, который деконструирует сообщение, чтобы либо напрямую выполнить бизнес-логику, либо сделать вызов сессионному компоненту для выполнения логики. При наличии отката транзакции сообщение отправляется обратно в очередь и позже доставляется в MDB.
Для обмена сообщениями JBoss 4.2.3 вы можете добавить следующие свойства к своему сообщению JMS, чтобы контролировать время доставки и время, которое JBoss должен ждать, чтобы повторно доставить сообщение после сбоя:
JMS_JBOSS_SCHEDULED_DELIVERY
- принимает время доставки в миллис
JMS_JBOSS_REDELIVERY_DELAY
- количество миллисекунд ожидания до повторной доставки
Вы должны добавить эти значения в сообщение, прежде чем помещать их в очередь - манипулирование доставленным сообщением из MDB не работает. Также имейте в виду, что если сообщение доставлено слишком много раз (по умолчанию 10 раз), то оно будет перемещено в очередь писем о сделках (DLQ).