Plataforma para es JATLite - Java Template, Lite O que é o JATLite? http://java.stanford.edu/ http://www.fe.up.pt/~eol/aiad/jatlite/doc/index.html Pacote de programas em Java permitindo: rápida criação de es de Software e sistemas que comunicam, usando a Internet, de forma robusta. Capacidades específicas de comunicação De uso geral. A arquitectura dos es é deixada ao projectista JATLite: Infraestrutura Message Router (AMR) Encaminhador de Mensagens es 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 Message Router programa em Java stand-alone correndo no host ligado à Internet Encaminha as mensagens entre agentes. Facilita informação sobre endereços IP es applets usam o Router correndo na máquina do servidor HTTP como proxy para comunicar com outros es
JATLite: Arquitectura Arquitectura do JATLite como uma hierarquia de camadas Templates (moldes) para a construção de es Classes Java pré-definidas em diversas camadas facilitando a construção dos es Protocol Layer Router Layer KQML Layer Base Layer Abstract Layer Pacotes Camadas JATLite JATLite: Arquitectura Camadas JATLite Abstract Layer classes abstractas necessárias à implementação JATLite Base Layer communicação TCP/IP básica semrestrições na linguageme 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.Client: package para os agentes clientes RouterLayer.Router: package do router
JATLite: Arquitectura 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 Applet KQML message Data Router (FTP Proxy) FTP FTP Server KQML message FTP Stand-alone Router Polling (directo) vs. Queuing (indirecto) e emissor Polling Ligação crítica e receptor - problemas quando a ligação não pode ser establecida (N receptores) JATLite:Router Ligação crítica e Queuing Router emissor receptor - memorização de mensagens (queuing): guarda mensagem Name Service (ANS) Router é um ANServer mantendo os endereços dos es, que podemalterar-se dinamicamente não é necessário para a passagem de mensagens mas um agente pode perguntar ao Router o endereço de outro e Ligação do lado do receptor e -mecanismo de routing : enviamensagem quando ligação do lado do receptor está establecida (Receptor ligou ao Router)
JATLite:Router Router Comunicação dos es Applets Browser Applet HTTP Server Máquina Router Stand-alone Applet Características do Router Message queuing As mensagens são memorizadas emficheiros 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 Name Service Registo só agentes que se registaram podem usar o Router Segurança JATLite:Router teste de segurança usando a password do agente com um dado nome Lista de es mensagempara conhecer todos agentes registados e seus estados de ligação
JATLite:Router Características do Router Desligar mensagem de desligar interrupção acidental (sem mensagem) agentes stand-alone : Reserva de Mensagem» 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 podem reservar-se mensagens para serem enviadas num tempo e endereço específicos Exemplo - Router Layer JATLite:Exemplo import java.io.*; import Abstract.*; import KQMLLayer.*; import RouterLayer.Client.*; Router Layer criação public class PingPong extends RouterClientAction { public static String localhost = brooks.fe.up.pt ; public PingPong(String id, String pw, String host, int port) throws Exception { super(); //RouterClientAction constructor criação de e //id,host,port,type,description String s = id+, +host+, +port+,messagerouter,(agent-info :password +pw+ ) ; Address myaddress = new Address(s); s = Router,alf.fe.up.pt,1234,MessageRouter,(MessageRouter) ; Address routeraddress = new Address(s); s = RouterRegistrar,alf.fe.up.pt,1235,MessageRouter,(MessageRouterRegistrar) ; Address registraraddress = new Address(s); setmyaddress(myaddress); //agent address setrouteraddress(routeraddress); //Router address setregistraraddress(registraraddress); //registrar address try { createserverthread(myaddress.getid(), Thread.NORM_PRIORITY); register(); //register to Router connect(); //connect to Router catch(connectionexception e) { throw new Exception(e.toString()); Setembro 2003 //server listener
JATLite:Exemplo public boolean Act(Object o) { String message = (String) o; //invoked automatically when a message is received try { KQMLmail mail = new KQMLmail(message, 0); //KQMLmail wrap the KQMLmessage _mailqueue.addelement(mail); //message repository (to delete message after) KQMLmessage kqml = mail.getkqmlmessage(); //get KQMLmessage object String perf = kqml.getvalue( performative ); String content = kqml.getvalue( content ); if(perf.equals( tell ) && content!= null) { System.out.println(content); acknowledge(kqml.getvalue( sender ), content); addtodeletebuffer(0); else { senderrormessage(kqml); return false; catch (Exception e) { return false; return true; //send delete message to Router Exemplo - Router Layer Exemplo public void processmessage(string command, Object obj) { //not implemented JATLite:Exemplo Exemplo - Router Layer protected void acknowledge(string receiver, String tocontent) throws Exception { KQMLmessage sendkqml = new KQMLmessage(); sendkqml.addfieldvaluepair( performative, tell ); sendkqml.addfieldvaluepair( sender, this.getname()); sendkqml.addfieldvaluepair( receiver, receiver); //... if(tocontent.equals( (ping) )) sendkqml.addfieldvaluepair( content, (pong) ); else sendkqml.addfieldvaluepair( content, (ping) ); sendmessage(sendkqml); //send message to Router: throws ConnectionException protected void senderrormessage(kqmlmessage kqml) throws Exception { String msg = (error :sender + this.getname() + :receiver + kqml.getvalue( sender ) + :content ( + kqml.getsendstring() + )) ; sendmessage(msg); //send Router: throws ConnectionException and ParseException 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.start(); ponga.start(); //start agent action pinga.sendkqmlmessage( (tell :sender + pinga.getname() + :receiver + ponga.getname() + :content (ping)) ); //or sendmessage sleep(60000); pinga.disconnect(); ponga.disconnect(); //disconnect from Router pinga.unregister(); ponga.unregister(); //unregister from Router pinga.endaction(); ponga.endaction(); //clean up and stop agent action System.exit(0); Setembro 2003
Plataforma para es: 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 Plataformas para es Outras PLATAFORMAS para desenvolvimento e comunicação de es: JINI da SUN microsystems; JAVA Spaces; Leasing http://www.binnetcorp.com/jinni/ JADE Java Development Environment; de acordo com as normas da FIPA http://sharon.cselt.it/projects/jade BEEGENT fornecido pela Toshiba; facilidades para desenvolver agentes BDI; KQML http://www2.toshiba.co.jp/beegent/index.html ZEUS fornecido pela BT; editor de ontologia simples; KQML http://www.labs.bt.com/projects/agents/zeus/index.htm AGLETS da IBM; es móveis http://www.trl.ibm.com/aglets/ JATLiteBean: desenvolvimento do JATLite http://kmi.open.ac.uk/people/emanuela/jatlitebean/index.html