0
Tải bản đầy đủ (.doc) (89 trang)

Phân tích bài toán

Một phần của tài liệu XÂY DỰNG SERVICE PROXY ĐỂ KIỂM CHỨNG RÀNG BUỘC THỜI GIAN TRONG WEB SERVICE COMPOSITION (Trang 64 -64 )

Một điểm chú ý khi ta sử dụng công nghệ Web Service đó là một Web Service Composition lại có thể là một Web Service Composite của các Web Service Composition khác, điều đó thể hiện được tính phân tán của công nghệ Web Service. Tuy nhiên ở đây chúng ta chỉ quan tâm đến việc đo lường thời gian đáp ứng của các Web Service Composition bằng một Service Proxy được đặt ở phía client.

Mô hình bài toán bao gồm 3 thành phần đó là phát triển 2 Web Services là SearchFlight Service và SearchHotel Service, phần thứ 2 là phát triển Service Proxy và cuối cùng là phát triển một chương trình ứng dụng ở phía Client để triệu gọi đến Service Proxy.

Việc trao đổi dữ liệu giữa các Web Service được sử dụng giao thức SOAP và các thông điệp SOAP được vận chuyển thông qua giao thức HTTP. Các Web Service có thể được triển khai bằng các ngôn ngữ lập trình thông thường như Java, C#, .NET v..v, có thể được cài đặt trên các nền hệ điều hành khác nhau như Linux, Windows.

Ta có mô hình tổng quan của bài toán có thể được minh hoạ như hình dưới đây

Hình 23:Minh hoạ mô hình tổng quan bài toán Travel-Agent

Trong mô hình trên, Client có thể là một Website, cũng có thể là một chương trình giao diện người dùng, cũng có thể là một chương trình thể hiện dưới dạng console để triệu gọi Service Proxy. Trên Service Proxy có chứa các đoạn code để đo lường thời gian đáp

ứng mỗi khi một Service Composition được triệu gọi, ta có thể thấy thông qua minh hoạ bằng chiếc đồng hồ đặt trên hình vẽ của Service Proxy như hình trên.

Trong bài toán của chúng ta sẽ gồm các đối tượng Client: Trong đối tượng Client sẽ có các thành phần để gọi tới Service Proxy. Ở đây ta có 2 Web Services, tương đương trong Service Proxy cũng phải chứa 2 lớp để gọi tới 2 Service đó. Hai lớp này có thể gọi tới hai Web Services một cách song song hoặc cũng có thể gọi tuần tự, tuỳ thuộc vào mục tiêu của người viết chương trình. Và đương nhiên trong Service Proxy chứa 2 lớp cho 2 Web Services nên trong code phía Client cũng phải chứa 2 lớp để gọi tới 2 lớp tương ứng trong đối tượng Proxy đó. Mô tả chi tiết về cách cài đặt chương trình sẽ được thể hiện trong “Chương 6 - Thực Nghiệm” của khoá luận này.

Sau khi đã phân tích thiết kế của chương trình, ta thấy ở đây có hai Web Services, áp dụng vào biểu đồ Timing Diagram để thể hiện ràng buộc thời gian đáp ứng của các Web Services. Tương ứng với một Web Service ta có một đường Lifeline minh hoạ cho các trạng thái thành phần của Web Service đó.

Ta có minh hoạ đường Lifeline cho dịch vụ tìm kiếm khách sạn thể hiện trong biểu đồ Timing Diagram như hình dưới đây:

Tương tự ta cũng có hình minh hoạ đường Lifeline cho dịch vụ tìm kiếm chuyến bay

Hình 25:Minh hoạ đường Lifeline cho SearchFlight Service

Qua hình minh hoạ trên ta thấy, mỗi một đường Lifeline sẽ minh hoạ cho một Web Service. Ở đây, mỗi một Web Services chính là một thành phần riêng biệt, trong mỗi thành phần đó có chứa các trạng thái, các trạng thái có thể là chờ đợi, truy cập database, trả lại kết quả v..v. Mỗi một Web Service được thực hiện trong một thời gian t nào đó, giả sử thời gian thực hiện cho SearchFlight Service là t1, thời gian thực hiện cho SearchHotelService là t2, và hai Web Service này được gọi tuần tự. Ta có thời gian đưa ra để đáp ứng tiêu chuẩn QoS về thời gian cho công việc gọi hai Web Services này là t.

