KHỞI ĐỘNG JADE TỪ MỘT ỨNG DỤNG JAVA BÊN NGOÀI

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

Cho đến nay chúng ta luôn luôn giả định rằng Jade run-time được khởi động từ dòng lệnh. Tuy nhiên trong nhiều trường hợp, chúng ta cần khởi động một hoặc nhiều agent từ ứng dụng bên ngoài, do đó cần tạo JADE run-time để lưu trú chúng. Để hỗ trợ yêu cầu này, từ phiên bản JADE

2.3, một giao diện in-process đã được cài đặt cho phép JADE được sử dụng như một loại thư viện cho phép run-time được khởi chạy từ các chương trình bên ngoài.

JADE run-time được cài đặt bởi lớp jade.core.Runtime. Theo mẫu singleton, một thể hiện của lớp này tồn tại trong một máy ảo JVM và có thể lấy bằng cách gọi phương thức tĩnh instance(). Thể hiện Runtime cung cấp hai phương thức: createMainContainer() để tạo container chính và createAgentContainer() để tạo một container ngoại vi. Cả hai phương thức đều lấy một tham số là đối tượng Profile để lưu các lựa chọn cấu hình cần thiết để khởi động JADE run-time. Tất cả các lựa chọn có thể được đặc tả khi khởi động JADE từ dòng lệnh đều được sử dụng như là các hằng trong lớp Profile và có thể được thiết lập trong profile sử dụng phương thức setParameter(String key, String value).

Cả createMainContainer() và createAgentContainer() đều trả về đối tượng jade.wrapper.ContainerControl. Bộ điều khiển này sẽ bao bọc các chức năng mức cao của container và tạo các agent mới. Phương thức createNewAgent() của lớp này trả về đối tượng AgentController cũng được bao bọc bởi một số chức năng của agent. Cụ thể, lớp AgentController cung cấp các phương thức để ứng dụng bên ngoài có thể điều khiển vòng đời của agent được bao bọc nhưng ẩn đi việc tham chiếu tới đối tượng Agent để nó không thể thực hiện các lời gọi trực tiếp tới đó. Chú ý, phương thức createNewAgent() tạo một thể hiện của lớp Agent nhưng không khởi động nó, mà chỉ có thể gọi phương thức start() của đối tượng AgentController được trả về. Quay lại ví dụ bookTrading, ta muốn tích hợp buyer agent và môt hẹ thống lớn hơn có thể mua sách thông qua nhiều kênh khác nhau. Khi đó, môi trường book-trading của JADE trở thành một trong cách kênh của hệ thống lớn có thể sử dụng để mua sách. Sau đây là đoạn code của book- buyer agent mà hệ thống bên ngoài sử dụng để mua sách trong môi trường book-trading của JADE:

public AgentController startBuyerAgent(

String host, // JADE Book Trading environment Main Container host

String port, // JADE Book Trading environment Main Container port

String name, // Book Buyer agent name ) {

// Retrieve the singleton instance of the JADE Runtime Runtime rt = Runtime.instance();

// Create a container to host the Book Buyer agent Profile p = new ProfileImpl();

p.setParameter(Profile.MAIN_HOST, host); p.setParameter(Profile.MAIN_PORT, port);

ContainerController cc = runtime.createAgentContainer(p); if (cc != null) {

// Create the Book Buyer agent and start it try { AgentController ac = cc.createNewAgent(name, "bookTrading.buyer.BookBuyerAgent",null); ac.start(); return ac; }

catch (Exception e) { e.printStackTrace(); } } return null; }

Trong trường hợp này một container ngoại vi được tạo ra để kết nối với một nền tảng Jade đang tồn tại (môi trường book-trading JADE). Do đó chúng ta cần phải xác định host và port của container chính của flatform. Cũng lưu ý việc sử dụng các lớp ProfileImpl. Điều này là cần thiết vì Profile là một lớp trừu tượng và do đó không trực tiếp khởi tạo.Cả 2 lớp Profile và ProfileImpl đều thuộc gói jade.core.

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