Do cùng một lúc có thể có nhiều thể hiện (instance) của một dịch vụ lưới được tạo ra và chạy tương tranh với nhau, nên một vấn đề nảy sinh là làm thế nào để lưu trữ các resource key của các thể hiện này. Bởi vì trong ODE, mỗi thể hiện của một dịch vụ lưới có một biến
ConfigureContext duy nhất, nên trong cài đặt, ConfigureContext đã được dùng để lưu các
resource key.
3. Chi tiết cài đặt
Trong ODE, mỗi handler là một lớp kế thừa lớp AbstractHandler. Sau khi cài đặt hai handler GridHandlerIn và GridHandlerOut, cấu hình của chúng cần được chèn vào trong tệp cấu hình Axis2.xml như trong đoạn code sau:
<phaseOrder type="InFlow"> <phase name="ProcessHeader"> <handler name="SessionInHandler" class="org.apache.ode.axis2.hooks.SessionInHandler"> <order phase="PostDispatch"/> </handler>
<handler name="GridHandlerIn"
112 <order phase="PostDispatch"/> </handler> </phase> </phaseOrder> <phaseOrder type="OutFlow">
<!--user can add his own phases to this area--> <phase name="ProcessHeader"> <handler name="SessionOutHandler" class="org.apache.ode.axis2.hooks.SessionOutHandler"> <order phase="PreDispatch"/> </handler> <handler name="GridHandlerOut" class="org.hust.hpcc.grid.GridHandlerOut"> <order phase="PostDispatch"/> </handler> </phase> </phaseOrder>
4. Kết quả chạy thử nghiệm
Chương trình thử nghiệm nhằm mục đích kiểm tra khả năng gọi dịch vụ lưới từ tiến trình BPEL thông qua cài đặt G-ODE sẽ chạy thế nào, đặc biệt khi tiến trình BPEL cần gọi nhiều dịch vụ lưới khác nhau. Trong lần thử nghiệm này, một tiến trình BPEL đơn giản được triển khai sẽ gọi hai dịch vụ lưới là MathService và
CalcService (xem Hình 4-5). Tiến trình này thực hiện các công việc sau:
a) Đầu tiên, hai tham số X và Y được khai báo. Sau đó hai thể hiện của hai dịch vụ lưới này sẽ được tạo ra (nhờ các hoạt động CreateCacl and CreateMath). Điều này nhằm lấy ra và sau đó lưu trữ lại giá trị resource key của các thể hiện này.
b) Sau đó, hai luồng song song (parellel flow) gọi hai dịch vụ lưới được tạo ra. Trong luồng đầu tiên gọi thao tác Add(X), sau đó gọi thao tác Multiply(Y) của dịch vụ lưới
CalcService (điều này có nghĩa là cho ra kết quả X*Y, bởi vì giá trị khởi tạo của dịch vụ này là bằng 0). Trong luồng thứ hai, chỉ gọi thao tác Add(X) của dịch vụ lưới MathService (kết quả sẽ là X).
c) Cuối cùng, đầu ra với hai kết quả trên sẽ được trả về.
Kết quả thực thi tiến trình BPEL được thể hiện trên Hình 4-6. Như có thể thấy trên hình, hai dịch vụ lưới có thể được gọi dễ dàng nhờ có G-ODE. Từ góc độ người phát triển tiến trình BPEL, việc gọi dịch vụ lưới gần giống như việc gọi dịch vụ Web, thậm chí không cần phải quan tâm đến sự tồn tại của các resource key của các dịch vụ lưới.
113