2017-02-21 58 views
0

我的Java Web應用程序中有一個REST API。這有一種方法可以從客戶的Android應用程序(客戶端)接收訂單並將其發送(在諸如價格計算等一系列任務之後)將響應發送回客戶端。Java中的異步編程 - 後臺進程

@POST 
    @Path("order") 
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
    public OrderResponse takeOrder(OrderRequest request 
    ) throws IOException { 
     OrderResponse response = new OrderResponse(); 

     String token = request.getTokenString(); 
     CustomerSession session = sessionPool.getSession(token); 

     if (session != null) { 

      OrderHeader order = new OrderHeader(); 
      order.setFkOrderHeaderCustomerID(session.getFkCustomerID()); 
      order.setOrderCreationDate(new Date()); 

作爲獲取認證會話等任務必須同步完成,當然。 '因爲客戶的反應取決於它的成功或失敗..到目前爲止這麼好。

在此方法結束時,客戶端獲取有關其訂單請求狀態的email

Email email = EmailGenerator.createOrderEmail(order); 
      try { 
       emailService.send(email); 
      } catch (MessagingException ex) { 
       Logger.getLogger(CustomerREST.class.getName()).log(Level.SEVERE, null, ex); 
      } 


      response.setStatus(OrderStatusEnum.SUCCESS); 
     } else { 
      response.setStatus(OrderStatusEnum.TOKEN_INVALID); 
     } 

     return response; 
    } 

這有時會花費幾秒鐘的時間,客戶端必須等待響應。這很痛。

有什麼方法可以發送回覆並在後臺執行電子郵件?

+0

查看答案:http://stackoverflow.com/a/17758416/4275882 –

回答

1
 Thread mailingThread = new Thread() { 
      @Override 
      public void run() { 
       try { 
        Email email = EmailGenerator.createOrderEmail(order); 
        emailService.send(email); 
       } catch (MessagingException | IOException ex) { 
        Logger.getLogger(CustomerREST.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     }; 
     mailingThread.start(); 

Thaks Kyle!這似乎是我做的嘗試!

+0

沒問題!將來(非常有意的雙關語),你也可以看看'未來'。當你有需要並行運行的線程時,它們可以很方便,並將結果返回給程序使用。 –