2014-11-04 2 views
2

Я немного потерял в следующем сценарии:Запрос сразу после ответа?

Мой веб-сервис потребляет POST-запросы с данными формы. Я должен ответить 200 OK или иначе отправители считают, что запрос не выполнен.

Сразу после ответа 200 я хотел бы перейти к другому вебсервису на удаленном хосте с некоторыми данными, которые я только что получил.

Мой веб-сервис использует запрос POST с помощью аннотации @GET. Это работает, я могу читать все данные формы. Для вызова другого веб-сервиса я использовал API-интерфейс Jersey Client. Это хорошо работает.

Я просто не могу понять, как переключиться с одного вызова на другой. Все запрограммировано с помощью Jersey 2 и развернуто в Tomcat, поэтому нет реального сервера приложений. Нет полного набора Java EE.

Я пропустил какое-то промежуточное ПО? Нужно ли мне реализовать пользовательский цикл событий или какой-либо брокер сообщений?

ответ

1

Не уверен, есть ли «стандарт» способ справиться с этим, но есть CompletionCallback мы можем зарегистрировать с AyncResponse.

CompletionCallback:

Процессинговый обратного вызова, который принимает запрос на обработку запроса события завершения.

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

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

@Path("/callback") 
public class AsyncCallback { 
    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public void postWithAsync(@Suspended AsyncResponse asyncResponse, 
             SomeObject object) { 

     asyncResponse.register(new CompletionCallback() { 
      @Override 
      public void onComplete(Throwable error) { 
       if (error == null) { 
        System.out.println("Processing new Request"); 
       } else { 
        System.out.println("Exception in Request handling"); 
       } 
      } 
     }); 
     Response response = Response.ok("Success").build(); 
     // Carry on like nothing happened 
     asyncResponse.resume(response); 
    } 
} 

Вы можете увидеть больше объяснений на Asynchronous Server-side Callbacks

+0

Спасибо! Я даже читал эту главу, но полностью игнорировал эту часть. Просто попробовал. Это, вероятно, все, что мне нужно. – raupach

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