Xử lý trong Axis2 (Handler)

Một phần của tài liệu Xây dựng khung đàm phán chất lượng dịch vụ cho dịch vụ web (Trang 38)

Trong hệ thống truyền thông điệp, các máy bay đánh chặn có ý nghĩa thực tế trong ngữ cảnh truyền thông điệp, máy bay đánh chặn có nhiệm vụ chặn dòng chảy của các thông điệp và thực hiện chen ngang các nhiệm vụ mới được phân công. Trong thực tế, một máy bay đánh chặn là một đơn vị thực hiện nhỏ nhất trong hệ thống truyền thông điệp. Vì vậy Axis2 cũng sử dụng khái niệm xử lý hay bộ xử lý (handlers) đóng vai trò là một máy bay đánh chặn.Việc Axis2 xây dựng cơ chế xử lý (handlers) làm tăng khả năng mở rộng mềm dẻo trong mô hình xử lý thông điệp SOAP. Ngoài việc bộ xử lý đóng vai trò là máy bay đánh chặn, thì nó còn cung cấp thêm các tiện ích dịch vụ (Add on services) cho nhiệm vụ hay hệ thống khác [3].

Hình 3-3. Cấu trúc thông điệp mở rộng với một vài tiêu đề [3].

Xử lý trong Axis2 là không trạng thái, nghĩa là Axis2 không giữ các trạng thái đã qua thực hiện của chúng trong bộ nhớ. Cấu trúc thông điệp SOAP một xử lý thường tiếp xúc với tiêu đề của thông điệp SOAP, có thể đọc tiêu đề (header), thêm tiêu đề (add a header) hoặc loại bỏ tiêu đề (remove header) như ở hình 3-3. Ngoài ra, xử lý đó có thể tiếp xúc với thân của thông điệp SOAP giống như tiếp xúc với tiêu đề. Trong suốt thời gian xử lý (handlers) tiếp xúc với tiêu đề hoặc thân của thông điệp SOAP, nếu quá trình không thực thi đúng do các thông điệp có thể bị lỗi. Khi đó chúng ta nên đưa vào một ngoại lệ và bộ phận lái tiếp theo trong chuỗi của Axis2 sẽ có những hành động cần thiết để giải quyết tình huống này.

Bất kỳ một xử lý trong Axis2 có thể dừng thực thi thông điệp, nghĩa là xử lý có thể kết thúc luồng thông điệp nếu nó không tiếp tục. Vì vậy chúng ta có thể xây dựng ra các thông điệp có chất lượng tin cậy, hoặc một ngữ cảnh tin cậy bằng cách tạm dừng dòng chạy thông điệp dựa trên một số tiền điều kiện hoặc hậu điều kiện. Viết một xử lý trong Axis2 rất đơn giản. Nếu bạn muốn viết một xử lý bạn có thể kế thừa lớp AbstractHandler hoặc viết một Interface Handler. Một xử lý đơn giản kế thừa AbstractHandler như ở ví dụ 3.1.

Ví dụ 3.1: Đoạn mã mô tả xử lý trong Axis2

public class SimpleHandler extends AbstractHandler {

public SimpleHandler() {

}

public InvocationResponse invoke(MessageContext msgContext) throws AxisFault

//Write the processing logic here // DO something

return InvocationResponse.CONTINUE; }

}

Chúng ta có thể có ba giá trị trả ra của phương thức invoke như sau. Invoke trả ra giá trị “Continue”, nghĩa là xử lý (handler) nghĩ rằng thông điệp sẵn sàng được đi kế tiếp. Invoke trả ra giá trị “Suspend”, nghĩa là xử lý nghĩ rằng thông điệp không thể được gửi về phía trước vì một số điều kiện không hài lòng. Vì vậy, thực thi bị đình chỉ. Invoke trả ra giá trị “Abort”, nghĩa là xử lý nghĩ rằng có một cái gì đã đã sai với thông điệp do đó thông điệp không được phép đi tiếp.

Một phần của tài liệu Xây dựng khung đàm phán chất lượng dịch vụ cho dịch vụ web (Trang 38)