Vòng đời của một Aglet

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Công nghệ tác tử di động và ứng dụng trong quản lý giám sát mạng (Trang 49 - 52)

+ Retract: aglet được rút khỏi ngữ cảnh hiện tại và đưa vào ngữ cảnh đã yêu cầu retract.

+ Active: aglet tạm thời dừng thi hành và được lưu vào bộ nhớ thứ cấp. + Deactive: aglet được tải từ bộ nhớ thứ cấp và tiếp tục thi hành khi tái kích hoạt.

+ Dispose: dừng thi hành và loại bỏ khỏi ngữ cảnh.

3.3.4. Liên lạc giữa các aglet

Các aglet giao tiếp với nhau bằng cách gửi các thông điệp. Điều này cho phép giao tiếp động với tất cả các aglet đã biết và chưa biết. Sự liên lạc dựa trên một lược đồ gọi lại đơn giản, yêu cầu mỗi aglet thực hiện những trình quản lý cần thiết cho mỗi loại thông điệp.

Các thông điệp được gửi bằng cách gọi phương thức gửi thông điệp trên đối tượng proxy. Các đối tượng proxy giúp aglet trong suốt về vị trí với một hạn chế: các đối tượng proxy của các aglet đang di chuyển không hợp lệ. Về mặt liên lạc, aglet nhận thông điệp hiện ở trạm cục bộ hay ở xa không có sự khác biệt. Không đòi hỏi phải sinh ra các lớp proxy, bởi vì tất cả các aglet phải thực hiện cùng trình quản lý thông điệp.

Các thông điệp có thể chứa các đối số là kiểu Java bất kỳ, miễn là kiểu đó thi hành lớp Java.io.Serializable. Các thông điệp nguyên tử (atomic-message) có thể được tạo bằng cách sử dụng các contructor đã thiết kế. Các thông điệp non- atomic với nhiều đối số được kiểm soát như một danh sách các cặp khóa và giá trị. Một thông điệp từ xa không dẫn đến việc truyền bytecode. Một điểm cần chú ý là: các lớp sử dụng trong thông điệp phải được cài đặt sẵn trên cả hai trạm.

ASDK hỗ trợ các loại thông điệp đồng bộ, không đồng bộ và thông điệp quảng bá. Với thông điệp không đồng bộ một tham chiếu đối tượng sẽ được trả về và có thể sử dụng nó để kiểm tra các thông điệp phản hồi. Các thông điệp quảng bá có thể gửi tới tất cả các aglet nằm trong một ngữ cảnh cục bộ đã đăng ký kiểm soát loại thông điệp đó.

Mọi thông điệp đến được lưu trữ trong hàng đợi và sau đó chúng sẽ được xử lý tuần tự từng thông điệp một. Việc này tuần tự hóa việc kiểm soát thông điệp và bảo đảm rằng quá trình xử lý thông điệp hiện thời đã kết thúc trước khi trình xử lý thông điệp của aglet được gọi lần nữa. Quá trình này có thể tuỳ biến để cho phép việc xử lý thông điệp dựa trên mức ưu tiên phụ thuộc vào kiểu của chúng và với các thông điệp đồng bộ với trạng thái của aglet. ASDK cũng định nghĩa sẵn các phương thức được gọi cho một số sự kiện chính (ví dụ khi được tạo, khi nhân bản, khi tới đích đến). Các phương thức này có thể được chồng lấp

bởi lập trình viên Aglets nhằm phản ứng với các sự kiện đặc biệt. Tuy nhiên, việc chuyển tiếp thông điệp và các giao diện triệu hồi động không được hỗ trợ.

ASDK cung cấp một dịch vụ thư mục đơn giản cho các aglet, gồm một danh sách các trạm Aglets có thể được nhận cho ngữ cảnh hiện tại. Do các đối tượng proxy không hợp lệ sau khi aglet mà nó tham chiếu di trú, rất khó để theo vết của các aglet đang di chuyển và thiết lập một kết nối tới aglet ở xa với GUID không rõ (Globally Unique Identifier). Việc tạo các đối tượng proxy cần có URL của trạm Aglets và GUID của các đối tượng.

