Java Agent DEvelopment Framework. Jade è una piattaforma per la realizzazione di sistemi distribuiti multi-agente



Documenti analoghi
Introduzione a JADE. Francesco Di Giunta

GESTIONE DEI PROCESSI

Come Programmare un Sistema Multiagente con JADE

Java Virtual Machine

Oggetti Lezione 3. aspetti generali e definizione di classi I

Esercitazione n 4. Obiettivi

Corso: Sistemi di elaborazione delle informazioni 2. Anno Accademico: 2007/2008. Docente: Mauro Giacomini

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Il glossario della Posta Elettronica Certificata (PEC) Diamo una definizione ai termini tecnici relativi al mondo della PEC.

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Reti di Telecomunicazione Lezione 6

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

13. Chain of Responsibility

Corso di Amministrazione di Reti A.A. 2002/2003

La struttura dati ad albero binario

Main System Monitor Keyboard

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Modulo 4: Ereditarietà, interfacce e clonazione

Fondamenti di Informatica C Esercitazioni di Laboratorio / 3 Outline

Programmazione a Oggetti Lezione 10. Ereditarieta

Lezione 8. La macchina universale

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Database. Si ringrazia Marco Bertini per le slides

Java: Compilatore e Interprete

Registratori di Cassa

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Approccio stratificato

BMSO1001. Virtual Configurator. Istruzioni d uso 02/10-01 PC

INFORMATICA. Il Sistema Operativo. di Roberta Molinari

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Protezione. Protezione. Protezione. Obiettivi della protezione

Pronto Esecuzione Attesa Terminazione

FONDAMENTI di INFORMATICA L. Mezzalira

Reti di Calcolatori. Il Livello delle Applicazioni

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi

Centro Tecnico per la Rete Unitaria della Pubblica Amministrazione

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

RMI Remote Method Invocation

NOVITÀ SITI COMMERCIALISTA

Laboratorio di Sistemi Distribuiti Leonardo Mariani

Realizzazione di una classe con un associazione

Concetto di Funzione e Procedura METODI in Java

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

3. Introduzione all'internetworking

Dispensa di database Access

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Coordinazione Distribuita

Rapporto tecnico sulle tipologie di agenti software definiti e implementati nell ambito del progetto

Inizializzazione, Assegnamento e Distruzione di Classi

Laboratorio di Basi di Dati

CAPITOLO 7 - SCAMBIO DI MESSAGGI

Object Oriented Programming

Università Politecnica delle Marche. Progetto Didattico

Object Oriented Software Design

Politica del WHOIS relativa al nome a dominio.eu

A T I C _W E B G U I D A AL L A N A V I G A Z I O N E S U L S I T O D E L G R U P P O. Rev. 2.1

Introduzione alla programmazione in C

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

Manuale LiveBox WEB ADMIN.

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

R E G I O N E U M B R I A GIUNTA REGIONALE. Direzione Affari Generali della Presidenza e della Giunta regionale. Servizio Segreteria della Giunta

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

dall argomento argomento della malloc()

GESTIONE INFORMATICA DEI DATI AZIENDALI

Una minaccia dovuta all uso dell SNMP su WLAN

Gestione ed analisi di base dati nell epidemiologia. delle malattie infettive

Gestione della memoria centrale

INFORMATICA 1 L. Mezzalira

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Concetti di base di ingegneria del software

Test di unità con JUnit4

OmniAccessSuite. Plug-Ins. Ver. 1.3

UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI

I database relazionali (Access)

File system II. Sistemi Operativi Lez. 20

Corso di Informatica

Introduzione alla Programmazione Orientata agli Oggetti. Classi, Oggetti e Messaggi

Java Remote Method Invocation

Esempio produttori consumatori. Primitive asincrone

Funzioni in C. Violetta Lonati

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

Reti di Calcolatori. Il software

