2017-02-21 56 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

没问题!将来(非常有意的双关语),你也可以看看'未来'。当你有需要并行运行的线程时,它们可以很方便,并将结果返回给程序使用。 –