асинхронные вызовы WS и await () снаружи контроллера

Есть ли способ использовать th е механизм await () вне контроллера?

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

Так, например, в контроллере:

   ServiceClass service = new My ServiceClass();
   MyObject myObject= service.getMeAnObject();
   render(myObject);

И класс обслуживания:

   public class ServiceClass
   {
      ...
      public MyObject getMeAnObject()
      {
         String url = "http://...";
         Promise<HttpResponse> promise = url(url).getAsync();

         // do something here similar to await in a controller
         // that suspends the code waiting for the response
         // to be retrieved

         HttpResponse response = promise.get();
         return buildMyObjectFromResponse(reponse);
      }
      ...
   }

Есть ли способ добиться чего-то подобного?

Спасибо за вашу помощь.


Правка : Я последовал совету Пера и заставил класс обслуживания реализовать Controller, однако он работает, необходимо, чтобы контроллер, использующий его, был улучшен. Я обнаружил, что единственный способ сделать это - по крайней мере один раз вызвать метод await () в вызывающем классе контроллера.

Однако я до сих пор не проверил, приостановлен ли код.


Редактировать 2: Одно из предложений, которое я получил от группы Google, состоит в том, что мне действительно нужно попытаться выполнить ожидание в контроллере, поэтому, возможно, лучшим решением будет для службы вернуть Обещай, и пусть контроллер дождется этого, но потом у меня нет возможности сделать то, что есть?

Так, например, в контроллере:

  ServiceClass service = new My ServiceClass(); 
  Promise<MyObject> promise = service.getMeAnObject(); 
  MyObject myObject = await(promise); 
  render(myObject); 

И класс обслуживания:

  public class ServiceClass 
  { 
     ... 
     public Promise<MyObject> getMeAnObject() 
     { 
        String url = "http://..."; 
        // Somehow Build a Promise<MyObject> 
     } 
     ... 
  } 

}

8
задан Dan Serfaty 16 December 2011 в 18:22
поделиться