Вы можете попробовать использовать RestEasy.
В RestEasy вы можете связать обработчик до и после вызова REST.
Вы можете хранить вызов REST перед обработчиком и подтвердить выполнение после его завершения.
Если REST не был выполнен ... его можно повторить, или это действие повторяется.
Код будет выглядеть примерно так (REQUEST):
@Provider
public class RestInterceptor implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext context) {
(RESPONSE)
@Provider
public class EventFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext containerRequestContext, ContainerResponseContext containerResponseContext) throws IOException {
Возникает вопрос, почему?
REST вызовы должны быть простыми атомными задачами, выполняемыми менее чем за 30 секунд. Плюс они должны быть (если возможно) идемпотентными.
Если вы хотите запускать и отслеживать длительные задачи с помощью REST-вызовов, тогда это путь. Но сама работа должна быть отделена и контролироваться на каком-то другом уровне (а не в стеке HTTP).
Не могли бы вы рассказать нам больше о рабочих местах? – mkrakhin
JMS будет заменой для вызовов RESTful - это другой метод межпроцессного общения. Это не то, что вам нужно. Вероятно, что вызвало ваше упоминание об этом, потому что JMS поддерживает постоянство сообщений для восстановления отказа - и именно это вы на самом деле после; сделать что-то подобное в среде RESTful. Верный? – Gimby
Служба RESTful использует протокол HTTP в качестве протокола связи. Это протокол без учета состояния: нет понятия * открытого задания *. Ваш вопрос не имеет смысла. – Raedwald