Soluzione dell esercizio del 2 Febbraio 2004

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Brochure Internet. Versione The Keyrules Company s.r.l. Pagina 2 di 8

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Reti di Telecomunicazioni Mobile IP Mobile IP Internet Internet Protocol header IPv4 router host indirizzi IP, DNS URL indirizzo di rete

Prova di Laboratorio di Programmazione

Il protocollo BitTorrent

Corso di Sistemi di Elaborazione delle informazioni

Transcript:

JADE Java Agent DEvelopment Framework Cos è JADE Jade è una piattaforma per la realizzazione di sistemi distribuiti multi-agente E interamente realizzato in Java da Telecom Italia Lab. Può essere scaricato da http://jade.tilab.com 1

Sistemi distribuiti Una definizione Un sistema distribuito (SD) è un sistema i cui componenti sono dislocati nei diversi host di una rete; I componenti di un SD sono processi fortemente cooperanti eseguiti in parallelo su Unità di Elaborazione autonome; L utente non dovrebbe percepire la distribuzione dei componenti del sistema (Location Transparency); oe possibile gestire la crescita di un sistema (nodi e numero utenti) in modo incrementale; oe possibile condividere dati e risorse; Alcune motivazioni oi SD Presentano una maggiore tolleranza ai guasti; Sistemi distribuiti basati su agenti Caratteristiche MAS (Multi Agent System): Sistemi distribuiti i cui componenti sono Agenti; Gli agenti sono entità autonome capaci di svolgere compiti e comunicare per mezzo di messaggi; In un MAS gli agenti possono cooperare alla soluzione di compiti complessi che richiedono competenze trasversali a quelle dei singoli agenti; FIPA Foundation for Intelligent Physical Agent: http://www.fipa.org E un organizzazione no-profit che ha lo scopo di produrre standard per l interoperabilità di agenti software eterogenei. 2

La Piattaforma Jade JADE Layer Middleware omogeneo Main Container 1 Container Container 2 Container 3 JADE Java Virtual Machine Layer J2SE J2EE PersonalJava CLDC La complessità della rete sottostante viene nascosta La Piattaforma Jade Eseguire il MainContainer: java jade.boot -gui Eseguire altri Container: java jade.boot -container 3

Agenti Jade Cosa fanno? Svolgono task Rendono pubblici i servizi che offrono; Comunicano con altri agenti; Cooperano con altri agenti per la risoluzione di compiti che richiedono competenze trasversali; Possono cambiare container effettuando una migrazione logica e, se necessario, fisica; Dove sono? Gli agenti JADE sono ospitati dai diversi Container costituenti una Piattaforma JADE Eseguire un agente Da riga di comando java jade.boot Option* AgentSpecifier* AgentSpecifier = AgentName ":" ClassName ("(" Argument* ")")? AgentName = nome dell agente, definito dall utente; ClassName = la classe dell agente; Argument* = argomenti da passare all agente; Java jade.boot gui agente1:mypackage.agent agente2:mypackage.anotheragent Java jade.boot container agente1:mypackage.agent agente2:mypackage.anotheragent Oppure 4

