Nghiên cứu kiến trúc hướng dịch vụ (service-Oriented architecture) và ứng dụng

Các thuộc tính messageType, type hay element được dùng đểchỉra kiểu của biến. Chính xác là chỉduy nhất một trong các thuộc tính này được sửdụng. ► messageType tham chiếu đến một kiểu messageType định nghĩa trong WSDL ► type tham chiếu đến kiểu lược đồXml đơn giản. ► element tham chiếu đến thành phần lược đồXml. Các biến có kiểu messge type có thể được dùng nhưcác biến đầu vào và ra của các xửlý nhưinvoke, receive và reply. Khi gọi một service trảvềthông điệp lỗi thì tạo ra một fault trong scope hiện hành, và biến fault trong fault handler sẽ được gán với giá trịlà thông điệp lỗi nhận được. Mỗi biến được khai báo trong một scope và được gọi là thuộc vềscope đó. Các biến được khai báo trong scope của tiến trình được gọi là biến toàn cục (global variable). Mỗi biến chỉcó thể được hiểu trong scope mà nó khai báo và trong tất cảcác scope lồng bên trong scope mà nó thuộc về. Vì thếcác biến toàn cục được hiểu trong suốt tiến trình. Ta có thể“che dấu” một biến ởscope bên ngoài bằng cách khai báo một biến trùng tên (trùng kiểu) ởscope bên trong. Các biến toàn cục ởtrạng thái chưa được khởi tạo khi bắt đầu tiến trình. Một biến cục bộ ởtrạng thái chưa được khởi tạo khi bắt đầu scope mà nó thuộc về. Có nhiều cách đểkhởi tạo một biến bằng các phép gán hay bằng cơchếnhận thông điệp. Các biến cũng có thể được khởi tạo từng phần bằng các phép gán property hay khi chỉthực hiện gán một sốpart của biến (một messageType có nhiều part). SYSTOOLS DEMO

