Setembro 2003 Eugénio Oliveira/ Univ.Porto
JATLite
JATLite
-
-
Java Agent Template,
Java Agent Template,
Lite
Lite
• O que é o JATLite?
y
Pacote de programas em Java permitindo:
• rápida criação de Agentes de Software e sistemas
que comunicam, usando a Internet, de forma robusta.
• Capacidades específicas de comunicação
• De uso geral. A arquitectura dos Agentes é deixada
ao projectista
http://java.stanford.edu/
http://www.fe.up.pt/~eol/AIAD/JATLITE/DOC/index.html
Plataforma para Agentes
Setembro 2003 Eugénio Oliveira/ Univ.Porto
• Agent Message Router (AMR) Encaminhador de Mensagens
y
Agentes JATLite
• aceita alteração dinâmica dos endereços
• Registo de nome e password, conecta/desconecta da
Internet, envia e recebe
• Uso de TCP/IP standard e sockets para a comunicação
JATLite: Infraestrutura
y
Message Router
• programa em Java “stand-alone” correndo no host
ligado à Internet
• Encaminha as mensagens entre agentes. Facilita
informação sobre endereços IP
• Agentes “applets” usam o Router correndo na máquina
do servidor HTTP como proxy para comunicar com
outros Agentes
Setembro 2003 Eugénio Oliveira/ Univ.Porto
• Arquitectura do JATLite como uma
hierarquia de camadas
– “Templates” (moldes) para a construção de Agentes
• Classes Java pré-definidas em diversas camadas facilitando
a construção dos Agentes
Protocol Layer
Router Layer
KQML Layer
Base Layer
Abstract Layer
Camadas JATLite
Pacotes
JATLite: Arquitectura
Setembro 2003 Eugénio Oliveira/ Univ.Porto
• Camadas JATLite
– Abstract Layer
• classes abstractas necessárias à implementação JATLite
– Base Layer
• communicação TCP/IP básica
• sem restrições na linguagem e protocolo de comunicação
– KQML Layer
• restrição da linguagem: memorização e análise (“parsing”) de
Mensagens em KQML
– Router Layer
• routing (encaminhamento) das mensagens em vez de polling(directo):
todos os agentes enviam/recebem mensagens via router
• ultrapassa restrições de segurança dos applets podendo comunicar
com agentes em outras máquinas
• 2 pacotes importantes:
– RouterLayer.AgentClient: package para os agentes clientes
– RouterLayer.Router: package do router
Setembro 2003 Eugénio Oliveira/ Univ.Porto
• Camadas (Layers) do JATLite
– Protocol Layer
• suporta os serviços “standard” da internet: SMTP (simple
mail), FTP
• agentes “stand-alone” podem usar os serviços existentes
SMTP e FTP sem os serviços proxy do Router
• agentes applet tem de usar o Router como proxy para ligar
aos servidores SMTP ou FTP em outras máquinas diferentes
Router
(FTP Proxy)
Applet
Agent
Stand-alone
Agent
FTP
Server
KQML
message
message
KQML
FTP
FTP
Data
JATLite: Arquitectura
Setembro 2003 Eugénio Oliveira/ Univ.Porto
– Agent Name Service (ANS)
• Router é um ANServer mantendo os endereços dos Agentes, que
podem alterar-se dinamicamente
• não é necessário para a passagem de mensagens mas um agente
pode perguntar ao Router o endereço de outro Agente
Ligação
crítica
Agente
emissor
Agente
receptor
Polling
- problemas quando a ligação
não pode ser establecida (N
receptores)
Ligação
crítica
Agente
emissor
Agente
receptor
Queuing
- memorização de mensagens (queuing):
guarda mensagem
- mecanismo de routing : envia mensagem
quando ligação do lado do receptor está
establecida (Receptor ligou ao Router)
Router Ligação do
lado do
receptor
•Router
–Polling (directo) vs. Queuing (indirecto)
Setembro 2003 Eugénio Oliveira/ Univ.Porto
• Router
– Comunicação dos Agentes Applets
Máquina
HTTP
Server
Router
BrowserApplet
Agent
Applet
Agent
Stand-alone
Agent
JATLite:Router
Setembro 2003 Eugénio Oliveira/ Univ.Porto
• Características do Router
– Message queuing
• As mensagens são memorizadas em ficheiros e recuperadas
ou apagadas de acordo com o pedido do agente
–Message routing
•As mensagens serão dirigidas para os receptores apropriados quando
possível
–Agent Name Service
–Registo
•só agentes que se registaram podem usar o Router
–Segurança
•teste de segurança usando a password do agente com um dado nome
–Lista de Agentes
•mensagem para conhecer todos agentes registados e seus estados de ligação
Setembro 2003 Eugénio Oliveira/ Univ.Porto
• Características do Router
– Desligar
• mensagem de desligar
• interrupção acidental (sem mensagem)
– agentes stand-alone :
» Router testa ligação ao agente em períodos
temporais
» falhando essas tentativas várias vezes, o
agente é apagado do registo
» Período de tempo e número de vezes de teste
são parâmetros dados
–Reserva de Mensagem
•podem reservar-se mensagens para serem enviadas num tempo
e endereço específicos
JATLite:Router
Setembro 2003 Eugénio Oliveira/ Univ.Porto
Exemplo
Exemplo
--
Router Layer
Router Layer
criação
criação
de
de
Agente
Agente
import java.io.*; import AbstractAbstract.*; import KQMLLayerKQMLLayer .*;import RouterLayer.AgentClientRouterLayer.AgentClient.*;
public class PingPongextends extends RouterClientActionRouterClientAction { public static String localhost = “brooks.fe.up.pt”;
public PingPong(String id, String pw, String host, int port) throws Exception {
super
super(); //RouterClientAction constructor //id,host,port,type,description
String s = id+“,”+host+“,”+port+“,MessageRouter,(agent-info :password ”+pw+“)”;
Address
Address myAddress = new Address(s);
s = “Router,alf.fe.up.pt,1234,MessageRouter,(MessageRout er)”; Address routerAddress = new Address(s);
s = “RouterRegistrar,alf.fe.up.pt,1235,MessageRouter,(Me ssageRouterRegistrar)”; Address registrarAddress = new Address(s);
setMyAddress
setMyAddress(myAddress); //agent address
setRouterAddress
setRouterAddress(routerAddress); //Router address
setRegistrarAddress
setRegistrarAddress(registrarAddress); //registrar address try {
createServerThread
createServerThread (myAddress.getIDgetID(), Thread.NORM_PRIORITY); //server listener
register
register(); //register to Router
connect
connect(); //connect to Router } catch(ConnectionExceptionConnectionException e) {
throw new Exception(e.toString()); }
}
Setembro 2003 Eugénio Oliveira/ Univ.Porto
Exemplo
Exemplo
--
Router Layer
Router Layer
publicpublic booleanboolean Act(Object o)Act(Object o) { //invoked automatically when a message is received String message = (String) o;
try {
KQMLmail
KQMLmail mail = new KQMLmail(message, 0); //KQMLmail wrap the KQMLmessage
_
_mailQueue.addElementmailQueue.addElement(mail); //message repository (to delete message after)
KQMLmessage
KQMLmessage kqml = mail.getKQMLmessagegetKQMLmessage(); //get KQMLmessage object String perf = kqml.getValuegetValue(“performative”);
String content = kqml.getValue(“content”); if(perf.equals(“tell”) && content != null) {
System.out.println(content);
acknowledge(kqml.getValue(“sender”), content);
addToDeleteBuffer
addToDeleteBuffer(0); //send delete message to Router } else { sendErrorMessage(kqml); return false; } } catch (Exception e) { return false; } return true; } public void
public void processMessage(StringprocessMessage(Stringcommand, Object command, Object objobj)) {} //not implemented
JATLite:Exemplo
Setembro 2003 Eugénio Oliveira/ Univ.Porto
Exemplo
Exemplo
--
Router Layer
Router Layer
protected void acknowledge(String receiver, String toContent ) throws Exception {
KQMLmessage
KQMLmessage sendkqml = new KQMLmessage ();
sendkqml.addFieldValuePairaddFieldValuePair (“performative”, “tell”); sendkqml.addFieldValuePair(“sender”, this.getNamegetName()); sendkqml.addFieldValuePair(“receiver”, receiver); //...
if(toContent.equals(“(ping )”)) sendkqml.addFieldValuePair(“content”, “(pong)”); else sendkqml.addFieldValuePair(“content”, “(ping)”);
sendMessage
sendMessage(sendkqml ); //send message to Router: throws ConnectionExceptionConnectionException }
protected void sendErrorMessage(KQMLmessage kqml ) throws Exception { String msg = “(error :sender ” + this.getNamegetName() + “ :receiver ” +
kqml.getValue(“sender”) + “ :content (” + kqml.getSendStringgetSendString() + “))”;
sendMessage
sendMessage(msg); //send Router: throws ConnectionExceptionConnectionException and ParseExceptionParseException
addToDeleteBuffer
addToDeleteBuffer(0); //send delete message to Router }
public static void main(String argv[]) throws Exception {
PingPong pingA = new PingPong(“ping”, “xyz”, localhost, 2222); //create pingA PingPong pongA = new PingPong(“pong”, “hjk”, localhost, 2223); //create pongA pingA.startstart(); pongA.start(); //start agent action
pingA.sendKQMLMessagesendKQMLMessage(“(tell :sender ” + pingA.getNamegetName() + “ :receiver ” + pongA.getName() + “ :content (ping))”); //or sendMessage sleep(60000);
pingA.disconnectdisconnect(); pongA.disconnect(); //disconnect from Router pingA.unregisterunregister(); pongA.unregister(); //unregister from Router pingA.endActionendAction(); pongA.endAction(); //clean up and stop agent action System.exit(0);
} }
Setembro 2003 Eugénio Oliveira/ Univ.Porto
Plataforma para Agentes: PVM
PVM: Parallel Virtual Machine
- Desenvolvida no início dos anos 90 tem dezenas de milhar de utilizadores
- Considerada como um standard “de facto” para computação distribuída
- Características:
-Redes Heterogéneas (liga diferentes plataformas e linguagens)
- Entrada/saída dinâmica de participantes
- Tarefas podem aparecer/desaparecer dinamicamente
- passagem de mensagens (envio e recepção de blocos, envio para
grupos, ...)
- Grupos dinâmicos
- Tolerância a falhas detectadas automaticamente
- Ferramentas de debug próprias (XPVM)
- Corre em Unix/Linux e Windows
- Consome cerca de 5Mb na instalação
- obtida em: htt://www.epm.ornl.gov/pvm/pvm_home.html
Setembro 2003 Eugénio Oliveira/ Univ.Porto
Plataformas para Agentes
Outras PLATAFORMAS para desenvolvimento e comunicação de Agentes:
y
JINI
xda SUN microsystems; JAVA Spaces; Leasing
xhttp://www.binnetcorp.com/Jinni/
y
JADE
xJava Agent Development Environment; de acordo com as normas da FIPA
xhttp://sharon.cselt.it/projects/jade
y
BEEGENT
xfornecido pela Toshiba; facilidades para desenvolver agentes BDI; KQML
xhttp://www2.toshiba.co.jp/beegent/index.html
y
ZEUS
xfornecido pela BT; editor de ontologia simples; KQML
xhttp://www.labs.bt.com/projects/agents/zeus/index.htm
y
AGLETS
xda IBM; Agentes móveis