Nếu : t1 + t2 ≤ t thì thời gian thực hiện triệu gọi 2 Web Service đó đáp ứng được tiêu chuẩn QoS đưa ra.

Ngược lại nếu t1 + t2 > t thì không thoả mãn tiêu chuẩn QoS. Đó chính là ý tưởng và là mục tiêu cần đạt được của khoá luận.

CHƯƠNG 6:THỰC NGHIỆM

Chương 6 xây dựng một ứng dụng cụ thể cho bài toán Travel-Agent để kiểm tra ràng buộc thời gian đáp ứng của các Web Service Composition, và dùng kết quả đạt được bằng thực nghiệm để mô hình hoá ràng buộc thời gian trên biểu đồ UML Timing Diagram.

6.1.

Phạm vi ứng dụng

Trong phạm vi khoá luận này, chúng tôi chỉ chọn một ứng dụng nhỏ làm ví dụ minh hoạ kiểm chứng ràng buộc thời gian đáp ứng của trong Web Service Composition. Ứng dụng được chia thành các nhiệm vụ chính như sau:

• Xây dựng hai Web Services, một Web Service tìm kiếm khách sạn dựa vào tên của thành phố đích đến – Tên Web Service này là SearchHotel Service, một Web Service tìm kiếm các chuyến bay dựa trên tên của thành phố xuất phát và tên của thành phố đích đến. Cả 2 Web Service này đều được phát triển bằng ngôn ngữ lập trình Java, quá trình phát triển hai Web Service hoàn toàn thủ công, không dùng bất cứ một công cụ hỗ trợ nào. Cơ sở dữ liệu được dùng cho hai Web Service được triển khai trên hệ quản trị cơ sở dữ liệu MySQL hoàn toàn miễn phí.

• Xây dựng Service Proxy để triệu gọi tới hai Web Services kia. Trên Service Proxy chứa hai phương thức để triệu gọi tới hai Service Composition. Thông thường Service Proxy không cần phải được viết ra bởi người lập trình viên mà thường được tự sinh từ file WSDL của SearchFlight Service và SearchHotel Service. Tuy nhiên về vấn đề bản quyền, chúng tôi đã sử dụng công cụ tự sinh miễn phí trên Internet tại trang http://nsoftware.com, ở đây việc tự sinh ra Service Proxy cũng bị giới hạn về các chức năng của Service, để Service Proxy có thể thực hiện được bằng cách sinh từ website trên bắt buộc cần phải có các thư viện API đi kèm được cung cấp bởi nsoftware.com. Vì thế chúng tôi chỉ sử dụng website http://nsoftware.com để sinh ra các lớp và phương thức trừu tượng của Service Proxy, còn quá trình phát triển lõi

bên trong để triệu gọi tới các Service Composition và đo lường thời gian đáp ứng đều được code thủ công. Service Proxy cũng được phát triển trên ngôn ngữ java. Chương trình Client để triệu gọi tới Service Proxy là một chương trình giao diện GUI. Cho phép người dùng chọn lựa tên thành phố đến và tên thành phố xuất phát. Từ đó chương trình sẽ triệu gọi tới Service Proxy để lấy kết quả trả về bao gồm danh sách các chuyến bay, danh sách các khách sạn và kết quả thời gian đáp ứng của hai Web Service Composition.

Để thể hiện tính độc lập với platform, ở đây chúng tôi có 3 Web Service tuy nhiên do điều kiện có hạn nên chúng tôi sẽ triển khai tất cả các Web Service này trên môi trường localhost tại 2 Web Server khác nhau.

• Service SearchHotel được triển khai bằng thư viện Apache-Soap, cài đặt trên môi trường J2EE – Java 2 Platform, Enterprise Edition. Web Server thực hiện trên cổng 2417 Ở đây chúng tôi sử dụng thư viện Soap đính kèm vào trong môi trường J2EE. Trang Admin của SOAP có thể được truy cập qua URL : http://localhost:2417/soap/ admin

