- Hãy chắc chắn để sử dụng URL khi bắt đầu các máy chủ Di chuyển các lớp trong thư mục server vào máy chủ của bạn và bắt đầu đăng ký RMI và máy
VII/ Remote Method Calls with SOAP(Gọi phương thức từ xa qua giao thức SOAP):
xa qua giao thức SOAP):
- Trong những năm gần đây, các dịch vụ Web đã nổi lên như 1 công nghệ phổ biến cho cơ chế gọi phương thức từ xa. Về mặt kỹ thuật, 1 dịch vụ Web gồm có 2 phần:
Một server có thể được truy cập bằng giao thức truyền Simple Object Access Protocol (SOAP)
Một mô tả về dịch vụ bằng định dạng Web Service Description Language (WSDL)
- SOAP là 1 giao thức XML, gần giống với IIOP của CORBA, cung cấp 1 giao thức cho cơ chế gọi phương thức từ xa. Cũng giống như bạn có thể lập trình server và client trên nền CORBA mà không cần hiểu gì về IIOP, nên bạn thực sự không cần hiểu chi tiết về SOAP để gọi 1 dịch vụ Web.
- WSDL tương tự như IDL. Nó mô tả interface của dịch vụ Web. Trong phần này, ta chỉ thảo luận cách thực thi của 1 client kết nối tới 1 dịch vụ Web hiện hành.
- Việc thực thi dịch vụ Web vượt quá phạm vi của cuốn sách. Để có nhiều thông tin hơn hãy xem Chapter 8 của J2EE tutorial tại
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html
- Để hình dung 1 dịch vụ Web dễ hiểu, ta xét ví dụ cụ thể sau: Dịch vụ Web của Amazon, mô tả ở địa chỉ http://www.amazon.com/gp/aws/landing.html. Dịch vụ Web của Amazon cho phép 1 người lập trình tương tác với hệ thống của
74 Lập Trình Hệ Thống Với Java – Tìm hiểu lập trình phân tán trong Java
Amazon với nhiều mục tiêu đa dạng. Chẳng hạn, bạn có thể có được danh sách của tất cả cuốn sách chỉ cần đưa ra tên tác giả hay tựa đề cuốn sách. Amazon tạo ra dịch vụ này để các công ty có nhu cầu bán các mặt hàng của họ cho người tiêu dùng, sử dụng hệ thống của Amazon giống như là fulfillment backend. Để chạy ví dụ này, bạn cần đăng nhập vào Amazon và nhận thẻ miễn phí dành cho người phát triển(developer) để có thể kết nối tới dịch vụ.
- Bạn có thể phỏng theo các kỹ thuật đã mô tả trong phần này cho bất kỳ dịch vụ Web nào. Trang http://www.xmethods.com cung cấp rất nhiều dịch vụ Web miễn phí cho bạn thử.
- Vì sao những dịch vụ Web lại có nhiều sức hút đến vậy?, bởi vì chúng là ngôn ngữ trung gian. Chẳng hạn, ta có thể truy cập vào Amazon Web Services bằng cách dùng chương trình Java, nhưng những người phát triển khác có thể truy cập bằng C++ hay Visual Basic cũng được. The WSDL descriptor describes the
services in a language-independent manner(WSDL mô tả các dịch vụ bằng 1 ngôn ngữ độc lập). Chẳng hạn, WSDL của Amazon Web Services (ở địa chỉ
http://soap.amazon.com/schemas3/AmazonWebServices.wsdl) mô tả 1 operation
AuthorSearchRequest như sau:
<operation name="AuthorSearchRequest"> <input message="typens:AuthorSearchRequest"/> <output message="typens:AuthorSearchResponse"/> </operation> . . . <message name="AuthorSearchRequest"> <part name="AuthorSearchRequest" type="typens:AuthorRequest"/> </message> <message name="AuthorSearchResponse">
<part name="return" type="typens:ProductInfo"/> </message>
- Ngoài ra, nó định nghĩa các kiểu dữ liệu. Sau đây là định nghĩa AuthorRequest
<xsd:complexType name="AuthorRequest"> <xsd:all>
<xsd:element name="author" type="xsd:string"/> <xsd:element name="page" type="xsd:string"/> <xsd:element name="mode" type="xsd:string"/> <xsd:element name="tag" type="xsd:string"/> <xsd:element name="type" type="xsd:string"/> <xsd:element name="devtag" type="xsd:string"/>
75 Lập Trình Hệ Thống Với Java – Tìm hiểu lập trình phân tán trong Java
<xsd:element name="locale" type="xsd:string" minOccurs="0"/>
<xsd:element name="keywords" type="xsd:string" minOccurs="0"/>
<xsd:element name="price" type="xsd:string" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
- Khi được chuyển sang Java, AuthorRequest sẽ trở thành 1 lớp: public class AuthorRequest
{
public AuthorRequest(String author, String page, String mode, String tag, String type,
String devtag, String sort, String locale, String keyword, String price) { . . . }
public String getAuthor() { . . . }
public void setAuthor(String newValue) { . . . } public String getPage() { . . . }
public void setPage(String) { . . . } . . .
}
- Để gọi dịch vụ tìm kiếm, khởi tạo 1 đối tượng AuthorRequest và gọi
authorSearchRequest của đối tượng “port”:
AmazonSearchPort port = (AmazonSearchPort) (new AmazonSearchService_Impl()
.getAmazonSearchPort());
AuthorRequest request = new AuthorRequest(name, "1", "books", "", "lite", "", token, "",
"", "");
ProductInfo response = port.authorSearchRequest(request); - Đối tượng “port” sẽ biến đối tượng Java thành 1 message của SOAP,
truyền nó tới server Amazon, và biến message trả về thành 1 đối tượng ProductInfo . Sau đó lớp port sẽ được tự động tạo ra.