- Axis2 cung cấp một khung chương trình để xử lý các thông điệp SOAP. Khung chương trình này có thể được mở rộng trong các xử lý thông điệp SOAP hoặc trong các hoạt động cơ sở. Hơn nữa, Axis2 cho phép mô hình hóa các dạng trao đổi thông điệp khác nhau (MEPs) để được sử dụng ở trong khung xử lý (processing framework) [3].
- Axis2 có khả năng triển khai một dịch vụ Web với sự hỗ trợ của WSDL hoặc không cần WSDL.
- Axis2 cung cấp giao diện thao tác người dùng (Client API) sử dụng để gọi các dịch vụ Web. Giao diện thao tác người dùng có thể hỗ trợ cho các hai mô hình đồng bộ và bất đồng bộ.
- Axis2 cho phép thay đổi thông tin cấu hình hoặc ở các thành phần của nó trong triển khai dịch vụ Web.
- Axis2 cung cấp khả năng nhận và gửi các thông điệp SOAP với nhiều giao thức khác nhau.
3.1.2 Ƣu điểm của Axis2
Axis2 đã cải thiện tốc độ xử lý XML bằng việc sử dụng công nghệ phân tích cú pháp, khả năng linh hoạt trong mở rộng kiến trúc, hỗ trợ các tiêu chuẩn kỹ thuật của dịch vụ Web hiện tại cũng như các tiêu chuẩn kỹ thuật trong tương lại. Ngày nay, Apache Axis2 là một mã nguồn mở của khung chương trình dịch vụ Web cho ngôn ngữ Java và Axis2 được sử dụng nhiều trong ngành công nghiệp và cả trong giới học thuật.
Sự tách biệt giữa logic (logic) và trạng thái (states) trong Axis2, nên các đoạn mã xử lý không có trạng thái bên trong Axis2. Điều này cho phép các đoạn mã có thể thực hiện tự do bởi các luồng song song (pararellel threads).
Tất cả các thông tin của Axis2 được giữ trong một mô đun thông tin, điều này cho phép hệ thống bị đình chỉ hay tiếp tục sử dụng. Khả năng mở rộng các hỗ trợ cho các dịch vụ Web mà không cần cấu hình phức tạp ở phía kiến trúc lõi.
Hình 3-1. Các thành phần chính trong kiến trúc của Axis2 [1].
Axis2 được xây dựng trên kiến trúc mô đun (Module) bao gồm các mô đun lõi tạo nên kiến trúc cốt lõi của Axis2, các module không lõi là một lớp trên của các mô đun lõi như ở hình 3.1.
3.1.3 Các mô đun lõi của Axis2
Mô đun xử lý XML (XML Processing model): mô đun này quản lý hoặc xử lý thông điệp SOAP là một trong những phần khó khăn nhất trong việc thực hiện một thông điệp. Vấn đề nâng cao hiệu suất trong xử lý thông điệp mà một trong
những nhân tố quan trọng nhất để quyết định hiệu suất của một hệ thống dịch vụ Web. Axis xử dụng DOM để biểu diễn lược đồ của thông điệp thì Axis2 sử dụng kỹ thuật XML InfoSet để biểu diễn thông điệp SOAP, kỹ thuật này được biết đến trong thuật ngữ AXIOM.
Mô đun mô hình xử lý SOAP (SOAP Processing model): mô đun này kiểm soát sự thực hiện của các xử lý, xác định các giai đoạn khác nhau mà việc thực hiện sẽ phải đi qua, người sử dụng có thể mở rộng mô hình xử lý SOAP này tại các địa điểm cụ thể.
Mô đun mô hình thông tin (Information model): mô đun này để quản lý xử lý thông tin. Mô hình này có một số đặc điểm chính sau như: khả năng lưu trữ hai trạng thái tĩnh và động, có một thành phần riêng biệt để xử lý các thông tin logic tương ứng, quản lý phiên làm việc và quản lý vòng đời của một dịch vụ.
Mô đun triển khai: mô đun này cho phép người dùng dễ dàng triển khai các dịch vụ, thực hiện cấu hình và mở rộng mô hình xử lý SOAP. Mô hình này hỗ trợ cơ chế triển khai nóng, cập nhật nóng nghĩa là cho phép cập nhật thông tin mới nhất trên môi trường đang chạy.
Mô đun giao diện thao tác phía người dùng (Client API): mô đun này cung cấp một giao diện thao tác thuận tiện cho người dùng tương tác với các dịch vụ Web khi sử dụng Axis2.
Mô đun giao thức vận chuyển: Axis2 định nghĩa một khung vận chuyển cho phép người dùng sử dụng và tiếp xúc với các dịch vụ tương tự nhau trong nhiều giao thức vận chuyển khác nhau. Các giao thức vận chuyển đó phù hợp với cho những nơi cụ thể trong mô hình xử lý SOAP. Axis2 cung cấp một vài phương thức vận chuyển như : HTTP, SMTP, JMS, TCP. Ngoài ra, người cùng có thể viết thêm hoặc tùy chỉnh giao thức vận chuyển trong trường hợp cần thiết.
3.1.4 Các mô đun khác của Axis2 (Mô đun không lõi)
Mô đun sinh mã: Axis2 cung cấp một cung cụ sinh mã được tạo từ phía máy chủ (Server) và phía máy khách (Client) cùng với một mô tả. Công cụ này giúp đơn giản hóa việc triển khai dịch vụ và gọi dịch vụ, từ đó tăng khả năng sử dụng của Axis2.
Trên đây là những thông tin cơ bản về các mô đun chính trong kiến trúc của Axis2. Ở các mục tiếp theo giới thiệu chi tiết về một số mô đun lõi, từ đó chúng ta có cái nhìn sâu hơn về kiến trúc của Axis2.
3.2 Mô đun xử lý XML
Axis1 sử dụng DOM để thể hiện lược đồ XML và toàn bộ cấu trúc phân cấp đầy đủ của đối tượng DOM được lưu trữ trong bộ nhớ. Điều này không có vấn đề gì khi kích thước của thông điệp là nhỏ. Nhưng khi kích thước của thông điệp lớn, nên đây là một vấn đề của Axis1. Axis2 đã khắc phụ điều này bằng cách sử dụng một kỹ thuật mới gọi là trục mô hình đối tượng (AXIs Object Model) viết tắt là AXIOM để thể hiện lược đồ XML.
3.2.1 Trục mô hình đối tƣợng (AXIOM)
Trục mô hình đối tượng sử dụng mô hình XML Infoset để thể hiện lược đồ XML. Ngoài ra, AXIOM sử dụng kỹ thuật phân tích cú pháp kéo (PULL), trong khi các kỹ thuật biểu diễn lược đồ XML khác đều sử dụng kỹ thuật phân tích cú pháp đẩy (PUSH). Ưu điểm của kỹ thuật kéo (PULL) hơn kỹ thuật đẩy (PUSH) là các lời gọi có toàn quyền kiểm soát trong phân tích cú pháp, trong hành động và các sự kiện tiếp theo chỉ thị của người dùng. Người dùng có thể quyết định lưu trữ hoặc loại bỏ các sự kiện được tạo ra từ phân tích cú pháp. Ban đầu AXIOM được phát triển như là một thành phần của Apache Axis2. Tuy nhiên, sau đó nó trở thành một dự án WS Component để các dự án khác Axis2 có thể kế thừa được. Đặc điểm chính của trục mô hình đối tượng (AXIOM) [1].
- Tính trọng lượng nhẹ trong biểu diễn XML (Lightweight). AIXOM tối ưu hóa trong biểu diễn XML Infoset bằng cách giảm độ sâu của hệ thống phân cấp, giảm số lượng các phương thức và các thuộc tính trong các đối tượng.
- Tính trì hoãn (Deferred building): đây là một trong những đặc điểm nhất của AXIOM. Điều này có nghĩa là xây dựng mô hình đối tượng chỉ khi nó hoàn toàn cần thiết. Các đối tượng không thực hiện trừ khi cần một nhu cầu cho chính họ. - Sử dụng kỹ thuật phân tích kéo: AXIOM xây dựng các giao diện lập trình ứng dụng (API) cho kỹ thuật phân tích kéo trong xử lý dữ liệu XML.
Phương pháp truyền thống trong xử lý dữ liệu XML thường xây dựng giao diện lập trình ứng dụng dựa trên cây (Tree based APIs) bằng cách sử dụng DOM. Về cơ bản của phương pháp này thường tải toàn bộ dữ liệu XML vào bộ nhớ và xử lý nó. Nên các mô hình DOM khi được xây dựng thường lớn hơn so với tài liệu XML ban đầu, do đó gây lãng phí bộ nhớ và ảnh hưởng đến tốc độ truy cập.
Một phương pháp mới hơn trong xử lý dữ liệu XML là xây dựng giao diện lập trình ứng dụng dựa trên sự kiện (Events base APIs ). Khi có một loại phân tích cú pháp được đưa ra cho một XML xử lý, nó sẽ gửi sự kiện tương ứng với các mục thông tin mà nó tìm thấy. Phương pháp này sử dụng SAX là một tiêu chuẩn phân
tích cú pháp để xử lý XML. Phương pháp này hiệu quả hơn DOM về bộ nhớ. Nhưng cả hai phương pháp này vẫn gặp phải nhược điểm là không kiểm soát tốt được tất cả sự kiện trong quá trình phân tích dữ liệu XML. Khi một quá trình phân tích XML bắt đầu, phương pháp dựa trên mô hình cây hoặc dựa trên mô hình sự kiện đều phải tiêu thụ toàn bộ luồng dữ liệu cùng một lúc.
Vì vậy một phương pháp mới phân tích dữ liệu XML của AXIOM sử dụng mô hình kéo trực tuyến hay gọi tắt là StAX( Streaming API for XML ) để xử lý dữ liệu XML khắc phục những nhược điểm của các phương pháp trên. Trong mô hình này, người dùng có thể bắt đầu, tiến hành, tạm dừng và tiếp tục quá trình phân tích dữ liệu XML. Việc này hoàn toàn được kiểm soát. Kiến trúc của trục mô hình đối tượng (AXIOM Architecture) là rất đơn giản bao gồm.
- Giao diện lập trình ứng dụng cho AXIOM gọi tắt là AXIOM API. AXIOM API cung cấp các thư viện cho người dùng.
- Bộ xây dựng (Builder): xây dựng mô hình đối tượng XML dựa trên kỹ thuật phân tích cú pháp của StAX. Mô hình đối tượng này cung cấp các sự kiện được tạo bởi từ việc phân tích cú pháp dữ liệu XML. Ngoài ra bộ xây dựng này đóng vai trò như một bộ nhớ đệm trong kiến trúc của AXIOM.
- XML Stream: dữ liệu XML này được lưu ở dạng nhị phân.
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 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.
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