Đây là nội dung quan trọng và là vấn đề chủ chốt để giải quyết bài toán đặt ra trong khóa luận này. Chúng tôi sẽ triển khai Service Proxy trên web server Apache-Tomcat tại cổng 8080 sử dụng Soap engine là Apache Soap.
Thông thường thì Service Proxy thường không phải code cứng bởi người lập trình, mà nó thường được tự sinh ra từ file WSDL của các Web Services mà Service Proxy triệu gọi đến. Tuy nhiên, vì vấn đề bản quyền nên ở đây chúng tôi chỉ tận dụng được một tính năng rất nhỏ trong việc tự sinh ra Service Proxy từ file WSDL, ở đây chỉ sinh ra tên lớp và tên phương thức sao cho Service Proxy có thể triệu gọi tới các Service Composition.
File mã nguồn Service Proxy được viết trong một file Proxy.java, trong file này chúng tôi định nghĩa ra hai lớp, một lớp dùng để triệu gọi các Web Service Composition, và một lớp khác dùng để lấy kết quả trả về khi triệu gọi tuần tự hai Web Service Composition đó. Tương ứng với hai Web Services SearchHotel và SearchFlight, lần lượt trong mỗi lớp chúng ta đều có 2 phương thức tương ứng để triệu gọi tới hai Web Services đó. Dưới đây chúng tôi sẽ trình bày phương pháp tạo ra Service Proxy từ file WSDL của dịch vụ SearchFlightService, với dịch vụ SearchHotelService cách làm cũng tương tự.
Để sinh ra Service Proxy ta chỉ cần copy nội dung file WSDL đưa vào chương trình tự sinh, ta sẽ có Service Proxy cần thiết để gọi tới các Service Composition. Chúng tôi sử dụng chương trình tự sinh của web-site http://nsoftware.com , sau khi đưa nội dung file WSDL vào chương trình tự sinh của website đó, ta có phương thức cần triệu gọi đến Service Composition là phương thức Search_Flight trong dịch vụ SearchFlight. Phương thức Search_Flight này cần phải được triệu gọi trong lời gọi dịch vụ được code trong mã nguồn của Service Proxy. Sau khi đã tự sinh ra các lớp và phương thức trừu tượng cho Service Proxy, chúng ta cần phải hiệu chỉnh lại Service Proxy để có thể sử dụng trên thư viện API apache Soap.
Hình 37:Code Service Proxy goi tới SearchFlightService
Nhìn vào hình trên ta có thể thấy, do Service Proxy chuyển tiếp yêu cầu tới 2 Web Services phục vụ mục đích thật, cho nên phương thức Flight của Service Proxy cũng phải có kiểu trả về là một String và nhận đối số truyền vào là một String như mục đích yêu cầu của Service Proxy chúng tôi đã trình bày trong phần tìm hiểu bài toán. Dễ thấy trong hình trên, Service Proxy gọi tới dịch vụ SearchFlight tại địa chỉ “ http://localhost:8080/axis/servlet/AxisServlet “ bằng việc khởi tạo ra một đối tượng url. Và
gọi tới phương thức Search_Flight của dịch vụ SearchFlight bằng lời gọi call.setMethodname(“SearchFlight”).
Mục tiêu bài toán của chúng ta đó chính là xây dựng Service Proxy để kiểm tra ràng buộc thời gian đáp ứng của các Web Service Composition, cho nên không thể thiếu được phần đo lường thời gian trong code Service Proxy. Một phương pháp đơn giản để đo lường thời giap đáp ứng các Web Service Composition đó là ta chỉ cần sử dụng một đồng hồ đếm thời gian trong khoảng thời gian thực hiện lời gọi dịch vụ.
Hình dưới đây minh họa phương pháp đo lường thời gian đáp ứng:
Hình 38:Minh họa đo lường thời gian đáp ứng
Ta có thể thấy lời gọi đến các Service Composition được thực hiện qua phương thức Response resp = call.invoke(url,””);
Ý tưởng thuật toán đo lường thời gian đáp ứng trong Web Service Composition được mô tả như sau:
• Trước khi thực hiện lời gọi tới các Services thành phần, ta bật đồng hồ đếm thời gian thông qua phương thức timer.start();
• Sau khi gọi phương thức và lấy kết quả trả về ta dừng đồng hồ đếm thời gian thông qua lời gọi phương thức timer.stop();
• Sau khi ta có thời gian bắt đầu, thời gian kết thúc, ta hoàn toàn có thể tính ra được thời gian đáp ứng là bao nhiêu thông qua phương thức getDifference() = timer.stop() – timer.start();
Như vậy với các Web Services khác ta đều có phương pháp đo lường thời gian tương tự như đo lường thời gian áp dụng với SearchFlight Service.
Việc đo lường thời gian đáp ứng đối với SearchHotel Service cũng được thực hiện với cách tương tự như áp dụng với dịch vụ SearchFlight. Như vậy chúng ta đã có đầy đủ một Service Proxy để đo lường thời gian đáp ứng của hai Web Services SearchHotel Service và SearchFlight Service.
Về việc cài đặt Service Proxy được chúng tôi viết trong 2 file. File ServiceProxy.java chứa 2 lớp, một lớp Service chứa hai phương thức gọi dịch vụ tới hai Web Services thành phần, một lớp ServiceProxy chứa hai phương thức để gọi lần lượt tới hai phương thức trong lớp Service. File Timer.java là file chuyên biệt dùng để đo lường thời gian đáp ứng của các Web Services. Trong code của file ServiceProxy chúng ta phải import file Timer.class để có thể thực hiện việc đo thời gian đáp ứng. Chúng tôi biên dịch hai File này ra thành 3 lớp, đó là lớp mytimer.Timer.class, test.ServiceProxy.class, test.Service.Class, copy 3 file này vào thư mục C:\Webservice\tomcat\webapps\soap\WEB-INF\classes. Service Proxy được cài đặt sử dụng Soap engine Apache Soap nên quá trình cài đặt hoàn toàn tương tự như khi chúng ta cài đặt dịch vụ SearchHotel. Điểm khác biệt duy nhất ở đây đó là địa chỉ của ServiceProxy lúc này sẽ là http://localhost:8080/soap/ chứ không phải http://localhost:2417/soap/ như đối với SearchHotel Service.