Creare Agenti Come? Per creare un agente JADE è necessario estendere la classe jade.core.agent e ridefinirne il metodo setup(); Ogni agente JADE è univocamente definito attraverso un AID (jade.core.aid) che gli viene assegnato direttamente dalla piattaforma; Un agente può ottenere il proprio AID mediante il metodo getaid(); Esempio import jade.core.agent; public class HelloWorldAgent extends Agent { protected void setup() { System.out.println( Hello World! my name is + getaid().getname()); Terminare Agenti Come? Un agente viene terminato quando ne viene invocato il metodo dodelete(); Il metodo dodelete() richiama al suo interno il metodo takedown() che può essere ridefinito in modo da personalizzare le operazioni da compiere prima che l agente venga tolto dalla piattaforma; Esempio import jade.core.agent; public class HelloWorldAgent extends Agent { protected void setup() { System.out.println( Hello World! my name is + getaid().getname()); dodelete(); protected void takedown() { System.out.println( Addio... ); 5

Behaviours Le operazioni che gli agenti JADE sono in grado di compiere vengono definite attraverso oggetti di tipo Behaviour; I Behaviour vengono creati estendendo la classe astratta jade.core.behaviours.behaviour; Per fare in modo che un agente sia in grado di eseguire un particolare compito è sufficiente creare un istanza della sottoclasse di Behaviour che implementa il task desiderato ed utilizzare il metodo addbehaviour() dell agente Ogni sotto-classe di Behaviour deve implementare i metodi action(): cosa il Behaviour deve fare; done(): condizione per cui il Behaviour può considerarsi concluso. Tipi di Behaviour One shot behaviours Il metodo action() viene eseguito un unica volta. Il metodo done() restituisce sempre true. Classe: jade.core.behaviours.oneshotbehaviour Cyclic behaviours Non terminano mai completamente. Il metodo action() esegue la stessa operazione ogni volta che viene invocato. Il metodo done() restituisce sempre false; Classe: jade.core.behaviours.cyclicbehaviour Complex behaviours Hanno uno stato. Il comportamento del metodo action() varia in funzione dello stato. Il metodo done() restituisce true solo quando è verificata una certa condizione. Esistono diversi tipi di behaviour predefiniti (composite behaviour, sequential behaviour, parallel behaviour, sender behaviour ). Tuttavia è possibile, creando estendendo la classe Behaviour, definire behaviour completamente personalizzati. 6

Behaviours, un esempio Un complex Behaviour public class my3stepbehaviour extends Behaviour { private int state = 1; private boolean finished = false; public void action() { switch (state) { case 1: { op1(); state++; break; case 2: { op2(); state++; break; case 3: { op3(); state=1; finished = true; break; op1(){ op2(){ op3(){ public boolean done() { return finished; All interno dell agente agente protected void setup() { addbehaviour(new my3stepbehaviour()); Modello esecutivo di un agente Un agente può eseguire diversi behaviours. Lo scheduling dei Behaviours avviene in modo cooperativo e non preemptive; Il cambiamento tra Behaviour avviene quando il metodo action() del Behaviour corrente è terminato; setup() Agente terminato? b= prossimo Behaviour y Il metodo setup deve contenere le operazioni di inizializzazione e l aggiunta dei Behaviours; n b.action() b.done() Il metodo takedown deve contenere le operazione di Clean up Rimozione di b takedown() 7

Messaggi Il modello di comunicazione tra gli agenti è basato su scambio di messaggi asincrono Messaggi Quali messaggi? Gli agenti JADE comunicano utilizzando ACL (Agent communication language), uno standard di comunicazione tra agenti definito da FIPA. I messaggi scambiati tra gli agenti sono istanze della classe jade.lang.acl.aclmessage; ACLMessage: La classe ACLMessage fornisce i metodi per impostare e ottenere i valori dei campi definiti da FIPA per l ACL addreceiver(); get/setperformative(); get/setsender(); add/getallreceiver(); get/setlanguage(); get/setontology(); get/setcontent();... 8

Messaggi Inoltrare un messaggio: Per inoltrare un messaggio è necessario creare un oggetto ACLMessage, aggiungere uno o più riceventi per mezzo del metodo addreceiver (utilizzando gli AID); aggiungere il contenuto attraverso il metodo setcontent; inoltrare il messaggio attraverso il metodo send dell agente mittente. ACLMessage msg = new ACLMessage(ACLMessage.INFORM); msg.addreceiver(new AID( Peter, AID.ISLOCALNAME)); msg.setlanguage( English ); msg.setontology( Weather-Forecast-Ontology ); msg.setcontent( Today it s raining ); send(msg); Ricevere un messaggio: Per Ricevere un messaggio un agente può utilizzare il metodo receive(), non bloccante! ACLMessage msg = receive(); if (msg!= null) { // Process the message Aspettare l arrivo di un messaggio Cosa non fare: Una grossolana soluzione per mettere un behaviour in attesa di un messaggio potrebbe essere richiamare continuamente il metodo receive(). Questa soluzione comporta uno spreco del tempo di CPU. Cosa fare: Il metodo block() di un behaviour, lo rimuove dal pool di behaviour attivi dell agente e lo mette in un insieme di behaviour bloccati. Ogni volta che un messaggio viene ricevuto dall agente, i behaviour bloccati vengono riattivati in modo da avere una chance di leggere e processare il messaggio Esempio public void action() { ACLMessage msg = myagent.receive(); if (msg!= null) { // Process the message else { block(); 9

Ricezione selettiva dei messaggi Problema: Il metodo receive() restituisce il primo messaggio ricevuto e lo toglie dalla coda. Se più behaviours stanno aspettando dei messaggi è possibile, utilizzando receive(), che sorgano problemi (un behaviour potrebbe prendere un messaggio non diretto a lui); Soluzione: è possibile richiedere di leggere solo i messaggi che rispettano determinate caratteristiche. Per fare questo si deve utilizzare un istanza della classe jade.lang.acl.messagetemplate come parametro del metodo receive() Esempio MessageTemplate tpl = MessageTemplate.MatchOntology( Test-Ontology ); public void action() { ACLMessage msg = myagent.receive(tpl); if (msg!= null) { // Process the message else { block(); Ricezione bloccante di messaggi Ricezione bloccante: La classe Agent fornisce il metodo blockingreceive() per la ricezione bloccante di messaggi; Esistono implementazioni di questo metodo che accettano MessageTemplate e timeout; Utilizzare blockingreceive() all interno di un behaviour è pericoloso perché viene bloccato l intero agente e quindi tutti i suoi behaviours. E Consigliabile: Utilizzare receive() + Behaviour.block() all interno dei Behaviour; blockingreceive() per ricevere messaggi all interno dei metodi setup() e takedown() di un agente. 10

Protocolli di comunicazione FIPA specifica dei protocolli di interazione per la conversazione tra agenti; Per ogni conversazione JADE prevede agenti con ruoli di Initiator e Responder fornendo behaviours già implementati per entrambi i ruoli. Queste classi possono essere trovate nel package jade.proto AchieveREInitiator; SimpleAchieveREInitiator; AchieveREResponder; SimpleAchieveREResponder; ContractNetInitiator; ContractNetResponder; Importante: Non sono necessari ma sono una soluzione elegante e funzionale. Agenti Fondamentali In ogni piattaforma JADE esistono 2 agenti fondamentali residenti nel MainContainer: l Agent Management System (AMS); Il Directory Facilitator (DF); RMA è l agente responsabile della GUI di JADE. Viene eseguito soltanto nel caso in cui venga richiesta l interfaccia grafica 11

AMS Agent Management System Chi è e cosa fa? E un elemento fondamentale di qualsiasi piattaforma basata su agenti che sia conforme alle specifiche FIPA; Svolge funzione di supervisore controllando l accesso e l uso della piattaforma da parte degli agenti; Ne esiste solo 1 in ogni piattaforma; Mantiene un registro degli identificatori degli agenti (AID) e del loro stato; Ogni agente deve registrarsi presso l AMS per ottenere un AID valido. Tale registrazione avviene in modo automatico (trasparente al programmatore ed all utente) appena un agente viene eseguito in un Container; DF Directory Facilitator Il Directory Facilitator (DF) è l agente che fornisce il servizio di pagine gialle di base della piattaforma. Registrazione di servizi A1 A2 A4 A5 Ricerca di servizi A3 A6 Interazioni richiedente/fornitore 12

Comunicare con il DF Trovare il DF: Il metodo getdefaultdf() della classe Agent, permette di determinare l AID del DF di default. Comunicare con il DF: La classe jade.domain.dfservice fornisce un insieme di metodi statici per la comunicazione con un Directory Facilitator Questi permettono di compiere azioni di: Registrazione; Deregistrazione; Modifica; Ricerca; di agenti per certi servizi presso il DF. l esecuzione di questi metodi blocca l attività dell agente finchè l azione non è stata eseguita o un eccezione di tipo jade.domain.fipaexception non è stata lanciata. In pratica l agente rimane bloccato finchè non termina la sua conversazione con il DF. DFService, un esempio Registrazione DFAgentDescription: descrive un agente nel catalogo del DF ServiceDescription: descrive un servizio offerto da un agente DFAgentDescription dfd = new DFAgentDescription(); dfd.setname(getaid()); ServiceDescription sd = new ServiceDescription(); sd.setname(servicename); sd.settype("weather-forecast"); dfd.addservices(sd); DFService.register(this, dfd); Ricerca Utilizzare DFAgentDescription e ServiceDescription al contrario. DFService.search() restituisce un vettore di DFAgentDescription che soddisfano <template> DFAgentDescription template = new DFAgentDescription(); ServiceDescription tsd = new ServiceDescription(); tsd.settype("weather-forecast"); template.addservices(tsd); SearchConstraints sc = new SearchConstraints(); DFAgentDescription[] res = DFService.search(this, template, sc); 13

Ontologie Le informazioni contenute all interno degli ACLMessage scambiati tra agenti sono stringhe. Gli agenti sono entità Software ed è quindi poco comodo per loro gestire informazioni in formato unicamente testuale La cosa migliore è convertire queste informazioni in oggetti Java. Informazione there is a person whose name is Andrea and who is 24 years old ACL Msg Person( Name: Andrea Age: 24 ) Java Object class Person { String name; int age; public String getname() {return name; public void setname(string n) {name = n; public int getage() { return age; public void setage(int a) { age = a;. Ontologie Ogni conversione è effettuata da un oggetto ContentManager istanza della classe jade.content.contentmanager; Ogni Agente JADE possiede un ContentManager il cui riferimento gli è accessibile attraverso il metodo Agent.getContentManager() Un ContentManager si avvale di: un ontologia per verificare la correttezza dei contenuti di un messaggio ACL; un content language codec per effettuare le trasformazioni; 14

Ontologie Per effettuare un adeguato controllo semantico dei messaggi nell ambito di una conversazione, è stata fatta una classificazione degli elementi di un discorso Questa classificazione deriva dal linguaggio ACL e si riferisce quindi al contenuto dei messaggi ACL scambiati tra agenti opredicati: Espressioni che dicono qualcosa del mondo, possono essere true o false. Esempio: (Works-for (Person: name John) (Company :name TILab) ) otermini: Espressioni che si riferiscono ad entità esistenti nel mondo di cui l agente può parlare e su cui può ragionare ; oconcetti: Espressioni che indicano entità aventi strutture complesse. Esempio: (Person :name Andrea :age 24); oagent Action: Speciali concetti che indicano possibili azioni di agenti. Esempio: (Sell (Book :title The Hitchiker s Guide to the Galaxy ) (Person :name Andrea)) oaggregati: Espressioni che indicano entità gruppi di altre entità; ovariabili: Espressioni che indicano elementi non noti a priori; oprimitive: Espressioni che indicano entità atomiche come stringhe e interi; Problema Ci interessa determinare gli agenti (se ce ne sono) residenti in un certo Container che offrono un certo servizio Come fare? Il DF può dirci quali sono gli agenti della piattaforma che offrono un particolare servizio ma non può sapere in quale Container risiedono L AMS può dirci quali sono gli agenti residenti in un certo Container ma non può dirci quali servizi offrono Per ottenere quello che desideriamo dobbiamo utilizzare entrambi gli agenti 15

QueryAgentsOnLocation Il package jade.domain.jadeagentmanagement contiene concetti, azioni e predicati relativi alle azioni che possono essere richieste agli agenti AMS e DF. Jade.domain.JADEAgentManagement.QueryAgentsOnLocation rappresenta un azione che può essere richiesta all AMS per ottenere la lista di agenti eseguiti in un certo Container. Linee Guida Ottenere un riferimento al ContentManager dell agente; Istanziare un oggetto QueryAgentsOnLocation ed utilizzare il suo metodo setlocation per impostare il Container su cui si desidera effettuare la ricerca; Utilizzare il metodo fillcontent del ContentManager per inizializzare il contenuto di un messaggio ACL con l azione richiesta (indicare nel messaggio il fatto che utilizza l ontologia JADEAgentManagement e il linguaggio SLCodec); Inviare il messaggio ACL all AMS; Per gestire la risposta utilizzare il metodo extractcontent del ContentManager ottenendo un oggetto ContentElement; Trasformare il ContentElement in un oggetto Result; QueryPlatformLocationsAction Jade.domain.JADEAgentManagement.QueryPlatformLocationsAction rappresenta un azione che può essere richiesta all AMS per ottenere la lista di dei Container di una piattaforma. I Container sono oggetti di tipo Location; Linee Guida Stesse operazioni del caso precedente ad eccezione del fatto che deve essere utilizzato un oggetto QueryPlatformLocationsAction. Quest oggetto non richiede parametri aggiuntivi; Una volta ottenuto l oggetto Result dalla risposta dell AMS è possibile estrarre da questo un oggetto List, lista degli oggetti Location rappresentanti tutti i Container della piattaforma. 16

Esempio ContentManager manager = (ContentManager)getContentManager(); Codec codec = new SLCodec(); Ontology ontology = JADEManagementOntology.getInstance(); manager.registerlanguage(codec); manager.registerontology(ontology); Action qloc = new Action(getAMS(), new QueryPlatformLocationsAction()); ACLMessage req = new ACLMessage(ACLMessage.REQUEST); req.setsender(getaid()); req.addreceiver(getams()); req.setlanguage(codec.getname()); req.setontology(ontology.getname()); manager.fillcontent(req,qloc); send(req); ACLMessage resp = blockingreceive(); ContentElement ce = getcontentmanager().extractcontent(resp); Result myresult = (Result) ce; List loclist = myresult.getitems(); int indicecontainer =1; Location acontainer = (Location)loclist.get(indiceContainer); QueryAgentsOnLocation qal = new QueryAgentsOnLocation(); qal.setlocation(acontainer); Action action2 = new Action(getAMS(), qal); manager.fillcontent(req,action2); send(req); ACLMessage resp2 = blockingreceive(); ContentElement ce2 = getcontentmanager().extractcontent(resp2); Result myresult2 = (Result) ce2; jade.util.leap.iterator agentsinlocation = myresult2.getitems().iterator(); JADE LEAP Permette di eseguire agenti JADE su dispositivi mobili con ridotte capacità di calcolo (cellulari e palmari); Ha una implementazione interna differente ma fornisce lo stesso insieme di API; 17

JADE LEAP Stand-alone: Nel dispositivo mobile viene eseguito un intero Container Split: Il Container è diviso in un FrontEnd (eseguito sul dispositivo mobile) ed in un BackEnd eseguito in un altro host JADE Leap Il BackEnd LEAP svolge la funzione di surrogato del client mobile nella rete fissa; Svolge funzione di accodamento dei messaggi supportando operazioni caratterizzate da connessioni a tratti mancanti; È un modello appropriato per client leggeri; 18

Consigli Consultare: ojade Administrator s Guide: http://jade.tilab.com/doc/administratorsguide.pdf ojade Programmer s Guide: http://jade.tilab.com/doc/programmersguide.pdf ocomplete Api Documentation: http://jade.tilab.com/doc/api/index.html obasic Aspect of JADE Programming: http://www.cs.bath.ac.uk/~occ/agents_ecommerce/jade/ o LEAP User guide: http://jade.tilab.com/doc/leapuserguide.pdf Altre risorse: Mailing list di Jade: jade-develop@sharon.cselt.it Per iscriversi occorre riempire, durante la procedura di download di Jade, il form che permette l scrizione alla mailing list. 19