2013-03-16 9 views

Trả lời

6

Java Servlet 3.0 Bảo trì phát hành trên trang 34 lần đọc:

Một cuộc gọi đến phương pháp này - ServletRequest.startAsync(ServletRequest req, ServletResponse res) - đảm bảo rằng các phản ứng không cam kết khi ứng dụng thoát ra khỏi phương pháp dịch vụ. Nó được cam kết khi AsyncContext.complete được gọi trên trả về AsyncContext hoặc AsyncContext lần và không có người nghe nào liên quan đến việc xử lý hết thời gian chờ. Bộ hẹn giờ cho thời gian không đồng bộ sẽ không bắt đầu cho đến khi yêu cầu và phản hồi được liên kết đã trả về từ vùng chứa. AsyncContext có thể được sử dụng để ghi vào phản hồi từ chủ đề async . Nó cũng có thể được sử dụng để chỉ thông báo rằng phản hồi không phải là bị đóng và cam kết.

Từ the javadoc of the javax.servlet.AsyncContext interface:

Trong trường hợp một hoạt động không đồng bộ đã hết thời gian, các chứa phải chạy qua các bước sau:

  1. Invoke, ở phương pháp onTimeout của họ, tất cả AsyncListener các trường hợp được đăng ký với ServletRequest mà trên đó hoạt động không đồng bộ được bắt đầu.
  2. Nếu không có người nghe nào được gọi là complete() hoặc bất kỳ phương thức dispatch() nào, hãy thực hiện gửi lỗi với mã trạng thái bằng tới HttpServletResponse.SC_INTERNAL_SERVER_ERROR.
  3. Nếu không có trang lỗi phù hợp đã được tìm thấy, hoặc các trang báo lỗi không gọi các phương thức đầy đủ() hoặc bất kỳ công văn(), gọi đầy đủ()."

Dòng cuối cùng trên là của hầu hết tầm quan trọng - sẽ có một cuộc gọi đến AsyncContext.complete()The javadoc says:.

Hoàn thành các hoạt động không đồng bộ đã được bắt đầu theo yêu cầu được sử dụng để initialze AsyncContext này, đóng phản ứng đã được sử dụng để khởi tạo AsyncContext này .

Đã đóng, gọi tới hầu hết các phương thức của nó sẽ ném IllegalStateException.

+0

cảm ơn phản hồi của bạn :-) – xwinus

+0

@xwinus nếu bạn thích phản hồi, hãy chấp thuận. –

+0

@JacekLaskowski: +1. Tôi nghĩ rằng bạn cũng đã gián tiếp trả lời các áp phích khác câu hỏi [ở đây] (http://stackoverflow.com/questions/15228031/java-lang-illegalstateexception-not-suspended-when-asynccontextcomplete)! – brainOverflow