Module thực hiện: tìm chu trình hoặc tìm điều kiện joinCondition gây bế tắc trong <flow>.
Bước 2: Bài toán 1 và bài toán 3, quy về tìm chu trình trong đồ thị có hướng. Đối với
bài toán 2, từ đồ thị có hướng G = (V, E) xây dựng ở bước 1, xét thuộc tính điều kiện
joinCondition của link. Điều kiện joinCondition là điều kiện đi kèm với các
thành phần đích <target> của <link> hay là điều kiện nối của các thành phần
<link>. Giá trị của joinCondition là biểu thức Boolean, trả về true hoặc
false. Nếu giá trị của joinCondition bằng true, thì thành phần activities tiếp
theo sẽ không được thực thi, ngược lại, luồng thực thi vẫn tiếp tục. Trong trường hợp, xét các điều kiện joinCondition của các link đi ra từ thành phần hoạt động lựa chọn <if>, với giá trị của joinCondition bằng true, thì các thành phần hoạt động tiếp theo sẽ không bao giờ được gọi tới, chương trình chạy ném ra một lỗi sai chuẩn từ thuộc tính bpel:joinFailure hoặc suppressJoinFailure. Các trường hợp này, là lỗi chương trình trong quá trình runtime, nên các công cụ lập trình không phát hiện và cảnh báo. Vì thế, với các link đi ra từ thành phần lựa chọn <if>, xét điều kiện
nối joinCondition, nếu điều kiện là phép toán logic OR, đưa bài toán tìm chu
trình trong đồ thị có hướng G cho bài toán 1 và bài toán 3 ở bước 2.1, còn lại, điều kiện joinCondition là phép toán logic AND, giải quyết bài toán 2 ở bước 2.2. - Bước 2.1: Tìm chu trình trong đồ thị có hướng G = (V, E)
với V = {If, Assign, Assign1, Assign2} và
E = {(If, Assign), (If, Assign1), (Assign, Assign2), (Assign1, Assign2), (Assign2, If)}. Áp dụng thuật toán tìm kiếm theo chiều sâu DFS (Depth First Search) trong đồ thị, thuật toán có thể trình bay tư tưởng như sau: bắt đầu từ đỉnh s chẳng hạn, mọi đỉnh u
kề với s sẽ đến được s. Với mỗi đỉnh u đó, những đỉnh v kề với u cũng sẽ đến được s…. Khi đó một thủ tục đệ quy DFS(u) mô tả việc duyệt từ đỉnh u bằng cách thăm đỉnh u và tiếp tục quá trình duyệt DFS(v) với v là một đỉnh chưa được thăm kề với u. Tuy nhiên, mục tiêu để xác định đồ thị có chu trình hay không, nên trong đồ thị có hướng, khi v là đỉnh đã được thăm kề với u, thì xác định một chu trình từ đường đi từ s tới v hay không với v là điểm bắt đầu và cũng là điểm kết thúc. Nếu không tồn tại chu trình, duyệt tiếp các đỉnh còn lại dùng đệ quy như trên. Để quá trình duyệt không bỏ sót bất kỳ đỉnh nào, dùng kỹ thuật đánh dấu để phát hiện đỉnh đó đã được thăm hay chưa. Như thế sẽ dễ dàng để tìm chu trình trong đồ thị.
- Bước 2.2: Trong nhiều trường hợp, điều kiện joinCondition được sử dụng cho nhiều <target> của <link> với phép toán logic là AND, chương trình không thực thi được, và ném ra một lỗi chương trình khi runtime, tuy nhiên đó là trường hợp biến dữ liệu làm điều kiện phép AND không thể bằng true, trường hợp đó không xét trong phạm vi luận văn này. Khi nhiều <link> đi ra từ các nhánh của thành phần hành động lựa chọn <if>, điều kiện joinCondition là phép logic AND, thì giá trị
của joinCondition luôn bằng false. Thành phần hoạt động tiếp theo sẽ không
được thực thi, chương trình sẽ ngừng.
Module Test: Đầu vào chương trình: mã nguồn BPEL chia làm ba kiểu, được xây dựng bằng công cụ Eclipse hoặc Jdeveloper, cấu hình server để chạy kiểm chứng kết quả.
- Kiểu 1: chương trình chạy đúng, cho ra kết quả như ý muốn. Đây là các chương trình đúng logic.
- Kiểu 2: chương trình như mô tả bài toán 1 và bài toán 3, sẽ xuất hiện chu trình. - Kiểu 3: chương trình như mô tả bài toán 2, sẽ gây ra vấn đề bế tắc bởi điều kiện joinCondition bằng AND.
Đầu ra trả về: thông báo dạng cảnh báo, mã nguồn BPEL có khả năng xảy ra chu trình hoặc bế tắc.
3.3. Kết quả đánh giá công cụ
Với đầu vào là ba kiểu dạng mã nguồn chương trình BPEL đã xây dựng bằng công cụ Eclipse hoặc JDeveloper, các mã nguồn này không bị công cụ lập trình trên cảnh báo lỗi cú pháp ngôn ngữ BPEL. Công cụ phát hiện bế tắc đối với chương trình BPEL sử dụng thành phần hoạt động <flow>, đối với dạng mã nguồn kiểu 1, kết quả trả lại phải không thông báo các lỗi chu trình hoặc bế tắc. Dạng mã nguồn kiểu 2, tìm chu trình, nếu tồn tại chu trình sẽ cảnh báo, có khả năng sẽ xuất hiện chu trình logic trong quá trình runtime. Dạng mã nguồn kiểu 3, phân tích điều kiện joinCondition từ của các link, nếu các link điều hướng phụ thuộc cho các nhánh của thành phần lựa
1.1), thì cảnh báo lỗi sai về cách sử dụng thành phần <link> gây ra bế tắc. Trong nội dung luận văn này giới thiệu công cụ phát hiện cảnh báo trong quy trình nghiệp vụ sử dụng thành phần hoạt động <flow>, có những điểm đã làm được và chưa làm được cần phải nghiên cứu và phát triển thêm như sau:
Kết quả:
- Phát hiện ra vấn đề gây bế tắc trong tiến trình nghiệp vụ BPEL chứa thành phần
<flow> sử dụng thành phần <link> kết hợp với thành phần hoạt động lựa chọn
<if>, và thành phần tuần tự <sequence>.
- Xây dựng công cụ bằng ngôn ngữ Java phát hiện và cảnh báo lỗi bế tắc.
- Kiểm chứng công cụ bằng các mã nguồn BPEL đã được chạy thực thi bằng các công cụ lập trình BPEL như Eclipse hay JDeveloper.
Định hướng thời gian tới:
- Chưa lường hết được luồng điều khiển trong chương trình BPEL với thành phần <scope> và trình điều khiển ngoại lệ bpel:joinFailure hoặc
suppressJoinFailure. Và sự kết hợp phức tạp giữa thành phần hoạt động
<flow> với các thành phần hoạt động lặp một phần chương trình như <while>, <
repeatUntil>, <forEach>, hay các chương trình nhiều <flow> lồng nhau, đưa
ra công thức hoặc điểm chung của bài toán bế tắc trong <flow>.
- Đối với bài toán 2, bế tắc do điều kiện joinCondition của các <link> từ các nhánh của thành phần hoạt động lựa chọn <if>, phải tối ưu thuật toán, liên quan tới các phép toán logic của điều kiện joinCondition, với biểu thức logic phức tạp, kết hợp của nhiều phép toán AND hoặc OR của nhiều <link>.
- Phát hiện thêm các lỗi gây bế tắc khác, như liên quan tới sự phụ thuộc điều kiển các biến hoặc dữ liệu của chương trình BPEL.
- Hoàn thiện công cụ hoàn chỉnh hơn.
Tổng kết chương ba
Trong chương này, luận văn trình bày ý tưởng giải quyết các bài toán gây bế tắc trong
<flow> đưa ra ở chương hai. Từ đó, phát biểu về công cụ xây dựng để kiểm tra, cảnh
Kết luận
Luận văn đã tìm hiểu về ngôn ngữ thực thi tiến trình nghiệp vụ BPEL cùng các thành phần hoạt động của nó. Tìm hiểu về thành phần hoạt động xử lý song song <flow>
và thành phần điều khiển phụ thuộc <link>. Từ đó, phát hiện ra các vấn đề về bế tắc như xuất hiện chu trình logic, hay bế tắc luồng thực thi. Sự kết hợp giữa thành phần hoạt động <flow> sử dụng <link> với thành phần hoạt động lựa chọn <if> và thành phần hoạt động tuần tự <sequence>, người lập trình không thể kiểm soát được luồng xử lý logic nghiệp vụ khi xây dựng bằng ngôn ngữ thực thi tiến trình nghiệp vụ BPEL. Các lỗi logic này vẫn thỏa mãn cú pháp ngôn ngữ BPEL, các công cụ lập trình, không phát hiện và kiểm soát, cảnh báo hết được.
Các ứng dụng thực tế, ngày càng phức tạp và mở rộng để đáp ứng được nghiệp vụ và quy trình sản xuất của tổ chức, công ty. Ngôn ngữ thực thi tiến trình nghiệp vụ BPEL có nhiều ưu điểm và sự phù hợp để áp dụng thực tiễn, như các hệ thống triển khai SOA của Oracle hay các ứng dụng của IBM. Bên cạnh BPML, BPEL tốt hơn dễ dàng tích hợp các dịch vụ Web, và nó phù hợp cho các mô hình xử lý tương tác đa doanh nghiệp[10]. Do tính phức tạp trong luồng xử lý cũng như ngôn ngữ lập trình, ngôn ngữ BPEL với cú pháp chặt chẽ, rõ ràng, với nhiều thành phần hoạt động xử lý các loại logic nghiệp vụ riêng, phân biệt tiến trình trừu tượng và thực thi, các biến và luồng xử lý dữ liệu, điều khiển ngoại lệ theo chuẩn OASIS. Luận văn đã giới thiệu công cụ để phát hiện các bế tắc chương trình BPEL trong khi runtime, và cảnh báo đơn giản để giúp phát hiện các lỗi logic nghiệp vụ.
Tài liệu tham khảo
Tiếng Việt
1. Đỗ Đức Giáo, “Toán rời rạc”, ĐHQGHN, 2002.
Tiếng Anh
2. A. Alves, A. Arkinand, S. Askary, C. Barreto, B. Bloch, F. Curbera, M. Ford, A. Gułzar, N. Kartha, C. K. Liu, R. Kha-laf, D. K ¨onig, M. Marin, V. Mehta, S. Thatte, D. van der Rijn, P. Yendluri, and A. Yiu, “Web Services Business Process Execution Language Version 2.0”, OASIS Standard, 11 April 2007.
3. Charlton Barreto, Vaughn Bullard, Thomas Erl, John Evdemon, Diane Jordan, Khanderao Kand, Dieter König, Simon Moser, Ralph Stout, Ron Ten-Hove, Ivana Trickovic, Danny van der Rijn, Alex Yiu, “Web Services Business Process Execution Language Version 2.0”, OASIS Standard, 9 May 2007.
4. Manfred Reichert, Stefanie Rinderle, Peter Dadam, “On the Modeling of Correct Service Flows with BPEL4WS”, Department Databases and Information Systems University of Ulm, D-89069 Ulm, GERMANY {reichert, rinderle,
dadam}@informatik.uni-ulm.de.
5. Chun Ouyang, Eric Verbeek, Wil M.P. van der Aalst, Stephan Breutel, Marlon Dumas, Arthur H.M. ter Hofstede, “Formal semantics and analysis of control flow in WS-BPEL”, Science of Computer Programming 67, 2007 162–198.
6. BEA, IBM, Microsoft, SAP and Siebel, “Business Process Execution Language for Web Services Version 1.1”, S. Thatte, et al., May 2003.
7. IBM, “Web Service Flow Language (WSFL 1.0)”, F. Leymann, May 2001
8. Microsoft, “XLANG Web Services for Business Process Design”, S. Thatte, 2001. 9. Shin NAKAJIMA, “Model-Checking Behavioral Specification of BPEL
Applications”, Electronic Notes in Theoretical Computer Science 151, 2006 89– 105
10. James F. Chang, “Business process management systems”, Auerbach Publications Taylor & Francis Group, 2006.