• Service SearchFlight được triển khai bằng thư viện Apache-Axis cài đặt trên Web Server Apache TomCat tại cổng 8080. Trang Admin của Axis có thể được truy cập qua URL : http://localhost:8080/axis/

• Service Proxy được triển khai bằng thư viện Apache-Soap, cài đặt trên Web Server Apache TomCat tại cổng 8080. Trang Admin của Soap trên Apache TomCat có thể truy cập qua URL : http://localhost:8080/soap/admin

Ta thấy mặc dù có hai web server, nhưng chúng tôi đã bố trí tất cả các Service đều được thực thi trên các nền Platform khác nhau. Service SearchFlight và Service Proxy cùng được triển khai trên Apache Tomcat tại cổng 8080 nhưng chúng lại dùng 2 thư viện API khác nhau để triển khai đó là Axis và Apache Soap. Còn Service SearchHotel thì được triển khai hoàn toàn trên một Web Server khác và sử dụng công nghệ khác là J2EE. Qua đó để thấy

6.2.

Thiết kế ứng dụng

Ta có mô hình thiết kế tổng thể của ứng dụng như sau:

Hình 26:Minh họa thiết kế tổng thể của ứng dụng

Người sử dụng tại Client sẽ lựa chọn thành phố xuất phát và thành phố đích đến. Tại đây Soap engine làm nhiệm vụ tạo ra các thông điệp SOAP request gửi đến Service Proxy. Tại Service Proxy sẽ phân ra làm 2 luồng SOAP request tiếp tục gửi đến hai Web Service SearchFlight và SearchHotel. Sau khi gửi đi các thông điệp Soap request, Service Proxy bắt đầu bật đồng hồ đếm thời gian để đo thời gian đáp ứng của hai Web Service thành phần. Tại hai Web Service thành phần tiếp nhận các Soap request đó xử lý và trả lại các thông điệp Soap response cho Service Proxy. Sau khi nhận được thông điệp Soap response của các Service Composition, Service Proxy dừng đồng hồ đo thời gian. Đóng gói kết quả đo lường thời gian đáp ứng vào cùng thông điệp Soap response và gửi trả lại kết quả cho Client bao gồm kết quả tìm kiếm chuyến bay, tìm kiếm khách sạn và kèm theo thời gian đáp ứng của từng dịch vụ.

Do ứng dụng khá đơn giản nên chúng tôi không sử dụng các biểu đồ phân rã chức năng, biểu đồ lớp, biểu đồ tương tác…. Mà chỉ sử dụng biểu đồ tuần tự để thấy được thứ tự làm việc của các thành phần trong hệ thống.

Hình 27:Biểu đồ tuần tự của hệ thống

Dựa vào biểu đồ tuần tự ta thấy tại chương trình Client sẽ có các đối tượng ApplicationGUI, CallService1, CallService2. Đối tượng ServiceProxy đại diện cho Web Service Proxy và hai đối tượng còn lại đại diện cho các Web Service Composition. Khi người sử dụng nhập thông tin và click submit, dữ liệu sẽ được gửi đi lần lượt bằng 2 đối tượng CallService1, CallService2. Trong ví dụ này chúng tôi gọi CallService1 trước, sau khi dữ liệu được trả về cho CallService1 sẽ tiếp tục gọi đến CallService2. Sau khi có tất cả các dữ liệu cần thiết trả về mới trả lại kết quả cho User.

6.3.

Cài đặt, xây dựng và triển khai ứng dụng

6.3.1. Cài đăt chương trình

• Cài đặt môi trường chạy cho Java: Cài đặt JDK -1.5 và thiết lập biến môi trường JAVA_HOME là : C:\Program Files\Java\jdk1.5.0_07.

• Cài đặt môi trường Web Server. Ở đây chúng ta sử dụng 2 Web Server. Trước tiên cài đặt bộ công cụ J2EE – Java 2 platform, Enterprise Edition. Bộ công cụ J2EE sau khi cài đặt sẽ có đường dẫn C:\Sun. Sau đó cài Web Server Apache Tomcat theo đường dẫn C:\ Webservice\tomcat.

