본문 바로가기

IT for developer/Java

(6장) JADE PROGRAMMING FOR BEGINNERS

6 THE YELLOW PAGES SERVICE – THE DFSERVICE CLASS

지금까지 사용된 코드를 보면 판매 에이전트가 정해져 있다고 가정했다. 다시말해 각 구매 에이전트가 이미 판매 에이전트를 알고 있다고 가정했다.

이번장에서는 이러한 가정을 어떻게 제거하는지 보여준다. yellow 페이지 서비스로  구매 에이전트가 해당 시간에 판매에이전트를 발견할 수 있도록 한다.

6.1 The DF agent

옐로 페이지 서비스는 에이전트가 하나이상의 서비스를 공개하여 다른 에이전트가 이를 찾을 수 있게 해준다.


JADE에서 옐로 페이지 서비스는 DF(Directory Facilitator)라는 에이전트에 의해 제공된다.

6.2 Interacting with the DF

DF는 적당한 언어와 온토로지를 사용하여 ACL 메세지를 서로 교환하는것으로 상호 작용가능토록 한다.

JADE는 이러한 상호 작용을 간단히 하기 위하여 jade.domain.DFService를 제공한다. 메소드 호출로 서비스를 공개하고 검색하는 기능을 제공한다.

6.2.1 Publishing services

하나이상의 서비스를 공객하고자 하는 에이전트는 상호작용하기 원하는 다른에이전트가 알기 원하는 AID, 언어 목록, 온톨로지, 서비스 목록을 포함하는 기술서를  DF에게 제공해야만 한다.

ServiceDescription 생성 --> DFAgentDescription addServices()--> DFService register()


protected void setup() {
...
// Register the book-selling service in the yellow pages
DFAgentDescription dfd = new DFAgentDescription();
dfd.setName(getAID());
ServiceDescription sd = new ServiceDescription();
sd.setType("book-selling");
sd.setName("JADE-book-trading");
dfd.addServices(sd);
try {
DFService.register(this, dfd);
}
catch (FIPAException fe) {
fe.printStackTrace();
}
...
}

에이전트 종료시 엘로 페이지도 제거
DFService deregister();

protected void takeDown() {
// Deregister from the yellow pages
try {
DFService.deregister(this);
}
catch (FIPAException fe) {
fe.printStackTrace();
}
// Close the GUI
myGui.dispose();
// Printout a dismissal message
System.out.println("Seller-agent "+getAID().getName()+" terminating.");
}


6.2.2 Searching for services

서비스를 찾길 원하는 에이전트는 템플릿트 기술서를 가지고 있는 DF에 제공해야한다.

DFService.search() 메소드는템플릿과 일치하는 서비스의 목록을 리턴한다.


public class BookBuyerAgent extends Agent {
// The title of the book to buy
private String targetBookTitle;
// The list of known seller agents
private AID[] sellerAgents;
// Put agent initializations here
protected void setup() {
// Printout a welcome message
System.out.println("Hello! Buyer-agent "+getAID().getName()+" is ready.");
// Get the title of the book to buy as a start-up argument
Object[] args = getArguments();
if (args != null && args.length > 0) {
targetBookTitle = (String) args[0];
System.out.println("Trying to buy "+targetBookTitle);
// Add a TickerBehaviour that schedules a request to seller agents every minute
addBehaviour(new TickerBehaviour(this, 60000) {
protected void onTick() {
// Update the list of seller agents
DFAgentDescription template = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("book-selling");
template.addServices(sd);
try {
DFAgentDescription[] result = DFService.search(myAgent, template);
sellerAgents = new AID[result.length];
for (int i = 0; i < result.length; ++i) {
sellerAgents[i] = result[i].getName();
}
}
catch (FIPAException fe) {
fe.printStackTrace();
}
// Perform the request
myAgent.addBehaviour(new RequestPerformer());
}
} );
...