Ứng dụng SOA và Webservice trong việc tích hợp các hệ thống cũ

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu, ứng dụng phương pháp kiến trúc và mô hình hóa hướng dịch vụ trong công nghệ phát triển phần mềm (Trang 67 - 72)

Chƣơng 4 SOA VÀ VẤN ĐỀ TÍCH HỢP

4.5. Ứng dụng SOA và Webservice trong việc tích hợp các hệ thống cũ

Cơng nghệ web service có thể được dùng để xây dựng cầu nối giao tiếp cho các hệ thống xây dựng trên những hệ nền, sử dụng những công nghệ hay chuẩn khác xa nhau, như là .NET, J2EE, CORBA, WebSphere MQ, hay các ứng dụng đóng gói. Thành phần giao tiếp này sử dụng ngôn ngữ XML và thể hiện các qui ước về trao đổi thông điệp giữa các hệ thống.

Một trong các ưu điểm của một cầu nối giao tiếp được định nghĩa tốt đó là nó có thể được mở rộng để có thể bổ sung thêm các đặc tính mới của web service hay tích hợp thêm các hệ thống cũ. Khi đó, các hệ thống cũ sẽ được dịch vụ hóa bằng cách định nghĩa thêm các đặc tả dịch vụ cho chúng và xây dựng thêm các bộ xử lý thông điệp SOAP. Các bộ xử lý thơng điệp SOAP này có khả năng nhận các thông điệp SOAP và chuyển đổi chúng sang dạng thông điệp hay lời gọi phương thức đặc thù của hệ thống cũ. Lợi ích đạt được của cách làm này là vơ cùng lớn, nó cho phép các tổ chức có thể tái sử dụng lại các giá trị sẵn có và khơng phải thực hiện công việc gỡ bỏ và thay thế đầy tốn kém và rủi ro.

