Giao tiếp giữa Object và Agent

Một phần của tài liệu Phát triển phần mềm hướng Agent (Trang 117 - 119)

Trong nhiều trường hợp, bên cạnh việc bắt đầu từ một hay nhiều agent, một ứng dụng bên ngoài cần phải tương tác với các agent để chỉ dẫn chúng thực hiện một số tác vụ. Trong kịch bản ở trên, ví dụ hệ thống bên ngoài phải thông báo cho agent book-buyer mỗi lần có một cuốn sách mới để mua. Tương tự, agent book-buyer phải thông báo cho hệ thống bên ngoài khi việc mua sách thành công. Tuy nhiên, như chúng ta đã thấy trong phần trước, các lớp AgentController không phơi bày các tham chiếu của một thể hiện Agent và do đó các ứng dụng bên ngoài không thể gọi trực tiếp bất kỳ một phương thức của agent. Sự tương tác giữa một ứng dụng bên ngoài và một agent bắt đầu bằng giao diện tiến trình được tạo ra sẵn bởi một cơ chế giao tiếp object- to-agent (O2A) . Đây chính là một hàng đợi FIFO đồng bộ nơi ứng dụng bên ngoài có thể đặt đối tượng Java mà sau này có thể được lấy bởi một agent, mỗi agent tự có riêng một hàng đợi O2A. Các đối tượng AgentController bọc lấy một agent cung cấp phương thức putO2AObject() có thể được sử dụng bởi các ứng dụng bên ngoài để chèn đối tượng trong hàng đợi O2A của một agent. Tương tự như các lớp Agent cung cấp phương thức getO2AObject () có thể được sử dụng bởi các agent để đọc các đối tượng thông qua các ứng dụng bên ngoài. Các cơ chế truyền thông O2A mặc định bị vô hiệu và do đó một agent mong muốn tương tác với các ứng dụng bên ngoài phải khởi động nó một cách rõ ràng bằng phương thức setEnabledO2ACommunication (). Tương tự với mô hình hàng đợi thông điệp chuẩn, chèn một đối tượng vào hàng đợi O2A của một agent có ảnh hưởng tới việc khởi động lại tất cả các hành vi của agent để tạo ra cho họ một cơ hội để đọc và thực thi đối tượng được chèn vào.

Trở lại ví dụ ở trên, mỗi khi hệ thống buying bên ngoài được yêu cầu để mua một cuốn sách, nó phải thông báo cho agent book-buyer cục bộ. Các đoạn code sau đây được sử dụng bởi các bên ngoài hệ thống sẽ thực hiện điều này:

BookInfo info = new BookInfo(title, maxPrice, deadline); buyerAgentController.putO2AObject(info);

BookInfo là một bean ứng dụng được sử dụng để nhóm tiêu đề sách để mua, giá tối đa mà người sử dụng sẵn sàng trả và các hạn giao hàng. BuyerAgentController là đối tượng AgentController bao bọc agent book-buyer giống như khi thảo luận startBuyerAgent () trong phần trước. Các đoạn code sau được thêm vào các phương thức BookBuyerAgent () để xử lý

các thông báo quá trình từ hệ thống bên ngoài (các sửa đổi khác cũng cần phải được giới thiệu để xử lý một giao dịch mua hành thành công hoặc hạn giao hàng).

// Enable O2A communication

setEnabledO2ACommunication(true, 0);

// Add the behaviour serving notifications from the external system addBehaviour(new CyclicBehaviour(this) {

public void action() {

BookInfo info = (BookInfo) myAgent.getO2AObject(); if (info != null) { purchase(info.getTitle(), info.getMaxPrice(), info.getDeadline()); } else { block(); } } } );

CHƯƠNG 5

KHẢ NĂNG DI ĐỘNG CỦA AGENT TRONG JADE

Khả năng di động của Agent là một cách tiếp cận xuất phát từ 2 ngành khác nhau là Trí tuệ nhân tạo – tạo ra khái niệm về agent và Các hệ thống phân tán – định nghĩa khái niệm về mã di động. Chương này trình bày một số khái niệm liên quan agent di động và nền tảng Jade trong thiết kế các agent di động.

Một phần của tài liệu Phát triển phần mềm hướng Agent (Trang 117 - 119)