3.4. Các mẫu thiết kế

Các mẫu thiết kế trong lập trình hướng đối tượng cung cấp một phương pháp cơ bản để dùng lại mã giữa các lớp. Với các mẫu thiết kế, việc thiết kế và thực hiện các aglet được đơn giản hóa vì nhà phát triển chỉ phải thực hiện các biến thể của các mẫu thiết kế định nghĩa trước.

ASDK cung cấp hai mẫu thiết kế cơ bản là mẫu Master-Slave và mẫu Itinerary [12].

3.4.1. Mẫu thiết kế Master-Slave.Định nghĩa Định nghĩa

Mẫu thiết kế Master-Slave định nghĩa một master-aglet có khả năng giao phó một công việc cho một Slave-aglet.

Mục đích thiết kế

Có một số lý do để một master-aglet muốn tạo các Slave-aglet khác và giao phó công việc cho chúng.

- Hiệu năng: master-aglet có thể tiếp tục thực hiện những công việc khác song song với Slave-aglet.

- Lý do thứ hai có thể được mô tả qua ví dụ sau: giả sử một ứng dụng nền- aglet cung cấp một giao diện đồ họa người dùng (GUI) để nhận dữ liệu đầu vào và hiển thị các kết quả trung gian của một công việc cụ thể được thực hiện ở xa. Nếu một aglet đơn lẻ vừa cung cấp GUI và thực hiện công việc đó, thì không thể duy trì GUI khi aglet di chuyển từ vị trí gốc tới một điểm đến ở xa. Thay vào đó, master-aglet tĩnh có thể cung cấp và duy trì GUI trong khi slave-aglet di chuyển tới một điểm đến khác, thực hiện công việc được giao và truyền kết quả công việc về master-aglet để hiển thị cho người dùng.

Mẫu thiết kế Master-Slave được xây dựng dựa trên ý tưởng là sử dụng một lớp trừu tượng, cần cục bộ hóa các phần của việc giao phó cho một công việc giữa master và slave-aglet: gửi một Slave tới một điểm đến ở xa, khởi tạo sự thực hiện công việc và kiểm soát các ngoại lệ trong khi thực hiện công việc.

Các aglet cụ thể được định nghĩa như các lớp con, chỉ có các phần cụ thể như công việc cần thực hiện cần phải được thi hành.

Trong thực tế, master-aglet định nghĩa một trình kiểm soát thông điệp quan tâm đến kết quả các công việc và có lớp hai phương thức trừu tượng initializeTask và doTask, định nghĩa các bước khởi tạo và thực hiện trước khi aglet di chuyển tới một điểm đến mới và công việc cụ thể.

Áp dụng

Mẫu thiết kế Master-Slave có thể được dùng trong các trường hợp:

+ Khi một aglet cần thực hiện một tác vụ song song với các tác vụ khác mà nó chịu trách nhiệm.

+ Khi một aglet tĩnh muốn thực hiện một tác vụ tại một điểm đích ở xa. Trong cả hai trường hợp các tác vụ chỉ được thực hiện tại một điểm đích duy nhất.

Các đối tượng tham gia:

Có ba đối tượng tham gia trong mẫu thiết kế Master-Slave:

1) Slave định nghĩa bộ khung của một slave, sử dụng các phương thức trừu tượng (InitializeTask và Task), sẽ được overridden trong lớp ConcreteSlave.

2) ConcreteSlave thực hiện hai phương thức trừu tượng của lớp.

3) Master thực hiện aglet sẽ tạo ra slave-aglet và nhận thông điệp kết quả của các slave.

Sự cộng tác:

Sự cộng tác giữa các đối tượng trong mẫu thiết kế Master-Slave: 1) Master-aglet tạo một slave-aglet.

2) Slave-aglet khởi tạo tác vụ của nó. Slave Abstract initializeTask() Abstract doTask() Master initializeTask() doTask() ConcreteSlave createAglet sendMessage()- Result initializeTask(){ } doTask(){ }

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Công nghệ tác tử di động và ứng dụng trong quản lý giám sát mạng (Trang 49 - 52)

Tải bản đầy đủ (PDF)

(67 trang)