2017-02-21 10 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(); 

タックスカイル!これは私が試みたことをするようです!

+0

問題ありません!将来的には、将来のことを見てみることもできます。スレッドを並列に実行し、プログラムで使用するために結果を取得する必要があるときに便利です。 –

関連する問題