Mô đun xử lý thông điệp SOAP

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng khung đàm phán chất lượng dịch vụ cho dịch vụ web (Trang 37 - 42)

Chương 3 : TÌM HIỂU VỀ AXIS2

3.3 Mô đun xử lý thông điệp SOAP

Nhận và gửi thông điệp SOAP có thể coi là hai trong số những công việc chủ yếu của máy xử lý SOAP. Trong kiến trúc Axis2 cung cấp hai đường ống để thực hiện hai hành động cơ bản là nhận và gửi thông điệp SOAP. Hai đường ống này có tên là InPipe và OutPipe. Các mẫu tin nhắn trao đổi phức tạp ký hiệu MEPs, nó được xây dựng bởi kết nối hai loại ống InPipe và OutPipe. Ngoài ra còn hai đường ống khác có mục đích hỗ trợ cho các thông điệp gửi đến và gửi đi bị lỗi [1].

Khả năng mở rộng của mô hình xử lý SOAP được cung cấp thông qua cơ chế xử lý (handler). Khi một thông điệp đang được xử lý, thì các điều khiển này đã được đăng ký để sẽ thực hiện. Các điều khiển này được đăng ký ở mức độ toàn cục, dịch vụ, hoặc trong một phạm vi hoạt động giới hạn của máy chủ Axis2. Cuối cùng Axis2 kết nối các điều khiển của các phạm vi trên thành một chuỗi điều khiển. Các điều khiển có thể hoạt động như một máy đánh chặn, nghĩa là chúng xử lý một phần thông điệp và sau đó cung cấp các tiện ích dịch vụ (add on services) cho hệ thống khác. Mô tả các bước truyền thông điệp trong mô hình xử lý thông điệp SOAP ở hình 3-2.

- Khi một thông điệp được gửi đến thông qua Client API, ống OutPipe trên vùng người dùng được kích hoạt. Ống OutPipe sẽ gọi các xử lý (handlers).

- Bộ giao vận gửi thông điệp (Transport sender) trên vùng người dùng sẽ gửi thông điệp SOAP tới ống InPipe trên vùng dịch vụ.Thông điệp SOAP này cuối cùng được bộ giao vận gửi thông điệp(Transport sender) trên vùng dịch vụ chuyển tới cuối điểm mục tiêu( endpoint) trên vùng dịch vụ.

- Thông điệp SOAP này sau đó được nhận bởi bộ giao vận nhận (Transport reviever) của vùng người dùng ở điểm mục tiêu (endpoint). Thông điệp SOAP tiếp tục được chuyển vào ống InPipe ở vùng người dùng. Trong ống InPipe này bao gồm các thao các xử lý( handlers) và kết thúc việc nhận thông điệp SOAP. Đồng thời kết thúc quá trình gửi và nhận thông điệp phản hồi SOAP cho Client API.

Quá trình trao đổi thông điệp ở trên xảy ra với mỗi thông điệp tại một thời điểm và với mọi thông điệp. Sau khi xử lý xong một thông điệp, Axis2 có thể quyết định tạo ra một thông điệp SOAP khác. Axis2 luôn luôn xem các thông điệp SOAP ở dạng xử lý đơn. Sự quản lý và kết nối các thông điệp được thực hiện ở lớp trên của khung (framework). Hai ống InPipe và OutPipe không có sự phân biệt khác nhau giữa vùng máy chủ và vùng người dùng.

3.3.1 Xử lý trong Axis2 (Handler)

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

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.

3.3.2 Giai đoạn trong Axis2

Khái niệm giai đoạn (phase) được giới thiệu trong Axis2, giai đoạn là nơi đặt các xử lý (handlers) trong một chuỗi dây chuyền của các thực hiện. Giai đoạn có nhiệm vụ hỗ trợ việc thứ tự động của các xử lý. Có một số định nghĩa về giai đoạn trong Axis2:

- Giai đoạn có thể coi là một tập hợp lôgic của các xử lý (handlers).

- Giai đoạn có thể coi là một thời gian cụ thể trong việc thực hiện các xử lý (handlers).

- Giao đoạn có thể coi là một thùng nơi đó để đặt xử lý. - Có thể xem xét giai đoạn như một xử lý (handlers).

Hình 3-4. Các giai đoạn của luồng xử lý trong kiến trúc Axis2 [5].