• Cài đặt hệ quản trị cơ sở dữ liệu MySQL và thiết lập biến môi trường cho bộ kết nối MySQL connector. Ta cần phải thiết lập biến môi trường CLASSPATH trỏ đến thư mục chứa file mysql-connector-java-5.0.5.jar.

• Cài đặt Soap engine: ở đây chúng tôi sử dụng Soap engine là Apache Soap được cài đặt trên 2 Web Server, một Web Server được triển khai tại cổng 2417, một Web Server chạy tại cổng 8080. Soap engine thứ hai là Apache Axis. Lưu ý tất cả các Soap Engine đều được mặc định cài đặt trong thư mục C:\Webservice.

Một điều rất quan trọng khi chúng ta cài đặt các Soap engine cần phải chú ý ở đây đó là để các Soap engine này có thể thực hiện được cần phải chứa danh sách cách thư viện cần thiết đó là thư viện Java Mail với file mail.jar, thư viện activation.jar, thư viện xerces với 2 file xercesImpl.jar và xml-apis.jar – được sử dụng cho bộ phân tích cú pháp XML. Sau khi có đầy đủ tất cả các thư viện trên chúng ta chép 2 file mail.jar và activation.jar vào thư mục tomcat/common/lib. Sau đó chúng ta cần phải cập nhật lại biến môi trường CLASSPATH, đây là bước rất quan trọng và không cho phép được bỏ qua. Dưới đây là cấu hình CLASSPATH kèm theo.

WEBSERVICE_HOME=C:\WebService

JAVA_HOME=: C:\Program Files\Java\jdk1.5.0_07

CATALINA_HOME=%WEBSERVICE_HOME%\tomcat

XERCES_HOME=%WEBSERVICE_HOME%\xerces SOAP_HOME=%WEBSERVICE_HOME%\soap CLASSPATH=%CLASSPATH%;%SOAP_HOME%\lib\soap.jar CLASSPATH=.;%CATALINA_LIB%\mail.jar;%CATALINA_LIB%\activation.jar; CLASSPATH=%CLASSPATH%;%XERCES_HOME%\xercesImpl.jar; %XERCES_HOME%\xml-apis.jar PATH=%PATH%;%CATALINA_HOME%\bin;%JAVA_HOME%\bin

Sau khi thiết lập biến môi trường cho Apache SOAP chúng ta phải tiến hành thiết lập các biến môi trường cho Apache Axis.. Nếu quá trình cài đặt Apache Soap và Apache Axis thành công thì màn hình máy tính sẽ hiển thị như sau khi ta gọi đến trang admin của các Soap engine này.

Hình 29:Minh họa giao diện Admin của apache soap trên Web Server tại cổng 8080

Nếu cài đặt Apache Axis thành công ta có thể nhìn thấy giao diện trang Admin của Apache Axis như hình dưới đây:

Hình 30:Minh họa trang Admin của Apache Axis trên Web Server tại cổng 8080

Sau khi các Soap Engine đã sẵn sàng phục vụ, chúng ta hoàn toàn có thể triển khai các Web Service để thực hiện mục tiêu bài toán.

6.3.2. Xây dựng và triển khai các Web Services thành phần

Sau khi đã cài đặt thành công các Soap engine, chúng tôi sẽ tiến hành cài đặt các Service Composition trên các Web Server vừa được cài đặt lên.

Cài đặt Service SearchHotel

Trước tiên tiến hành cài đặt Web Service SearchHotel chạy trên môi trường J2EE tại cổng 2417.

Tệp cài đặt cho Web Service SearchHotel được chúng tôi viết trong file SearchHotelService.java, trong file này có chứa một phương thức SearchHotel với đối số truyền vào là một String và kết quả trả về cũng là một String. Khi Service Proxy gọi tới SearchHotel Service, thì xâu chứa tên của thành phố đích đến được đóng gói vào thông điệp SOAP, tại SearchHotel Service, sử dụng xâu chứa tên thành phố đích đến làm đối số truyền vào, thực hiện thao tác tìm kiếm trong database xem có kết quả khách sạn nào tương ứng với thành phố đích đến đó hay không.

