EJB 기본 비동기식 호출

EJB의 비동기화는 상당히 간단하다.사실 방법에 @Asynchronous를 넣는 거예요.
비동기적인 방법은 두 가지 반환 유형이 있는데 하나는void이고, 하나는Future입니다. 개인적으로는void를 반환하는 것이 좋습니다.Future로 돌아가려면 결과를 기다려야 하기 때문에 동기화되기 때문에 비동기적인 의미가 없습니다.예를 들어 아래의 코드는 전형적인 비동기적인 호출을 가진 무상태 EJB이다.되돌아오는 것은void이기 때문에 되돌아오는 값을 처리하지 않을 수 있습니다.
package asyncejb;
 
import java.time.LocalDateTime;
 
import javax.ejb.Asynchronous;
import javax.ejb.Stateless;
 
@Stateless
public class AsyncEjb {
	@Asynchronous
	public void run(){
		System.out.println("EJB "+LocalDateTime.now());
	}
}

servlet에서 호출하면
package asyncejb;
 
import java.io.IOException;
import java.time.LocalDateTime;
 
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/async.html")
public class AsyncServlet extends HttpServlet{
 
	private static final long serialVersionUID = 1L;
 
	@EJB
	private AsyncEjb asyncEjb;
 
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		asyncEjb.run();
		System.out.println("Servlet " +LocalDateTime.now());
	}
}

컨트롤러에 따라 정보를 출력할 수 있습니다. 코드 순서상 EJB를 먼저 호출하고 servlet을 호출하지만 먼저 실행하는 것은 servlet이고 나중에 실행하는 것은 EJB입니다.
10:12:13,670 INFO  [stdout] (default task-5) Servlet 2016-01-18T10:12:13.670
10:12:13,673 INFO  [stdout] (EJB default - 3) EJB 2016-01-18T10:12:13.673
사실 비동기적인 용도는 어디에 있습니까?
비동기화는 대량의 작업에 사용되며 결과를 직접 되돌려 사용자의 기다림을 피할 수 있다.
그러나 J2EE에 비동기적인 조작이 너무 많아서 servlet은 비동기적, EJB는 비동기적, CDI는 비동기적, 스스로 라인을 써도 비동기적입니다.

좋은 웹페이지 즐겨찾기