Trong kiến trúc Axis2 có một tập các giai đoạn được xác định trước. Chúng được lưu trong tệp cấu hình axis2.xml. Có hai loại giai đoạn là dòng chảy vào (InFlow) và dòng chảy ra (OutFlow). Trong đó dòng chảy vào (InFlow) gồm tập các

giai đoạn sau: giao vận (Transport), tiền gửi thông điệp đi (PreDispatch), Gửi đi (Dispatch), Hậu gửi thông điệp đi (PostDispatch).

Đối với dòng chạy ra (out flow) chỉ có một giai đoạn được định nghĩa sẵn là thông điệp ngoài (Message Out). Hình vẽ 3-4 dưới đây thể hiện giai đoạn được định nghĩa trước trong kiến trúc Axis2.

Ngoài các giai đoạn được định nghĩa trước, người dùng có thể định nghĩa thêm các giai đoạn vào trong luồng ở tệp cấu hình axis2.xml. Đối với dòng chảy vào (in flow) người dùng chỉ có thêm giai đoạn sau giai đoạn hậu gửi thông điệp đi (PostDispatch). Điều này do Axis2 giữ cho luồng các hoạt động được thực ở điều kiện quy định tối thiểu, và chỉ sau giai đoạn này các hoạt động được tìm thấy. Đối với dòng chảy ra (out flow) không có quy định vị trí đặt cho những giai đoạn mới định nghĩa bởi người dùng. Chúng ta có thể xem ở ví dụ 3.2 dưới đây.

Ví dụ 3.2: Ví dụ về giai đoạn trong hai dòng chảy Inflow và Outflow. <phaseOrder type="inflow"> <phase name="Transport"/> <phase name="PreDispatch"/> <phase name="Dispatch"/> <phase name="PostDispatch"/> <phase name="userPhase1"/> <phase name="userPhase2"/> </phaseOrder> <phaseOrder type="outflow"> <phase name="userPhase3"/> <phase name="MessageOut"/> <phase name="userPhase4"/> </phaseOrder>

Có hai loại giai đoạn được định nghĩa trong Axis2 là giai đoạn ở mức độ toàn cục (Global phase) và giai đoạn ở mức độ vận hành (Operation phase) và thông tin được lưu ở tệp axis2.xml. Hai loại giai đoạn này không khác nhau về cách thức thực hiện, chúng chỉ khác nhau về ngữ nghĩa, phạm vi hoạt động dựa trên vị trí của thông điệp. Giai đoạn mức toàn cục cho phép thực hiện với tất cả các thông điệp. Ngược lại giai đoạn mức vận chỉ cho phép thực hiện thông điệp ở phạm vị giới hạn.

3.3.3 Đặc điểm luồng trong Axis2 (Flow)

Dòng chảy hay gọi là luồng (flow) là tập hợp các giai đoạn và thứ tự các giai đoạn theo một dòng chảy xác định được định nghĩa ở tập tin cấu hình axis2.xml. Có bốn loại dòng chảy được định nghĩa trong Axis2.

-Dòng chảy InFlow: Khi một thông điệp đến, thông điệp này phải đi qua dòng InFlow. Sau đó tất cả các xử lý trong dòng chảy này sẽ được gọi.

-Dòng chảy InFaulFlow: Dòng này sẽ được gọi nếu yêu cầu gửi đến bị lỗi. -Dòng chảy OutFlow: Khi một thông điệp được chuyển ra từ máy chủ hay nói cách khác là thông điệp phản hồi của một hoạt động thì thông điệp sẽ đi qua dòng OutFlow.

-Dòng chảy OutFaultFlow: Nếu thông điệp ra hay thông điệp phản hồi bị lỗi thì dòng OutFaultFlow sẽ được gọi.

Kiến trúc của Axis2 không chứa một đối tượng và cấu trúc nào liên quan đến dòng chảy, thay vào đó là một tập hợp các giai đoạn đặt cạnh nhau đại diện cho một khái niệm về dòng chảy. Thứ tự các giai đoạn đặt cạnh nhau để tạo thành một dòng chảy có thể được cấu hình ở tệp tin axis2.xml. Trong Axis2 có khái niệm hai dòng chảy InFlow và OutFlow là một thể hiện cụ thể về dòng chảy.

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng khung đàm phán chất lượng dịch vụ cho dịch vụ web (Trang 37 - 42)

Tải bản đầy đủ (PDF)

(86 trang)