Hình 31:Code kết nối database trong file SearchHotel Service

Sau đó chúng tôi tiến hành biên dịch file SearchHotelService.java thành file HTService.SearchHotelService.class, copy file này và đặt vào trong thư mục Wapp của J2EE theo đường dẫn sau “C:\Sun\SDK\domains\domain1\applications\j2ee- modulees\soap\WEB-INF\classes”.

Tiếp theo để triển khai dịch vụ này trên Web Server, ta cần phải viết một tệp deploy.wsdl để triển khai tệp đó lên web server, nội dung của file deploy.wsdl được thể hiện qua Hình 32:

Hình 32:Nội dung của tệp deploy.wsdl

Nhìn vào nội dung của tệp deploy.wsdl ta thấy một số các đặc điểm sau:

id = “urn:HTService” : Đây chính là tên của Web Service mà ta triển khai, sẽ được dùng để gọi trong code của Service Proxy.

methods=”SearchHotel” : Đây chính là phương thức mà Web Service sẽ sử dụng để thực hiện các thao tác tính toán như tìm kiếm database, trả về kết quả.

dd:java class=”HTService.SearchHotelService” : Đây là đường dẫn để web server có thể tìm kiếm được file SearchHotelService.class để thực thi công việc.

Sau đó chúng tôi copy file deploy.wsdl này vào thư mục C:\Webservice. Mở một console, chuyển thư mục làm việc tới thư mục C:\WebService và gõ lệnh sau để triển khai dịch vụ lên Web Server : C:\Webservice > java org.apache.soap.Server.ServiceManagerClient http://localhost:2417/soap/servlet/rpcrouter deploy deploy.xml. Lệnh này nhận ba tham số truyền vào đó là URL đến máy chủ SOAP, lệnh deploy và tập tin hợp lệ để triển khai dịch vụ trên máy chủ SOAP. Nếu quá trình triển khai thành công thì sẽ không có thông báo lỗi nào xuất hiện, sau đó ta có thể dùng lệnh C:\

triển khai trên máy chủ SOAP. Nếu ta thấy danh sách dịch vụ có xuất hiện tên urn:HTService là quá trình triển khai của ta đã thành công. Ngoài ra nếu muốn gỡ bỏ dịch vụ SearchHotel Serviece, ta hoàn toàn có thể dùng lệnh để gỡ bỏ dịch vụ bằng lệnh

C:\Webservice > java org.apache.soap.Server.ServiceManagerClient

http://localhost:8080/soap/servlet/rpcrouter undeploy urn:HTService.

Ngoài việc sử dụng công cụ dòng lệnh để triển khai, gỡ bỏ, liệt kê danh sách các dịch vụ, chúng ta còn có thể sử dụng công cụ triển khai trực quan được truy cập thông qua địa chỉ

http://localhost:8080/soap/admin

Hình 33:Danh sách các dịch vụ liệt kê trên web site soap engine

Nhìn vào hình minh họa trên ta có thể thấy được danh sách các dịch vụ đã được triển khai trên máy chủ SOAP của chúng ta. Dễ thấy dịch vụ SearchHotel Service đã được triển khai, thể hiện của SearchHotel Service chính là “urn:HTService”.

SearchHotel Service đã được cài đặt trên nền J2EE, với máy chủ Soap engine chạy trên cổng 2417 sử dụng thư viện API Apache Soap. Giờ chúng ta sẽ tiến hành cài đặt dịch vụ SearchFlight trên Web Server Apache TomCat, tại cổng 8080, sử dụng thư viện API Apache Axis. Đây là một thư viện hoàn toàn khác so với Apache Soap, điều đó càng minh họa rõ hơn cho công nghệ Web Service là một công nghệ không phụ thuộc vào môi trường

Một phần của tài liệu XÂY DỰNG SERVICE PROXY ĐỂ KIỂM CHỨNG RÀNG BUỘC THỜI GIAN TRONG WEB SERVICE COMPOSITION (Trang 64 -64 )

×