Một số dạng hệ thống cũ có khả năng dịch vụ hóa, bao gồm:

 Các hệ thống tính tốn tập trung - mainframe (ví dụ như CICS và IMS)  Các ứng dụng phân tán hướng đối tượng (như CORBA, DCOM, EJB)  Các hệ thống xử lý giao tác (như Tuxedo và Encina)

 Các ứng dụng đóng gói (như các ứng dụng của SAP, PeopleSoft, Oracle).  Các hệ quản trị cơ sở dữ liệu (như Oracle, Sybase, DB2, SQL Server)  Các hệ thống B2B và xử lý thông điệp (như SWIFT, EDIFACT, X12,

Ví dụ : Service hóa một CORBA server:

- IDL (Interface Definition Language) là ngôn ngữ chuẩn dùng để xây dựng phần giao tiếp cho các CORBA server. Tổ chức OMG đã định nghĩa một đặc tả để thực hiện ánh xạ từ IDL sang WSDL. Dựa trên cơ sở này ta có thể chuyển đổi một CORBA IDL sang một đặc tả dịch vụ WSDL, bao gồm các thông tin về: kiểu dữ liệu, các thông điệp, cổng giao tiếp, và các thông tin kết nối.

- Bước đầu tiên trong việc dịch vụ hóa một CORBA server đó là phải chuyển đổi CORBA IDL sang WSDL. Sau đây là một ví dụ đơn giản về môt CORBA IDL với một thành phần giao tiếp và hai phương thức:

interface HelloWorld { string sayHi ();

string greetMe (in string user); };

- Và đây là một phần của đặc tả dịch vụ WSDL tương ứng, bao gồm một cổng giao tiếp và hai phương thức.

<types> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <element name="HW.HelloWorld.sayHi.return" type="xsd:string"/> <element name="HW.HelloWorld.greetMe.user" type="xsd:string"/> <element name="HW.HelloWorld.greetMe.return" type="xsd:string"/> </schema> </types> <message name="HW.HelloWorld.sayHi"/> <message name="HW.HelloWorld.sayHiResponse">

<part element="xsd1:HW.HelloWorld.sayHi.return" name="return"/> </message>

<message name="HW.HelloWorld.greetMe">

<part element="xsd1:HW.HelloWorld.greetMe.user" name="user"/> </message>

<message name="HW.HelloWorld.greetMeResponse">

<part element="xsd1:HW.HelloWorld.greetMe.return" name="return"/> </message>

<portType name="HW.HelloWorld"> <operation name="sayHi">

<input message="tns:HW.HelloWorld.sayHi" name="sayHi"/> <output message="tns:HW.HelloWorld.sayHiResponse"

name="sayHiResponse"/>

</operation>

</portType>

- Một file WSDL đầy đủ có thể nhúng vào một IDE (như là Microsoft Visual Studio) để xây dựng một đối tượng yêu cầu dịch vụ (proxy)

Hình 4-12 – Dịch vụ hóa một CORBA server

 Cơ chế vận hành sẽ như sau:

 Đối tượng sử dụng dịch vụ sẽ gửi một thông điệp SOAP đến cổng dịch vụ (legacy service gateway) thông qua nghi thức HTTP.

 Cổng dịch vụ có nhiệm vụ chuyển đổi các thơng điệp SOAP này sang một hay nhiều lời gọi các đối tượng trên CORBA server

 Cổng dịch vụ cũng sẽ phải thực hiện chuyển các thông tin phản hồi từ CORBA server thành các thông điệp SOAP và trả chúng về cho phía yêu cầu dịch vụ

 Tùy thuộc vào việc xây dựng, legacy service gateway có thể là một thư viện được nạp vào khi chạy các đối tượng yêu cầu dịch vụ, hay khi chạy CORBA server, và cũng có thể là một ứng dụng độc lập.

 Đặc biệt, sẽ tốt hơn nếu legacy service gateway hỗ trợ việc quản lý cơ chế hoạt động của nó thơng qua thơng tin cấu hình dựa trên đặc tả dịch vụ WSDL. Điều này thực hiện được nếu như đặc tả dịch vụ WSDL chứa thêm các thông tin như là cổng giao tiếp (portType) và kết nối (SOAP binding và CORBA/IIOP binding).

 HelloWorld portType <portType name="HW.HelloWorld"> <operation name="sayHi"> <input message="tns:HW.HelloWorld.sayHi"name="sayHi"/> <output message="tns:HW.HelloWorld.sayHiResp" name="sayHiResp"/> </operation> <operation name="greetMe">

<input message="tns:HW.HelloWorld.greetMe" name="greetMe"/> <output message="tns:HW.HelloWorld.greetMeResp"

name="greetMeResp"/>

</operation> </portType>

 SOAP binding

<binding name="HW.HelloWorlf_SOAPBinding" type="tns:HW.HelloWorld"> <soap:binding style="document"

transport="http://schemas.xmlsoap.org/soap/http"/>

<operation name="sayHi">

<soap:operation soapAction="" style="document"/>

<input name="sayHi"><soap:body use="literal"/></input> <output name="sayHiResponse">

<soap:body use="literal"/></output> </operation>

<operation name="greetMe">

<soap:operation soapAction="" style="document"/>

<input name="greetMe"><soap:body use="literal"/></input> <output name="greetMeResponse">

<soap:body use="literal"/></output> </operation>

</binding>

...

<port binding="tns:HW.HelloWorld_SOAPBinding" name="SoapPort"> <soap:address location="http://localhost:9000"/>

</port>

 CORBA/IIOP binding

<binding name="HW.HelloWorldBinding" type="tns:HW.HelloWorld"> <corba:binding repositoryID="IDL:HW/HelloWorld:1.0"/> <operation name="sayHi">

<corba:operation name="sayHi">

<corba:return idltype="corba:string" name="return"/> </corba:operation> <input name="sayHi"/> <output name="sayHiResponse"/> </operation> <operation name="greetMe"> <corba:operation name="greetMe">

<corba:param idltype="corba:string" mode="in"

name="user"/>

<corba:return idltype="corba:string" name="return"/> </corba:operation> <input name="greetMe"/> <output name="greetMeResponse"/> </operation> </binding> ...

<port binding="tns:HW.HelloWorldBinding" name="HW.HelloWorldPort"> <corba:address location="file:../../HelloWorld.ior"/>

Kỹ thuật này có thể được sử dụng cho những hệ thống cũ nào mà hỗ trợ IDL (như là Tuxedo FML) hay hỗ trợ các tính năng về reflection (Java, COM, lược đồ dữ liệu của các hệ quản trị cơ sở dữ liệu quan hệ.). Và dễ thấy rằng, kỹ thuật này sẽ đơn giản hơn khi có những chuẩn để thực hiện ánh xạ sang đặc tả dịch vụ WSDL.

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu, ứng dụng phương pháp kiến trúc và mô hình hóa hướng dịch vụ trong công nghệ phát triển phần mềm (Trang 67 - 72)