pdf266 trang | Chia sẻ: haianh_nguyen | Lượt xem: 1225 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Nghiên cứu kiến trúc hướng dịch vụ (service-Oriented architecture) và ứng dụng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
đồng bộ. Xử lý hoàn thành khi tất cả xử lý bên trong đều hoàn thành. Một xử lý bên trong cũng có thể coi là hòan thành khi nó bị bỏ qua, không được kích hoạt do điều kiện kích hoạt của nó không thỏa. Một ví dụ đơn giản trong đó chứa hai activitiy . Hai xử lý này sẽ được kích hoạt khởi động cùng lúc ngay khi bắt đầu. Và kết thúc sau cả hai khi lời gọi trên nhận được phản hồi (giả sử rằng hai lời gọi trên là request/response). <invoke partnerLink="AmericanAirlines" Trang 208 portType="aln:FlightAvailabilityPT" operation="FlightAvailability" inputVariable="FlightDetails" /> <receive partnerLink="AmericanAirlines" portType="aln:FlightCallbackPT" operation="FlightTicketCallback" variable="FlightResponseAA" /> <invoke partnerLink="DeltaAirlines" portType="aln:FlightAvailabilityPT" operation="FlightAvailability" inputVariable="FlightDetails" /> <receive partnerLink="DeltaAirlines" portType="aln:FlightCallbackPT" operation="FlightTicketCallback" variable="FlightResponseDA" /> Tổng quát hơn, một xử lý ngòai khả năng hỗ trợ thực hiện cùng lúc các xử lý bên trong, nó còn có thể điều khiển đồng bộ hóa giữa những xử lý thông qua các ràng buộc đồng bộ (synchronization dependencies). được dùng để biểu diễn các mối ràng buộc này. Tất cả các của một đều phải được khai báo bên trong . Một được xác định bởi một tên (name) và thể hiện ràng buộc giữa hai xử lý. Trong đó • Một xử lý sẽ giữ vai trò là source của link (xử lý đó sẽ chứa với thuộc tính “linkName” là tên của , và còn có thể có thêm một thuộc tính “transitionCondition” với giá trị là một biểu thức bool – mặc định là “true”) • Xử lý còn lại sẽ giữ vai trò là target của link (xử lý đó sẽ chứa với thuộc tính linkName là tên của ). Target activity sẽ không được thực hiện chừng nào tình trạng của link đó chưa được kích họat. Tình trạng của một link gọi là được kích hoạt khi source activity của link đó kết thúc và transitionCondition của có giá trị “true”. Ngoài ra, target activity có thể có thêm thuộc tính “joinCondition” (sẽ được trình bày trong phần sau) Trang 209 Một được khai báo trong phải có đúng một source activity và một target activity. Và giữa hai xử lý được ràng buộc bởi nhiều nhất là một link, nghĩa là, với hai khác nhau thì không được có cùng source activity và cùng target activity. Một được gọi là “cross boundary” khi các source activity hay target activity của link được chứa trong một construct trong khi link được khai báo bên ngòai construct đó (một construct được tạo ra bởi một xử lý có cấu trúc). Ví dụ ở trên có thể minh họa cho trường hợp “cross boundary” (source activity của link ‘CtoD’ ỏ trong construct tạo ra bởi trong link đó được khai báo trong construct của ). Tuy nhiên tình trạng “cross boundary” này không được xảy ra với xử lý , event handler hay compensation hander. Riêng đối với fault handler thì link được phép “cross boudary”, trong đó fault-handler phải chứa source activity và target activity sẽ thuộc scope bao ngoài scope của fault-handler. Cuối cùng, một điểm nữa cần quan tâm đó là không được dùng link để tạo chu trình giữa hai xử lý, nghĩa là: B chỉ thực thi khi A hoàn thành và A chỉ thực thi khi B hoàn thành. Trang 210 Ngữ nghĩa của link (link semantic) Trong các phần còn lại chúng ta sẽ qui ước như sau: ► Những link mà trong đó A là source activity sẽ được gọi là link đầu ra của A. ► Những link mà trong đó A là target activity sẽ được gọi là link đầu vào của A. ► Nếu xử lý X là target và Y là source của link, thì ta nói rằng ‘X phụ thuộc đồng bộ vào Y’. Mỗi target activity đều có một “join condition” kèm theo (được hiểu ngầm hoặc khai báo tường minh). Các join condition được khai báo tường minh bằng các element ở bên trong element. Và giá trị của là một biểu thức bool. Ý nghĩa của joinCondition là được dùng để kiểm tra một xử lý có đủ điều kiện kích hoạt hay không. Trạng thái “sẵn sàng” của một xử lý sẽ được quyết định bởi các xử lý có cấu trúc chứa nó. Ví dụ, xử lý thứ hai trong một sẽ ở trạng thái “sẵn sàng” ngay khi xử lý thứ nhất hoàn thành ; một xử lý bên trong ở trạng thái “sẵn sàng” ngay khi được kích hoạt. Một xử lý đã ở trạng thái “sẵn sàng” và có một hay nhiều imcoming link, thì nó sẽ được kích hoạt khi trạng thái của tất cả các link đầu vào của nó đều đã được kích hoạt và join condition đi kèm theo được có giá trị “true ”. Trạng thái của một link có thể có một trong ba giá trị sau : được kích hoạt, không được kích hoạt và chưa xác định. Mỗi khi bắt đầu thực thi, thì tất cả các link đều có trạng thái là “chưa xác định”. Và ta thấy rằng chu kỳ sống của một link bằng đúng chu kỳ sống của xử lý mà nó được khai báo trong đó. Vai trò của link trong mối quan hệ đồng bộ giữa hai xử lý sẽ được giải thích một cách rõ hơn . Khi xử lý A hoàn thành, các bước sau sẽ được tiến hành : • Đánh giá trạng thái cho các link đầu ra của A. Trạng thái kết quả sẽ là “được kích hoạt” hay “không được kích hoạt”. Để xác định tình trạng của của mỗi link Trang 211 thì transitionCondition của link đó sẽ được đánh giá. Nếu transitionCondition=true thì trạng thái của link là “được kích hoạt”. Ngược lại thì là “không được kích hoạt”. Một điều lưu ý là việc đánh giá transitionCondition được thực hiện sau khi xử lý đã hoàn thành. Vì thế, nếu có bất kỳ lỗi nào xảy ra trong quá trình đánh giá thì cũng sẽ không ảnh hưởng đến kết quả trước đó của xử lý, và lỗi này sẽ được xử lý scope chứa xử lý đó. Nếu target activity ở bên ngòai scope của source activity thì trạng thái của link sẽ là “không được kích hoạt”. Một điều quan trọng cần nhớ là, trường hợp bản thân source activity là một , thì “hoàn thành” không nhất thiết là không được có lỗi trong quá trình xử lý. Trong quá trình xử lý của có thể có lỗi phát sinh. Nhưng vẫn được gọi là “hoàn thành” khi lỗi đó được bắt và xử lý thành công bởi một fault handler của scope. Trường hợp L với source activity là S, lỗi phát sinh nếu có trong quá trình đánh giá transitionCondition sẽ được truyền ra scope bên ngòai S. • Với mỗi xử lý B mà “phụ thuộc đồng bộ” vào A, sẽ kiểm tra: ► B đã ở trạng thái “sẵn sàng” chưa ► Trạng thái của tất cả link đầu vào của B đã “được kích hoạt” chưa • Nếu cả hai điều kiện trên đều thỏa, thì sẽ thực hiện đánh giá joinCondition của B. Nếu joinCondition có giá trị false thì lỗi “bpws :joinFailure ” sẽ được phát sinh, ngược lại, B sẽ được kích hoạt. Nếu trong quá trình thực thi của một xử lý có cấu trúc S, nếu một xử lý X bên trong S một không được thực thi (ví dự như link đầu vào của X “không được kích hoạt”) thì trạng thái của toàn bộ các link đầu ra của X được gán là “không được kích hoạt”. Trường hợp xử lý chứa bên trong nó một xử lý khác, và bên trong khai báo một số trùng tên với các đã được định nghĩa trước đó ở bên ngoài. Khi khai báo các và trong các xử lý mà có tham chiếu đến “linkName” thì tham chiếu sẽ được chuyển đến cùng tên nào mà gần xử lý đó nhất. Trang 212 o Một ví dụ cho trường hợp này <!—This matches F2.L1 and not F1.L1 --> ... ... ... Xử lý Dead-Path_elimination (DPE) Trong một số trường hợp mà luồng điều khiển rất phức tạp với việc sử dụng rất nhiều . Nếu joinCondition của xử lý A có giá trị false thì A sẽ không được thực thi, và một lỗi ‘bpws :joinFailure’ sẽ được phát sinh. Ngoài ra, ta cần phải thực hiện gán giá trị cho các link đầu ra của A là “không được kích hoạt”. BPEL4WS hỗ trợ vấn đề này thông qua việc sử dụng thuộc tính ‘suppressJoinFailure’ trong các xử lý. Nếu giá trị của thuộc tính này là ‘yes’, thì lỗi này sẽ được bắt và xử lý bởi một trình xử lý lỗi đặc biệt (fault handler này sẽ có phần xử lý là một xử lý). Tuy nhiên, bởi vì xử lý (có joinCondition = false) chưa được thực thi, nên các link đầu ra của nó phải được tự động gán trạng thái “không được kích hoạt”. Điều này sẽ giúp cho các xử lý liên quan được bỏ qua, tránh tình trạng ‘ngõ cụt’. Đây là tình trạng mà các xử lý phải chờ để được kích hoạt trong khi các link đầu vào của chúng ỏ tình trạng ‘không xác định.’ Trang 213 Link và các xử lý có cấu trúc Link có thể được dùng để liên kết hai xử lý được chứa trong những xử lý có cấu trúc khác nhau. Khi đó, ta cần thận trọng để đảm bảo luồng xử lý của tiến trình được thực hiện đúng theo ý muốn. Phần này sẽ làm rõ các vấn đề cần quan tâm thông qua phân tích một ví dụ. Mô tả ví dụ: ► Trong một chứa 3 xử lý: một S và hai X và Y. ► Bên trong S: sau khi A hoàn thành, B không được cho đến khi trạng thái của các link đầu vào của nó là X và Y được kích hoạt và joinCondition được đánh giá có giá trị true. ► Khi X và Y hòan thành, joinCondition của B được đánh giá. ► Giả sử rằng biểu thức P(X,B) OR P(Y,B) có giá trị false, khi đó lỗi “bpws:joinFailure” được phát sinh. Và bởi vì, giá trị của thuộc tính suppressionJoinFailure là “no” nên xử lý của bị dừng và cả B và C đều không được thực hiện. ► Trong trường hợp ngược lại, nếu giá trị của suppressionJoinFailure được gán là ”yes”, thì B sẽ bị bỏ qua nhưng C sẽ được thực thi bởi vì lỗi “bpws:joinFailure” sẽ được xử lý trong scope của B. ... ... ... Trang 214 P(X,B) ... P(Y,B) ... ► Sau đó, giả sử ta bổ sung bằng cách liên kết A, B và C với những link (có transitionCondition=”true”) thay vì để chúng trong một . Khi này, cả B và C sẽ luôn luôn được thực thi. Bởi vì transitionCondition của link “AtoB” luôn bằng “true”, nên joinCondition cũng sẽ luôn có giá trị “true”, bất chấp giá trị của biểu thức P(X,B) và P(Y,B). Trang 215 P(X,B) P(Y,B) A.7 Scope Ngữ cảnh xử lý (behavior context) của mỗi xử lý được cung cấp bởi một scope. Một scope có thể cung cấp một fault handler, event handler, compensation handler, data variable, partner link và correlation sets. Cú pháp khai báo của một scope như sau: standard-elements ? ... see above under for syntax ... ? ... see above under for syntax ... ? ... see above under for syntax ... ? ... see above under for syntax ... ? ... activity Mỗi scope có một xử lý chính dùng để phần xử lý của nó. Xử lý này có thể là một xử lý có cấu trúc phức tạp, với nhiều xử lý khác chứa bên trong nó. Scope được chia sẻ bởi tất cả các xử lý bên trong. Trang 216 Một ví dụ về scope với xử lý chính là . Xử lý sẽ chứa 2 xử lý cần xử lý cùng lúc. Một trong hai xử lý này có thể nhận một hay nhiều kiểu lỗi phản hồi. Phần fault handler của scope được chia sẻ bởi cả hai và có thể được dùng để bắt lỗi nhận về. ? ... <invoke partnerLink="Seller" portType="Sell:Purchasing" operation="SyncPurchase" inputVariable="sendPO" outputVariable="getResponse"/> <invoke partnerLink="Shipper" portType="Ship:TransportOrders" operation="OrderShipment" inputVariable="sendShipOrder" outputVariable="shipAck"/> A.7.1 Xử lý dữ liệu data và Partner Link Một scope có thể khai báo các biến và partner link mà chỉ có ý nghĩa sử dụng bên trong scope. A.7.2 Xử lý lỗi trong tiến trình nghiệp vụ Tiến trình nghiệp vụ thường thực hiện các tương tác trong thời gian dài và theo cơ chế bất đồng bộ. Các tiến trình còn thực hiện thao tác trên những dữ liệu nhạy cảm của các cơ sở dữ liệu bên trong hệ thống. Xử lý lỗi trong môi trường này là một yêu cầu khó khăn nhưng cần thiết. Xử lỹ lỗi trong tiến trình nghiệp vụ chủ yếu dựa trên khái niệm “compensation”, nghĩa là xây dựng các xử lý (application-specific) nhằm quay lui lại kết quả của công việc đã được thực hiện trước đó (trong bối cảnh là ta đang thực hiện một công việc lớn – một giao tác- gồm nhiều công việc nhỏ, vì một lý do gì đó mà ta không muốn tiếp tục thực hiện giao tác đó, nên ta sẽ xử lý quay lui lại những phần việc đã được làm). Trang 217 BPEL4WS hỗ trợ thực thi khái niệm “compensation” thông qua cung cấp khả năng xây dựng các thành phần xử lý lỗi (fault handling) và xử lý compensation (compensation handling). A.7.3 Compensation handler Định nghĩa một compensation handler Một compensation handler đơn giản là một lớp bọc cho phần xử lý quay lui (compensation) ở bên trong ? activity Như đã giải thích ở trên, ta có thể thực hiện gọi phương thức compensation từ trong một xử lý , thay vì phải khai báo một . o Gọi compensation trực tiếp từ xử lý <invoke partnerLink="Seller" portType="SP:Purchasing" operation="SyncPurchase" inputVariable="sendPO" outputVariable="getResponse"> <correlation set="PurchaseOrder" initiate="yes" pattern="out"/> <invoke partnerLink="Seller" portType="SP:Purchasing" operation="CancelPurchase" inputVariable="getResponse" outputVariable="getConfirmation"> o Trong ví dụ này, xử lý thực hiện xử lý mua hàng, và trong trường hợp cần quay lui (compensate) xử lý mua hàng vừa thực hiện, thì sẽ gọi phương thức “cancellation” với Trang 218 cùng portType, partnerLink, với kết quả đầu ra của lần mua hàng sẽ làm tham số đầu vào cho phương thức hủy này. o Gọi compensation từ (cú pháp chuẩn) <invoke partnerLink="Seller" portType="SP:Purchasing" operation="CancelPurchase" inputVariable="getResponse" outputVariable="getConfirmation"> <invoke partnerLink="Seller" portType="SP:Purchasing" operation="SyncPurchase" inputVariable="sendPO" outputVariable="getResponse"> <correlation set="PurchaseOrder" initiate="yes" pattern="out"/> Sử dụng một compesation hander Compensation handler có thể được gọi bằng cách dùng xử lý , chỉ ra tên của scope mà chứa compensation handler sẽ được gọi. Một compensation handler của scope chỉ được phép gọi khi scope đã kết thúc một cách bình thường. Lưu ý rằng trong trường hợp xử lý có định nghĩa bên trong nó một compensation handler, thì tên của xử lý này là tên của scope được dùng trong xử lý standard-elements Xử lý chỉ có thể được gọi trong ngữ cảnh sau: Trang 219 o Trong một fault handler của scope mà bao ngoài trực tiếp scope của compensation cần được thực thi. o Trong một compensation handler của scope mà bao ngoài trực tiếp scope của compensation cần được thực thi. A.7.4 Xử lý lỗi Xử lý lỗi trong BPEL4WS nhằm quay lui lại những xử lý xử lý không thành công (đã phát sinh lỗi) trong một scope. Các lỗi sẽ được bắt và xử lý trong các fault handler. Và ngay cả khi quá trình xử lý lỗi không bị vấn đề gì thì scope chứa xử lý phát sinh lỗi cũng không được gọi là kết thúc thành công. Và các compensation handler của những scope này không bao giờ được thực hiện. Việc thiết kế các fault handler trong scope sẽ cho phép ta lựa chọn các các xử lý lỗi khác nhau thông qua các xử lý . Mỗi xử lý sẽ được chỉ định để bắt một lỗi khác nhau, với QName của lỗi và một biến dùng để chứa các thông tin chi tiết. Nếu tên lỗi không được chỉ định, thì đó sẽ bắt tất cả các lỗi. Biến để chứa lỗi được chỉ định bằng cách sử dụng thuộc tính “faultVariable” trong . Biến này là cục bộ của fault handler mà nó được khai báo, và không được sử dụng ở bên ngoài. Ngoài ra, biến này là tùy chọn vì có những lỗi mà không có thông tin kèm theo. Phản hồi lỗi của xử lý là một dạng của lỗi, với tên rõ ràng và phần dữ liệu lỗi sẽ tùy thuộc vào định nghĩa về fault trong WSDL operation. Một dạng lỗi thứ hai là những lỗi được phát sinh do sử dụng xử lý kèm với tên và thông tin về lỗi. sẽ được sử dụng để bắt những lỗi mà không được quan tâm bởi các ở trên. ? * activity ? activity Trang 220 Bởi vì cơ chế linh hoạt trong việc cho phép chỉ định loại fault mà một có thể xử lý, nên sẽ có trường hợp một lỗi chỉ định xử lý bởi nhiều fault handler. Một số nguyên tắc được sử dụng để chọn ra thích hợp xử lý lỗi: • Nếu lỗi không có thông tin dữ liệu đi kèm, thì xử lý mà có faultName trùng với tên của lỗi sẽ được chọn. Nếu không, lỗi sẽ được xử lý bởi • Nếu lỗi có dữ liệu lỗi kèm theo, thì xử lý nào có tên lỗi và kiểu message type của biến lỗi (faultVariable) trùng với những thông tin tương ứng của biến lỗi sẽ được chọn để xử lý. Nếu không có nào thỏa, thì lỗi sẽ được xử lý bởi . Nếu không có hay được chỉ chọn, thì lỗi sẽ không được bắt bởi scope hiện tại mà sẽ được chuyển ra scope bên ngoài trực tiếp của scope hiện tại. Nếu lỗi được chuyển qua cho tiến trình xử lý, và không tìm thấy fault handler phù hợp thì tiến trình sẽ kết thúc một cách “không bình thường”, giống như khi một xử lý được gọi. Trang 221 Scope mà trong đó có xuất hiện lỗi được xem như có kết thúc không bình thường, cho dù lỗi đó có được bắt và xử lý hay không. Và compensation handler của một scope như thế sẽ không bao giờ được gọi. A.7.5 Xử lý sự kiện Toàn bộ tiến trình cùng với mỗi scope đều có thể được kết hợp với các event handler. Các event handle sẽ được gọi cùng lúc nếu sự kiện tương ứng xảy ra. Xử lý bên trong một event handler có thể là bất kỳ dạng xử lý nào ngoại trừ xử lý vì xử lý này chỉ được phép gọi trong fault handler và compensation handler. Có hai loại sự kiện. Loại sự kiện thứ nhất có thể là các thông điệp đến tương ứng với các operation trong WSDL. Loại thứ hai có thể là biến cố về thời gian. Cú pháp khai báo của event handler như sau: ? <!-- there must be at least one onMessage or onAlarm handler --> <onMessage partnerLink="ncname" portType="qname" operation="ncname" variable="ncname"?>* ? + activity * activity Điều cần lưu ý là, không giống như event handler và compensation handler, event handler được xem như một phần trong xử lý của một scope. Các sự kiện dạng thông điệp nhằm lắng nghe loại sự kiện thông điệp, nghĩa là chờ một thông điệp thích hợp được gửi đến. Ý nghĩa và các thuộc tính của và các thuộc tính của nó rất giống với xử lý (partnerLink, portType, operation, variable, correlation sets). Điểm khác biệt đó là không cho phép tạo các thể hiện tiến Trang 222 trình. Vì thế các event handler không có thuộc tính “createInstance”. Khi thông điệp chỉ định đến, xử lý tương ứng sẽ được thực thi. Một ví dụ về cách dùng event handler để hỗ trợ việc kết thúc một tiến trình thông qua một thông điệp từ bên ngoài gửi vào. ... <onMessage partnerLink=“buyer” portType=“car” operation=“cancel” variable=“cancelDetails”> ... ... Các sự kiện dạng biến cố thời gian dùng để biểu diễn một sự kiện dạng timeout. o Thuộc tính “for” chỉ ra khoảng thời gian mà sau đó sự kiện sẽ được chuyển đi. o Thuộc tính “until” chỉ ra thời điểm mà đến lúc đó sự kiện sẽ được chuyển đi. Thời gian bắt đầu tính khi scope của nó bắt đầu. onLarm chỉ có một trong hai thuộc tính được chỉ định. Sự kích hoạt event handler Event handler gắn với scope thì sẽ được kích hoạt ngay khi scope bắt đầu thực thi. Nếu event handler được gắn với tiến trình, thì sẽ được kích hoạt ngay khi thể hiện của tiến trình được tạo ra. Thể hiện của một tiến trình được tạo ra khi xử lý đầu tiên (với createInstance= “yes”) nhận được và xử lý thông điệp tương ứng. Một ví dụ sử dụng event handler để quản lý thời gian sống của thể hiện tiến trình. Đó là ta sẽ nhúng dữ liệu thời gian vào thông điệp dùng để tạo thể hiện tiến trình. Trang 223 <wsdl:definitions targetNamespace="" xmlns:xsd="" ...> <part name=“processDuration” type=“xsd:duration”/> <process name=“orderCar” xmlns:def="" ...> ... <onAlarm for= “bpws:getVariableData(orderDetails,processDuration)” > ... ... ... <variable name=“orderDetails” messageType="def:orderDetails"/> ... <receive name=“getOrder” partnerLink=“buyer” portType=“car” operation=“order” variable=“orderDetails” createInstance=“yes”/> ... Xử lý sự kiện tiến trình • Sự kiện dạng biến cố thời gian Việc tính thời gian cho một sự kiện kiểu biến cố thời gian bắt đầu ngay khi event handler được kích hoạt. Sự kiện sẽ được phát khi đến thời điểm hay sau khi đã qua một khoảng thời gian được chỉ đinh trong các thuộc tính “for” và “until”. Sự kiện loại này chỉ được thực hiện nhiều nhất là một lần và chuyển sang trạng thái “không còn hiệu lực” sau khi thực hiện phần xử lý kèm theo. Trang 224 • Sự kiện dạng thông điệp Sự kiện này xảy ra khi một thông điệp thích hợp được gửi đến. Khi đó, xử lý tương ứng sẽ được thực hiện. Sự kiện loại này có thể được lắng nghe và xử lý nhiều lần trong khi scope tương ứng vẫn còn hoạt động. Vô hiệu hoá các sự kiện Tất cả các event handler gắn với một scope sẽ bị vô hiệu hóa khi quá trình xử lý của scope đó kết thúc một cách bình thường. Một scope sẽ phải đợi cho đến khi tất cả các event handler xử lý xong để thật sự hoàn thành. Trang 225 Phụ lục B SOA VÀ WEB SERVICES B.1 Kiến trúc Web services Web services là một tập các chuẩn đặc tả mở rộng khả năng của các chuẩn có sẵn như XML, URL và HTTP nhằm cung cấp chuẩn truyền thông giữa các hệ thống với nhau. Web services là những thành phần thực thi một số xử lý nghiệp vụ thông qua những dịch vụ và cung cấp những dịch vụ qua mạng, những dịch vụ này có thể được triệu gọi bởi các dịch vụ client bằng cách sử dụng giao thức SOAP trên HTTP. Web services độc lập về ngôn ngữ và độc lập về nền tảng bởi vì nó tách biệt đặc tả ra khỏi cài đặt; nó còn hỗ trợ tích hợp loose coupling giữa các ứng dụng với nhau qua trao đổi các thông điệp đồng bộ và bất đồng bộ thông. Web services dựa trên kiến trúc phân tán trong đó không có bất kì dịch vụ xử lý trung tâm nào và tất cả dạng truyền thông đều sử dụng các giao thức chuẩn. Các giao thức không được có bất kì ý nghĩa ngầm định nào bên trong mà phải được mô tả rõ ràng. Một trong những đặc tính quan trọng của mô hình tính toán dựa trên Web services là ở đó cả các client và Web services đều không cần biết cài đặt của nhau. Kiến trúc Web services cung cấp nhiều thành phần cho phép các ứng dụng client tìm kiếm và sử dụng những Web services mình cần một cách động. Web services hứa hẹn mang đến khả năng tạo ra các môi trường phân tán trong đó bất kì ứng dụng nào, hoặc bất kì component ứng dụng nào cũng đều có thể kết hợp với nhau dễ dàng với tính độc lập nền tảng, và độc lập ngôn ngữ (language-neutral). Web service có thể được sử dụng vào các mục đích đơn giản như đang nhập vào một trang web hay với mục địch phức tạp như xử lý nghiệp vụ giao dịch vay mượn giữa các công ty với nhau. Điểm khác biệt chính của Web services với các công nghệ phân tán trước đây như Win32, J2EE và CGI là ở sự chuẩn hoá. Web services sử dụng XML, một ngôn ngữ độc lập trong việc biểu diễn dữ liệu, làm ngôn ngữ trao đổi thông tin. Bởi vậy khi được kết hợp với nhau, khả năng tích hợp phần mềm và đa kết nối giữa những mô hình web Trang 226 services thật đáng kinh ngạc. Thêm vào đó, các chuẩn Web services mới còn hỗ trợ các tình năng cao cấp như hỗ trợ giao dịch, bảo mật, quy trình nghiệp vụ, vân vân… Mô hình web services dạng đơn giản định nghĩa cách thức tương tác giữa Service Requester, Service Provider, và Service Directory như sau : Bên sử dụng dịch vụ tìm kiếm các dịch vụ trong một UDDI Service Directory. Chúng sẽ lấy thông tin mô tả WSDL của các Web services cung cấp bởi Service Providers từ trước thông qua Service Directory. Sau khi lấy được mô tả WSDL, bên yêu cầu dịch vụ kết nối đến nhà cung cấp dịch vụ bằng cách triệu gọi các dịch vụ thông qua giao thức SOAP. Web services cơ bản bao gồm các khái niệm SOAP, WSDL, và UDDI. Chúng ta sẽ lần lượt phân tích trong các phần sau. Cần lưu ý là các chuẩn trên có thể được kết hợp với nhau hoặc dùng độc lập tùy trường hợp cụ thể. Trang 227 B.2 Các đặt trưng của Web services B.2.1 Loosely coupled Loosely coupled nghĩa là các Web Service và chương trình triệu gọi chúng có thể thay đối độc lập với nhau thay vì phải thiết kế lại những thành phần liên quan ở hai bên mỗi khi có sử thay đối. Cũng có thể thay đổi Web service interface mà không làm ảnh hưởng đến khả năng tương tác của client với dịch vụ đó. Trong khi đó, với một hệ thống có tính tightly coupled, nghiệp vụ ở phía client và ơ server phải ràng buộc chặt chẽ với nhau, mỗi khi cố một interface thay đổi thì phía còn lại cũng phải được cập nhật. Xu hướng hiện nay là phát triển các kiến trúc có tính loosely coupled để các hệ thống phần mềm trở nên dễ quản lý hơn , làm cho khâu tích hợp các hệ thống khác nhau cũng trở nên dễ dàng hơn. B.2.2 Tính đóng gói Tính đóng gói (Encapsulated) nghĩa là phạm vi bên ngoài của mỗi Web service không được biết đến cài đặt của Web Service đó. Các chức năng chỉ được cung cấp thông qua các interface mà Web Service đó cung cấp. Về bản chất, Web Service trừa tượng hoá cài đặt của nó qua interface, tương tự như cách XML tách biệt thông tin ra khỏi xử lý. Web Service kế thừa tính đóng gói từ những kiến trúc hướng đối tượng dựa trên Java, C++ và COM. B.2.3 Contracted Contracted nghĩa là các hành vi của Web Service bao gồm cách thức kết nối, ràng buộc, các tham số đầu vào đầu ra đều được cung cấp đến người sử dụng Web Service đó. B.2.4 Giao thức chuẩn Web Service là một tập các chuẩn mở và phi thương mại. Web Service còn dựa trên nền tảng XML để định dựa dữ liệu và HTTP làm giao thức truyền dữ liệu, ngoài ra còn có SOAP, WSDL và UDDI là các chuẩn nền tảng của Web Service cũng dựa trên XML. Các chuẩn này có thể là đã cũ nhưng nếu không dựa trên đó, Web Service sẽ được triển khai như những hệ thống đóng, độc quyền và đặc trưng cho mỗi nhà cung Trang 228 cấp trao đối với nhau trên một nền tảng cố định. Tính mở của đặc tả Web Service cho phép nhiều nhà cung cấp và tổ chức trình thể hiện những cách nhìn đa dạng góp phần phát triển các công nghệ Web Service.. B.2.5 Tự định nghĩa Web Service tự định nghĩa chính nó. Tính tự định nghĩa (self-defining) là một đặc tính của XML được tận dụng trong những công nghệ nền tảng của Web Service như SOAP và WSDL. B.2.6 Tìm kiếm và triệu gọi động Bằng cách tận dụng công nghệ UDDI , một Web Service consumer có thể định vị và triệu gọi một Web Service trong khi chạy mà không cần biết trước cụ thể Web Service nào cài đặt, cung cấp chức năng mình mong muốn. B.3 Lợi ích của Web services Lợi ích của Web Service có thể tóm gọn trong một đoạn như sau : “Web Service cung cấp một cơ chế đơn giản để kết nối những ứng dụng lại với nhau bất kể công nghệ hoặc thiết bị chúng đang sử dụng hoặc vị trí. Web Service dựa trên các chuẩn giao thức được hỗ trợ rộng rãi trên internet nhằm giảm chi phí liên lạc. Cách tiếp cận có tính loose coupling hỗ trợ đa kết nối và chia sẻ thông tin giữa các dịch vụ, mà các được đó tự định nghĩa và có thể được tìm thấy một cách tự động” . Ta sẽ lần lượt tìm hiểu chi tiết lợi ích thương mại và lợi ích kỹ thuật của Web Service. ¾ Web Service có thể được truy cập ở mọi nơi, mọi lúc, hầu như trên bất kì công nghệ và thiết bị nào hỗ trợ Web Service. Lợi ích thương mại– Tăng hiệu suất quy trình nghiệp vụ Lợi ích kỹ thuật – Giảm chi phí Tăng hiệu suất của quy trình nghiệp vụ bằng cách giảm chi phí và thời gian kết nối các ứng dụng với nhau. Giảm chi phí kết nối Tăng khả năng truy xuất dữ liệu theo gian thực, kết nối từ xa đến các nguồn dữ liệu Giảm mức độ phức tạp của quá trình tích hợp Hỗ trợ thương mại thời gian thực Độc lập nền tảng và độc lập công nghệ Hỗ trợ khác hàng, đối tác và nhân viên Trang 229 ¾ Dựa trên các chuẩn giao thức được hỗ trợ rộng rãi trên internet Lợi ích thương mại và kỹ thuật – Giảm chi phí và lựa chọn Lợi ích từ các « chuẩn mở » Không phụ thuộc vào một công nghệ độc quyền nào Nhiều nhà cung cấp khác nhau Giảm chi phí công nghệ ¾ Loosely coupled Lợi ích thưong mại – Tăng cường quan hệ Lợi ích kỹ thuật – Giảm chi phí bảo trì Tạo thuận tiên cho vệic thêm vào hay thay đổi đối tác. Thay đổi về mặt hệ thống không hưởng đến nghiệp vụ Giảm chi phí bảo trì Giảm ảnh hưởng của thay đổi Sử dụng lại các thành phần có sẵn ¾ Hỗ trợ đa kết nối Lợi ích thưong mại Lợi ích kỹ thuật – Tiết kiệm chi phí Giảm số lượng phần mềm,công cụ, kỹ năng cần thiết trên nhiều lĩnh vực khác nhau. Tiếp cận vững chắc cho mọi bối cảnh bài toán Một kiến trúc chung cho mội bốii cảnh bài toán (ví dụ như bảo mật) ¾ Tự mô tả Lợi ích thương mại – Tiếp cận thị trường Lợi ích kỹ thuật – Rút ngắn chu kì phát triển Tăng thời gian tiếp cận thị trường bởi vì các kết nối đến đối tác và khách hàng bây giờ trở nên nhanh hơn và tự động. Tạo điều kiện thuận tiện cho đối tác hợp tác làm ăn. Giảm công sức phát triển vì dịch vụ được tự động hoá. Giảm ảnh hưởng của những thay đổi, tự động phản ứng với những thay đổi Dịch vụ có thể được triệu gọi tự động mà không cần đến sự can thiệp của nhân viên phát triển phần mềm ¾ Tự động tìm kiếm Lợi ích thương mại Lợi ích kỹ thuật – Rút ngắn chu kì phát triển Tạo điều kiện thuận tiện khách hàng tìm đến dịch vụ của ta. Dễ dàng tìm kiếm các đối tác mới và dịch vụ của họ. Giảm hoặc không cần loại bỏ công sức phát triển hỗ trợ các kết nối mới. Trang 230 B.4 SOAP SOAP là một đặc tả việc sử dụng các tài liệu XML theo dạng các thông điệp. Bản thân SOAP không định ra các ngữ nghĩa ứng dụng hoặc cách cài đặc chi tiết. SOAP cung cấp một cơ chế đơn giản và gọn nhẹ cho việc trao đổi thông tin có cấu trúc và định dạng giữa các thành phần trong một môi trường phân tán sử dụng XML. SOAP được thiết kế dựa trên những chuẩn nhằm giảm chi phí tích hợp các hệ thống phân tán xây dựng trên nhiều nền tảng khác nhau ở mức càng thấp càng tốt. Đặc tả về SOAP định nghĩa một mô hình trao đổi dữ liệu dựa trên 3 khái niệm cơ bản: các thông điệp là các tài liệu XML, chúng được truyền đi từ bên gửi đến bên nhận, bên nhận có thể chuyển tiếp dữ liệu đến nơi khác. Khái niệm cơ bản nhất của mô hình SOAP là việc sử dụng các tài liệu XML như những thông điệp trao đổi. Điều này có nhiều ưu điểm hơn các giao thức truyền dữ liệu khác. Các thông điệp XML có thể được tổng hợp và đọc với một bộ soạn thảo text đơn giản, ta có thể làm việc với XML trên hầu hết mọi nền tảng. Sau đây là một ví dụ về một thông điệp SOAP : <soap:Envelope xmlns:soap="" soap:encodingStyle=" /encoding/"> Hello world! Khi trao đổi các thông điệp SOAP, có hai thành phần liên quan: bên gửi và bên nhận. Thông điệp sẽ được chuyển từ bên gửi sang bên nhận. Đây là ý niệm đơn giản nhất trong trao đổi thông điệp SOAP. Trong nhiều trường hợp, kiểu trao đổi này không cung cấp đủ chức năng. Nhưng đây là mô hình cơ bản, dựa trên đó sẽ phát triển các mô hình trao đổi phức tạp hơn Trang 231 Hình B-1 – Một SOAP Operation đơn giản Một cấu trúc SOAP được định nghĩa gồm các phần: , và . Hình B-2 – Cấu trúc thông điệp SOAP Envelop là thành phần gốc của một thông điệp SOAP, nó chứa các thành phần Header và Body. Thành phần Header là một cơ chế mở cho phép thêm các tính năng vào bên trong một thông điệp SOAP. Mỗi thành phần con của Header gọi là một Header Entry. Các Header Entry dùng để diễn giải , quy định một số ngữ nghĩa của thông điệp SOAP. Các ứng dụng có thể xử lý và định tuyến các thông điệp dựa trên thông tin header và thông tin bên trong thông điệp đó. Đây là ưu điểm mà các mô hình kiến trúc như DCOM, CORBA và RMI không có được, vì các protocol header của chúng phải được chỉ định chi tiết cho mỗi ứng dụng. B.5 WSDL Web Sevice Description Language (WSDL) định nghĩa một lược đồ XML dùng để mô tả cấu trúc các dịch vụ theo dạng XML. Nó cung cấp thông tin cho các hệ thống phần tán và cho phép các ứng dụng trao đổi với nhau một cách tự động. Trong khi SOAP tập trung vào việc trao đổi thông tin giữa bên yêu cầu và bên cung cấp thì WSDL mô tả dịch vụ được cung cấp bởi bên cung cấp và được xem như một công thức để phát sinh các thông điệp SOAP đến các dịch vụ. Trang 232 Một tài liệu WSDL mô tả một Web Service như một tập các đối tượng trừu tượng gọi là các “ports” và “endpoint”. Một tài liệu WSDL cũng định nghĩa bên trong nó những hành vi. Hành vi tương ứng với “operation” và dữ liệu tương ứng với “message”. Một tập các hành vi liên quan được nhóm lại vào trong một “portType”. Một ràng buộc kết nối (binding) chỉ định một giao thức mạng và đặc tả định dạng dữ liệu cho một portType cụ thể. Kế đến một port được định nghĩa bằng cách kết hợp một địa chỉ mạng với một binding. Nếu một client có được một tài liệu WSDL và tìm thấy binding và địa chỉ cho mỗi port, nó có thể gọi các phương thức của dịch vụ theo đúng giao thức và định dạng dữ liệu đã đặc tả. Phần tử gốc của tất cả các tài liệu WSDL luôn là phần tử . Nó chứa bên trong sáu thành phần chia thành hai nhóm : thông tin trừa tượng và thông tin cụ thể. • Thông tin trừu tượng a. types b. messages c. portType • Thông tin cụ thể d. bindings e. services Các thành phần chứa những tham chiếu lẫn nhau như trong hình. Trang 233 Sau đây là một ví dụ mẫu về một đặc tả WSDL. <definitions xmlns:soap="" xmlns:s="" xmlns:s0="" targetNamespace=""> <soap:binding transport="" style="document" /> <soap:operation soapAction="" style="document" /> <soap:address location="" /> Trang 234 B.6 UDDI Về cơ bản Universal Description, Discovery, and Intergration (UDDI) là một nơi mà các tổ chức đăng ký và tìm kiếm các Web Service. Nó đóng vai trò như service broker cho phép người sử dụng dịch vụ tìm đúng nhà cung cấp dịch vụ cần tìm. UDDI hỗ trợ chức năng: • Thực hiện tìm kiếm, định vị những doanh nghiệp cung cấp dịch vụ hay sản phẩm theo phần loại theo vùng địa lý. • Thông tin về một nhà cung cấp dịch vụ bao gồm địa chỉ, thông tin liên lạc và các định danh. • Thông tin kỹ thuật (Technical information) về Web service mà doanh nghiệp cung cấp (ví dụ như cách sử dụng dịch vụ được cung cấp). Để sử dụng đến các dịch vụ của UDDI, bản thân UDDI cung cấp một tập hàm API dưới dạng SOAP Web Service. Tập API được chia làm hai phần: Inquiry API dùng truy vấn và Publisher’s API dùng đăng ký. Phần API dùng để truy vấn bao gồm hai phần con : một phần dùng để tạo ra các chương trình cho phép tìm kiếm và duyệt thông tin trên một UDDI registry, phần còn lại dùng để xử lý lỗi triệu gọi. Thành phần xử lý chính là bộ đăng ký UDDI, đó là một file XML dùng để mô tả một thực thể kinh doanh (business entity) kèm theo các Web service đi cùng. Sử dụng các dịch vụ của UDDI, các doanh nghiệp đăng ký thông tin về những Web service mà họ định cung cấp. Thông tin này đuợc thêm vào UDDI registry thông qua Web site hoặc sử dụng các công cụ lập trình sử dụng các dịch vụ theo đúng đặc tả UDDI programmer’s API. Lược đồ XML UDDI định nghĩa bốn loại thông tin cơ bản để kết nối đến Web service. Trang 235 Như hình trên, cấu trúc thông tin bao gồm : • Business entity Một business entity chức thông tin về công bao gồm tên công ty, một đoạn mô tả ngắn gọn và một vài thông tin liên lạc cơ bản (địa chỉ, số điện thoại, email, v.v….). Mỗi doanh nghiệp được cấp một định danh duy nhất, ví dụ như số D-U-N-S. • Business service Liên kết với mỗi business entity là một danh sách các business service cung cấp bởi business entity đó. Mỗi thành phần chứa thông tin mô tả về dịch vụ, về thông tin phân loại của dịch vụ và danh sách các binding template liên quan đến thông tin kỹ thuật của dịch vụ. Mỗi business service cần có ít nhất một binding template. Trang 236 • Binding template Gắn với mỗi business service là một danh sách các binding template cung cấp thông tin về địa điểm có thể tìm thấy Web Service và làm cách nào để sử dụng nó. Một cấu trúc binding template mô tả thông tin interface của Web Service và các địa chỉ URL. Mỗi bindingTemplate được định danh duy nhất thông qua số phát sinh tự động UUID lưu trong bindingKey. • tModels Mục đích của tModels là dùng để liên kết đến metadata bên ngoài UDDI. Thành phần quan trọng nhất của tModels là một URL trỏ đến một tài liệu mô tả thông tin metadata. Tài liệu này có thể là tài liệu bất kì HTML, Word, .. tùy ý mô tả một đặc tả kỹ thuật nào đó, ví dụ như giao thức mạng, dạng thức trao đổi hoặc luật tuần tự mà thông thường nhất là file mô tả thông tin service WSDL. Có hai thuộc tính cơ bản bên trong một tModel : tModelKey đóng vai trò định danh duy nhất giữa các tModel với nhau và name dùng cung cấp một tên với đầy đủ ngữ nghĩa cho tModel. <businessEntity xmlns="urn:uddi-org:api" businessKey="BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB"> Sample Services a description Symbol service a description ..... TU UT <tModelInstanceInfo tModelKey="123123"> <tModel authorizedName="..." operator="..." tModelKey="123123"> StockQuote Service WSDL description of a Symbol lookup service Trang 237 WSDL source document TU UT <keyedReference tModelKey="UUDI:12313" keyName="uudi- org:types" keyValue="wsdlSpec" /> Tóm lại SOAP, WSDL và UDDI có thể kết hợp với nhau theo sơ đồ sử dụng sau : 1. Nhà cung cấp Web Service mô tả Web Service trong một tài liệu WSDL và đăng ký nó lên một UDDI bằng cách sử dụng Publisher’s API. 2. Một người sử dụng dịch vụ UDDI Inquiry API để tìm thông tin về nhà cung cấp dịch vụ thích hợp. Nếu có, nó sẽ tìm kiếm tiếp tModel rồi từ đó lấy ra tài liệu mô tả WSDL. 3. Một yêu cầu dạng SOAP được tạo ra dựa trên tài liệu mô tả WSDL. 4. Yêu cầu SOAP trên sẽ được gửi đến nhà cung cấp dịch vụ và được xử lý. Trang 238 B.7 Một số chuẩn Web services mới • WS-Security : Mô tả cách thêm vào các header signature và mã hoá vào bên trong thông điệp dạng SOAP, cách thêm vào các token bảo mật như X.509, chứng thực và Keberos. • WS-Policy : Mô tả khả năng và những ràng buộc về bảo mật và chính sách nghiệp vụ giữa thành phần trung gian và địa chỉ endpoint. • WS-Trust : Một framework cho các mô hình trust, cho phép các Web Service cộng tác một cách an toàn và bảo mật. • … B.8 SOA và Web Service SOA là một kiến trúc phần mềm, bao gồm một tập các nguyên tắc thiết kế độc lập với kỹ thuật và công nghệ nhằm liên kết các dịch vụ. SOA bắt đầu với việc định nghĩa thành phần giao tiếp (interface) và sau đó, xây dựng kiến trúc hệ thống như là sự liên kết của các thành phần interface, phần thực thi của các interface và cách thức tương tác giữa các interface. Trong khi đó, Web services lại là một tập hợp các kỹ thuật và công nghệ (SOAP, WSDL, UDDI, HTTP...) được dùng để hiện thực hóa các nguyên tắc thiết kế của SOA. Trong thực tế, khái niệm SOA không phải là một khái niệm hoàn toàn mới, mà đã xuất hiện cách đây khá lâu. Và trong quá khứ đã có rất nhiều kỹ thuật khác được dùng để triển khai một hệ thống SOA như : • Distributed object : như CORBA, J2EE, COM/DCOM • Message-oriented middleware (MOM) : WebSphere MQ, Tibco, Rendezvous • TP monitor: CICS, IMS, Encinia, Tuxedo. • B2B platform: ebXML, RosettaNet Trang 239 Trong phần này, sẽ giải thích rõ một hệ thống SOA dựa trên Web services khác ra sao với một hệ thống SOA dựa trên các kỹ thuật cũ trước đây. • Cách tiếp cận dựa trên API và dựa trên nghiệp vụ ► Sự khác nhau cơ bản giữa việc triển khai một hệ thống SOA dựa trên các kỹ thuật cũ với khi dùng web service đó là ở cách tiếp cận. Các kỹ thuật trước tiếp cận theo cách sử dụng các hàm API trong khi kỹ thuật web services lại sử dụng cơ chế thông điệp. Lợi ích của cách tiếp cận mới đó là tạo ra được nhiều mô hình tương tác đa dạng, linh hoạt hơn như có thể xây dựng nhiều trạm điều khiển trung gian, xử lý vấn đề định tuyến, orchestration và tương quan, ngoài ra còn hỗ trợ độc lập với môi trường truyền dẫn (transport indenpendence). ► Tương tác giữa nhà cung cấp dịch vụ và đối tượng sử dụng dịch vụ không còn đơn giản là những kết nối điểm-điểm nữa. ► Hiệu suất hoạt động của hệ thống được tốt hơn bởi sự hỗ trợ của cơ chế định tuyến giúp định tuyến cho các luồng trao đổi dịch vụ một cách hiệu quả. ► Với những hỗ trợ trong việc sắp xếp, kết hợp, ... và quản lý các dịch vụ sẽ giúp xây dựng toàn bộ các qui trình nghiệp vụ một cách nhanh chóng, dễ dàng và hiệu quả hơn là thiết kế từng thành phần. ► Việc xác định một dịch vụ sẽ hiệu quả hơn thông qua việc sử dụng các thông tin tương quan (correlation information) • Sử dụng các dữ liệu mô tả (metadata) để tăng tính linh hoạt ► Một điểm yếu nữa của các tiếp cận dựa trên API khi triển khai một hệ thống SOA đó là sự hạn chế (thậm chí là hoàn tòan không có) trong thông tin mô tả dịch vụ. ► Web services dựa trên lược đồ XML để hỗ trợ dữ liệu tự mô tả. Ngoài ra Web services hỗ trợ nhiều chuẩn như WSDL để mô tả thông tin web service, UDDI để tạo nền tảng cho việc quản lý các web service cũng như Trang 240 các thông tin mô tả liên quan của web service. Từ đây sẽ hỗ trợ tốt hơn cho quá trình sử dụng và quản lý các tài nguyên mới lẫn cũ, thông qua: - Tích hợp ngữ nghĩa: các nhà quản lý có thể chỉ định thông tin nào cần trao đổi và cách thức trao đổi sẽ như thế nào. - Chuyển đổi thông tin: hỗ trợ việc chuyển đổi các định dạng dữ liệu trong quá trình trao đổi giữa các hệ thống khác nhau. • Tăng khả năng tương thích và tái sử dụng: ► Các hệ thống SOA không phải là các hệ thống kín (monolithic) và cũng không hẳn là phải được xây dựng mới hoàn toàn. Điều này có nghĩa là hệ thống phải có khả năng tương thích cao để có thể tích hợp với các hệ thống khác bên ngoài cũng như là các ứng dụng, tài nguyên sẵn có nhằm thực hiện tái sử dụng một cách có hiệu quả. ► Các kỹ thuật trước gặp rất nhiều khó khăn trong việc giải quyết vấn đề này, thậm chí là không thể, bởi bản thân các kỹ thuật đó không đưa ra được một chuẩn chung để các hệ thống khác nhau (về công nghệ, kỹ thuật, định dạng dữ liệu) có thể tương tác được với nhau. ► Trong khi đó Web service có thể giải quyết các yêu cầu trên một cách dễ dàng, hiệu quả, tiết kiệm được thời gian lẫn chi phí đó là thực hiện bao bọc những chức năng, ứng dụng, dữ liệu, ... thành các services có thể thực hiện quá trình tương tác với các hệ thống mới thông qua các chuẩn của Web service (SOAP, WSDL...) • Vấn đề sử dụng chuẩn ► Các kỹ thuật trước cũng đưa ra một định dạng thông điệp dùng trong quá trình giao tiếp của các dịch vụ. Nhưng thông điệp chung này được xây dựng dựa trên những chuẩn riêng, ràng buộc chặt chẽ với ngôn ngữ và môi trường của hệ thống. Điều này dẫn đến sự rối rắm, trùng lắp và khó tương thích giữa các chuẩn của các hệ thống. Trang 241 ► Trong khi đó, web service được xây dựng dựa trên các chuẩn đạt được sự nhất trí của cộng đồng phát triển (định dạng thông điệp dựa trên các chuẩn của W3C như là XML, và môi trường truyền thông điệp dựa trên SOAP). ► Ngoài ra các chuẩn này có thể tương thích tốt với nhau (ví dụ như WS- Security và WS-Policy). Hơn nữa, các chuẩn của Web service đều được thiết kế để có khả năng mở rộng để có thể phối hợp hoặc tích hợp với các chuẩn mới trong tương lai. Điều này có nghĩa rằng, sẽ không có chuyện lệ thuộc vào một nhà phát triển và khả năng tùy biến sẽ được hỗ trợ tối đa. Tinh thần này phù hợp với nguyên tắc thiết kế của SOA : “Chỉ cần đầu tư một lần vào xây dựng cơ sở hạ tầng, rồi sau này mọi chuyện đều trở nên dễ dàng.” ► Như vậy, tính tương thích và khả năng tích hợp cao đã được thiết kế và xây dựng trong kiến trúc Web service. Ta sẽ thấy rõ hơn những lợi ích của việc triển khai một hệ thống SOA dựa trên Web service qua việc so sánh với hai kỹ thuật khác là CORBA và WebSphere MQ Cơ sở so sánh WebSphere MQ CORBA XML Web services Chuẩn mở Không hỗ trợ Có hỗ trợ (Chuẩn của tổ chức OMG xây dựng) Có hỗ trợ (do tổ chức W3C, OASIS đưa ra) Hỗ trợ nhiều ngôn ngữ lập trình Có Có Có loosely-coupled Có thể Có thể Có Hợp đồng dịch vụ Định nghĩa hợp đồng độc lập với kỹ thuật? Word, Excel, Access CORBA IDL WSDL, Xml Schema, WS-Policy Định nghĩa thông điêp và các tham số COBOL CORBA IDL WSDL, XmlSchema Kiểm tra định dạng thông điệp và tham số Phải tự xây dựng CORBA IDL compiler XmlSchema và Xml parsers. Phân tích thông điệp và tham số Phải tự xây dựng Xử lý tự động dựa theo các ràng buộc về ngôn ngữ Tự động dựa vào các mô hình DOM, SAX, JAAS, JAX-RPC… Quản lý dữ liệu Kiểu dữ liệu Không có CORBA IDL XmlSchema và WSDL Kiểm tra dữ liệu Không có Có hỗ trợ kiểm tra tham số của các phương thức XmlSchema và Xml parser Truy vấn dữ liệu Không có Không có XPath và XQuery Trang 242 Quản lý dịch vụ Lưu trữ interface Không có CORBA interface repository UDDI Định danh dịch vụ Không có CORBA naming service UDDI Cung cấp dịch vụ ra bên ngoài Không CORBA trading service UDDI Vấn đề bảo mật Chứng thực Userid/password IIOP/TLS HTTPs, WS-Security Phân quyền Không có IIOP/TLS SAML, XACML, WS- Security Bảo về dữ liệu Không có IIOP/TLS HTTPs, WS-Security Tích hợp dữ liệu Không có IIOP/TLS HTTPs, WS-Security Các kiểu tương tác Một chiều, đồng bộ Có Có Có Request/Response Có, nhưng không được hỗ trợ mạnh, quản lý thông điệp ở mức ứng dụng Có Có Một chiều, bất đồng bộ Có, và hỗ trợ mạnh Có, nhưng hỗ trợ yếu WS_Reliability, WS- ReliableMessaging Publish/subscribe Có, nhưng yếu Có WS-Eventing, WS- Notìication Giao tiếp ở mức dịch vụ Chuyển đổi định dạng dữ liệu giữa các nền tảng và ngôn ngữ lập trình Mức độ đơn giản: ASCIIÅÆEDCIDIC Có Các thông điệp dạng text nên không cần chuyển đổi Chất lượng của dịch vụ Quản lý phiên làm việc Có Có WS- SecureConversation, WS-Context Cân bằng tải Có Có Không giải quyết bởi chuẩn, việc hỗ trợ tùy thuộc vào các nhà cung cấp sản phẩm Đảm bảo dữ liệu truyền Có Có WS-Reliability, WS- ReliableMessaging Quản lý giao tác Có Có WS-AT, BA, C và WS- CAF. Quản lý dịch vụ Không Không Web services distributed management (WSDM) và WS-Management. Trang 243 Phụ lục C ĐỊNH DẠNG CÁC FILE TRONG PROJECT BPEL DESIGNER File Process Deployment Descriptor (.pdd) Với mỗi tiến trình BPEL cần triển khai ta cần một mô tả triển khai tiến trình (.pdd). File XML này mô tả thông tin cho BPEL engine biết về tiến trình BPEL cần triển khai. Mỗi tiến trình (mỗi file .bpel) có file .pdd riêng của nó. Thành phần sẽ chứa toàn bộ các partner link và tham chiếu WSDL. Lược đồ XML cho file .pdd có thể tìm thấy ở TU [... endpoint reference....]? ? <myRole service="name" allowedRoles="namelist"? binding="MSG|RPC"/>? + + ? relativeDeploymentLocation là đường dẫn tương đối đến file BPEL. Thông thường, giá trị này chỉ là tên file BPEL có trong cùng thư mục với file .pdd. Bởi vì qname là một tên định danh cho nên tả phải sử dụng thuộc tính xmlns để xác định the namespace. Ví dụ <process name="bpelns:loanApprover" location="approver.bpel" xmlns:bpelns=""> Trang 244 The partner link mô tả các role được sử dụng trong mỗi partner của tiến trình. Partner Role Endpoint reference static Được mô tả trong bản mô tả cài đặt (BPEL4WS) dynamic Được định nghĩa trong tiến trình (BPEL4WS) invoker Lấy từ thông tin SOAP header của partner (WS-Addressing) principal Dò từ file Partner Definition (.pdef) dựa trên xác nhận chứng thực Ví dụ ứng dụng BPEL xử lý cho vay thì thông tin về partner link như sau: <wsa:EndpointReference xmlns:approver=""> approver:anyURI <wsa:ServiceName portName="SOAPPort">approver:LoanApprover <wsa:EndpointReference xmlns:assessor='> assessor:anyURI <wsa:ServiceName portName="SOAPPort">assessor:LoanAssessor Thành phần liệt kê mọi file WSDL tham chiếu bởi tiến trình BPEL. Nó được dùng bởi BPEL engine để tạo ra các đại diện WSDL trong bộ nhớ. Sau đây là ví dụ cho tiến trình xác nhận cho vay: <wsdl namespace="" location="wsdl/loandefinitions.wsdl"/> <wsdl namespace="" location="wsdl/loanapproval.wsdl"/> <wsdl namespace="" location="wsdl/loanapprover.wsdl"/> <wsdl namespace="" location="wsdl/loanassessor.wsdl"/> Trang 245 Trong mỗi thành phần , thuộc tính namespace không cần sử dụng tới. Thuộc tính location có thể là tên một file hay một địa chỉ URL bất kì. File wsdlCatalog.xml File wsdlCatalog.xml được chứa trong thư mục META-INF. <wsdlEntry location="string" classpath="slash/separated/classpath/filename.wsdl"/>* Thuộc tính location chỉ đến một file WSDL theo một trong hai cách. Giá trị của nó có thể là: • Thuộc tính location của một thành phần trong phần wsdlReferences của một file .pdd • Thuộc tính location của một element bên trong một file WSDL Khi nạp một file WSDL lúc triển khai, engine xử lý đọc tham chiếu WSDL từ file .pdd và sử dụng thuộc tính location của thành phần như là khoá đến WSDL catalog. Nếu WSDL catalog chứa địa chỉ tương ứng thì engine sẽ nạp file WSDL từ đường dẫn tương ứng. Nếu không có, engine sẽ tự hiểu đây là địa chỉ tuyệt đối URL và sẽ nạp file WSDL từ địa chỉ này. Sau đây là một ví dụ về file wsdlCatalog.xml. <wsdlEntry location="wsdl/loanapproval.wsdl" classpath="wsdl/loanapproval.wsdl"/> <wsdlEntry location="wsdl/loanapprover.wsdl" classpath="wsdl/loanapprover.wsdl"/> <wsdlEntry location="wsdl/loanassessor.wsdl" classpath="wsdl/loanassessor.wsdl"/> <wsdlEntry location="wsdl/loandefinitions.wsdl" classpath="wsdl/loandefinitions.wsdl"/> File Partner Definition (.pdef) ... endpoint reference.... * * Partner link mô tả mối quan hệ giữa các. File định nghĩa partner không nhất thiết phải cần có trong mọi tiến trình BPEL processes, chỉ những tiến trình có endpoint reference dạng principal mới sử dụng chúng. Mỗi khi có yêu cầu chứng thực thì file này được sử dụng để cung cấp thông tin chứng thực.

Các file đính kèm theo tài liệu này:

  • pdfCNTT1018.pdf
Tài liệu liên quan