Управление очень длительными операциями с Java

на самом деле, у меня есть следующая схема:

  1. пользователь нажмите кнопку" огромная операция";
  2. Это называется спокойной службой;
  3. служба rest вызывает HugeOpServiceBean, который является EJB;
  4. этот EJB скажет очереди JMS, чтобы сделать HugeOperation;
  5. эта HugeOperation может иметь две или более реализаций, поэтому каждый MDBean, который слушает его, будет работать (что означает, что он может быть в другом .ухо)

Я хотел бы услышать, как вы, ребята, или предложить мне, чтобы я смог получить "статус" этих MDBeans.

в принципе, каждый MDBean будет запускать какой-то метод в списке какого-то типа объекта, поэтому, calc процент должен быть легким, я просто не знаю, как и какое лучшее архитектурное решение я мог бы сделать, чтобы сделать это доступным в каком-то RESTful сервисе.

спасибо заранее.

2 ответов


поскольку потребление и лечение MDB осуществляется, это все или ничего. Отображение прогресса будет сложным и потребует суб-транзакции для обновления прогресса. Я бы предложил chunnk работу в нескольких сообщениях JMS в EJB и отслеживать прогресс в терминах сообщений JMS, успешно потребляемых позже. См. Шаблоны интегрирования предприятия


спокойный способ справиться с этим было бы:

  1. верните клиенту код состояния HTTP 202 "принято" после первого вызова, чтобы указать, что запрос был успешным, но требуется дальнейшая обработка. Вы также можете предоставить URI с ответом, который клиент может использовать для запроса состояния "задания"
  2. реализуйте конечную точку, которую клиент может вызвать для запроса состояния задания.
  3. когда операция завершена, конечная точка из 2) выше будет выдавать постоянное перенаправление на фактический URI основного объекта, созданного операцией.