You are on page 1of 10

Acciones

Inicio del wiki Cambios Recientes Pages and Files Miembros


Bsqueda
Navegacin

Agentes (/Agentes)
1. Agentes
1.1 Definicin de agente JADE
1.1.1 Clase Agent

Editar

4 (/page/messages/Agentes)

127 (/page/history/Agentes)

1. 2. 3. 4. 5. 6. 7.

Agentes Comportamientos Comunicacin Ontologas Movilidad Interfaz Otras Tecnologas

1.2 Ciclo de vida de un agente


1.2.1 Estados de un agente 1.2.2 Transiciones entre estados 1.2.3 Visin grfica

1.3 Creacin de agentes


1.3.1 Detalle de la creacin del Agente BookBuyerAgent del ejemplo booktrading 1.3.2 Detalle de la creacin del Agente BookSellerAgent del ejemplo booktrading

Inicio | Glosario

1.4 Ejecucin de agentes


1.4.1 Ejecucin de agentes desde el GUI de JADE 1.4.2 Ejecucin de agentes desde la lnea de comandos 1.4.3 Ejecucin remota de agentes

1.5 Terminar la ejecucin de agentes


1.5.1 Terminar la ejecucin de agentes desde el GUI de JADE 1.5.2 Terminar la ejecucin de agentes desde la ventana de la consola 1.5.3 Terminar la ejecucin de agentes mediante cdigo 1.5.3.1 Detalle de la terminacin del Agente BookBuyerAgent del ejemplo booktrading 1.5.3.2 Detalle de la terminacin del Agente BookSellerAgent del ejemplo booktrading

1.6 Identificador de un agente 1.7 Paso de argumentos


1.7.1 Detalle de la obtencin de los argumentos en el BookBuyerAgent del ejemplo booktrading 1.7.2 Paso de argumentos en la lnea de comandos 1.7.3 Paso de argumentos desde la interfaz grfica

1.8 Ejercicio propuesto 1.1 Definicin de agente JADE


Programar un agente JADE consiste en: Definir una clase Java que representa al agente (la cual debe heredar de la clase jade.core.Agent). Implementar los comportamientos que va a manisfestar. Un agente JADE cumple las siguientes caractersticas: Tiene un nombre nico en el entorno de ejecucin. Se implementa como un nico hilo de ejecucin (single-threaded). Tiene un metodo de inicio (setup) y otro de fin (tak eDown).

El mtodo protegido setup() sirve para inicializar el agente incluyendo instrucciones que especificarn la ontologa a utilizar y los comportamientos asociad invoca al comenzar la ejecucin del agente. El mtodo protegido tak eDown() sirve para liberar recursos antes de la eliminacin del agente. Este mtodo es invocado cuando se realiza una llamada al que es el que realmente da por finalizada la ejecucin del agente. Ambos mtodos deben ser sobreescritos. En su implementacin se define una clase interna por cada uno de los comportamientos asociados al agente. Estos comportamientos se utilizan bsicamente p recepcin de mensajes, aunque tambin se pueden utilizar para realizar otras tareas. Podemos encontrar una descripcin completa de la API de jade.core.Agent aqu . i m p o r tj a d e . c o r e . A g e n t ; p u b l i cc l a s sM i A g e n t ee x t e n d sA g e n t{ p r o t e c t e dv o i ds e t u p ( ) {/ /i n i c i a l i z a c i nd eM i A g e n t e} p r o t e c t e dv o i dt a k e D o w n ( ){/ /l i b e r a c i nd er e c u r s o sd e la g e n t e} }

1.1.1 Clase Agent


La clase Agent:

La clase Agent: Es una superclase comn que permite a los usuarios crear software de agentes. Suministra mtodos que permiten ejecutar las tareas bsicas de los agentes como:

Pasar mensajes utilizando objetos ACLMessage, con correspondencia de patrones. Dar soporte al ciclo de vida de un agente. Planificar y ejecutar mltiples actividades concurrentemente. Los programadores de aplicaciones basadas en agentes deben escribir sus propios agentes como subclases de Agent, aadiendo tantos comportamientos especficos necesarios y explotando las capacidades de la clase Agent.

1.2 Ciclo de vida de un agente

Un agente est sujeto a un ciclo de vida en el que se definen los estados en los cuales se puede encontrar el agente, as como los cambios que se pueden realizar ent estados. El ciclo de vida de un agente JADE sigue el ciclo propuesto por FIPA , es decir, cumple con la propuesta del estndar de interoperabilidad entre agentes ms aceptado

1.2.1. Estados de un agente


Un agente puede estar en los siguientes estados:

paces.com/) | Iniciar Sesin (http://www.wikispaces.com/site/signin?goto=http%3A%2F%2Fprogramacionjade.wikispaces.com%2FAgentes) Get your Wikispaces Classroom now: the easiest manage your class. en el AMS, tiene un nombre, una direccin y puede acceder a todas las opciones de JADE. Activoway : El to Agente est registrado

Iniciado: El objeto Agente est creado pero todava no se ha registrado en el AMS, no tiene nombre ni direccin y tampoco se puede comunicar con otros agen

Suspendido: El Agente est parado. Su hilo de ejecucin est detenido y no ejecuta ningn Comportamiento. En espera : El Agente est bloqueado esperando por algo. Su hilo de ejecucin est dormido en un monitor de java y se despertar cuando se cumpla una cierta reciba un mensaje). Desconocido: El Agente ha sido eliminado. El hilo de ejecucin ha terminado y se ha eliminado del registro del AMS. Trnsito: Un Agente mvil entra en este estado mientras est migrando a una nueva localizacin. El sistema sigue guardando los mensajes en el buffer hasta qu estar activo.

1.2.2 Transiciones entre estados:

Un agente puede cambiar de un estado a otro a travs de transiciones. Estas transiciones pueden ser ejecutadas a travs de mtodos disponibles en la clase Agent y s mtodos que se pueden sobreescribir. Para saber en que estado se encuentra un agente se puede usar el mtodo getAgentState( ) de la clase Agent que devuelve un AgentState p u b l i cA g e n t S t a t eg e t A g e n t S t a t e ( ) Accin Crear Invocar Descripcin Creacin o instalacin de un nuevo agente. Invocacin de un nuevo agente. doSuspend() Mtodo que realiza la accin Constructor Mtodo accin setup()

Suspender Pone un agente en estado suspendido. Puede ser iniciado por el agente o por el AMS. Reanudar Contina con la ejecucin de un agente que se encuentra en estado suspendido. Slo puede ser iniciado por el AMS. Esperar Mover Ejecutar Destruir Pone un agente en estado de espera. Slo puede ser iniciado por el agente. Pone un agente en otro contenedor cambiando su estado al de trnsito. Slo puede ser iniciado por el agente. Contina con la ejecucin de un agente que se encuentra en estado de trnsito. Slo puede ser iniciado por el AMS. La terminacin normal o forzosa de un agente. Slo puede ser iniciado por el AMS y no puede ser ignorado por el agente.

doWait() doMove()

Despertar Continua con la ejecucin de un agente que se encuentra en estado de espera. Slo puede ser iniciado por el AMS. doWake()

beforeMo

doDelete()

takeDow

1.2.3 Visin grfica

1.3 Creacin de agentes


En el momento de crearse un agente se realizan varias tareas de forma automtica: 1. 2. 3. 4. Se llama al constructor del agente. Se crea un identificador del agente (AID). Se registra el agente en el AMS. Se ejecuta el mtodo setup(), que debe contener nicamente el cdigo relativo a las tareas de inicializacin.

En el mtodo setup() del agente adems puede: Modificar el registro del AMS. Registrar el agente de forma explcita en el DF. Aadir las tareas/comportamientos/behaviors que ejecutar el agente. Etc.

El esqueleto de la creacin de un agente es bastante simple. El siguiente cdigo muestra un ejemplo de creacin de un agente que lo nico que hace es visualizar el te iniciado.". / /E s q u e l e t od eu na g e n t eJ A D E i m p o r tj a d e . c o r e . A g e n t ; p u b l i cc l a s sM i A g e n t ee x t e n d sA g e n t{ p r o t e c t e dv o i ds e t u p ( ){ S y s t e m . o u t . p r i n t l n ( " E la g e n t es eh ai n i c i a d o . " ) ; } }

1.3.1 Detalle de la creacin del Agente BookBuyerAgent del ejemplo booktrading


El cdigo completo se encuentra en la ruta c:/jade/src/examples/booktrading/BookBuyerAgent.java / /... r d e n e sp a c k a g eei m p o r t p u b l i cc l a s sB o o k B u y e r A g e n te x t e n d sA g e n t{ p r i v a t eS t r i n gt a r g e t B o o k T i t l e ;/ /A l m a c e n ae lT t u l od e ll i b r oq u es eq u i e r ec o m p r a r p r i v a t eA I D [ ]s e l l e r A g e n t s ; / /A l m a c e n al al i s t ad el o sa g e n t e sc o n o c i d o sq u es o nv e n d e d o r e sd el i b r o s p r o t e c t e dv o i ds e t u p ( ){ / /C d i g od ei n c i a l i z a c i nd e la g e n t e / /E s c r i b eu nm e n s a j ed eb i e n v e n i d a / /g e t N a m e ( )o b t i e n ee ln o m b r ec o m p l e t od e la g e n t e( G U I D )yd e v u e l v eu ns t r i n g( e j . :p e t e r @ f i p a . o r g : 5 0 ) / /g e t A I D ( )o b t i e n ee lI Dp r i v a d od e la g e n t e( q u es e r d i f e r e n t ee nc a d au n od el o sa g e n t e sr e g i s t r a d o s / /e nl ap l a t a f o r m a ) .D e v u e l v eu nA g e n tI Dc o m p l e t o( G U I D ,d i r e c c i o n e s ,d e c i s i o n e s ) S y s t e m . o u t . p r i n t l n ( " H a l l o !B u y e r a g e n t" + g e t A I D ( ) . g e t N a m e ( ) + "i sr e a d y . " ) ; / /... r e s t od e lc d i g od ei n i c i a l i z a c i nd e la g e n t e }/ /F i nd es e t u p ( ) / /...r e s t od e lc d i g od el ac l a s e( o t r o sm t o d o s ,c o m p o r t a m i e n t o s ) }/ /F i nd el ac l a s eB o o k B u y e r A g e n t

1.3.2 Detalle de la creacin del Agente BookSellerAgent del ejemplo booktrading


El cdigo completo se encuentra en la ruta c:/jade/src/examples/booktrading/BookSellerAgent.java / /... r d e n e sp a c k a g eei m p o r t p u b l i cc l a s sB o o k S e l l e r A g e n te x t e n d sA g e n t{ p r i v a t eH a s h t a b l ec a t a l o g u e ;/ /E lc a t l o g od el i b r o sav e n d e r( r e l a c i o n ae lt t u l od e ll i b r oc o ns up r e c i o ) p r i v a t eB o o k S e l l e r G u im y G u i ;/ /L ai n t e r f a zd eu s u a r i om e d i a n t el ac u a le lu s u a r i op u e d ea a d i rl i b r o sa lc a t l o g o p r o t e c t e dv o i ds e t u p ( ){ c a t a l o g u e=n e wH a s h t a b l e ( ) ; / /I n i c i a l i z ae la g e n t e / /C r e ae lc a t l o g o

c a t a l o g u e=n e wH a s h t a b l e ( ) ; / /C r e ae lc a t l o g o m y G u i=n e wB o o k S e l l e r G u i ( t h i s ) ;/ /C r e al ai n t e r f a zd eu s u a r i o m y G u i . s h o w ( ) ; / /M u e s t r al ai n t e r f a zd eu s u a r i o / /R e g i s t r ae ls e r v i c i o" b o o k s e l l i n g "( v e n t ad el i b r o s )e nl a sp g i n a sa m a r i l l a s D F A g e n t D e s c r i p t i o nd f d=n e wD F A g e n t D e s c r i p t i o n ( ) ; d f d . s e t N a m e ( g e t A I D ( ) ) ; / /E s t a b l e c eu ni d e n t i f i c a d o rp a r ae la g e n t e( d e v u e l t op o rg e t A I D ( ) ) S e r v i c e D e s c r i p t i o ns d=n e wS e r v i c e D e s c r i p t i o n ( ) ; s d . s e t T y p e ( " b o o k s e l l i n g " ) ; / /E s t a b l e c ee lt i p od es e r v i c i o s d . s e t N a m e ( " J A D E b o o k t r a d i n g " ) ;/ /E s t a b l e c ee ln o m b r ed e ls e r v i c i o d f d . a d d S e r v i c e s ( s d ) ; / /A a d el ad e s c r i p c i nd e ls e r v i c i oa la g e n t e t r y{ D F S e r v i c e . r e g i s t e r ( t h i s ,d f d ) ;/ /I n t e n t ar e s g i t r a ra la g e n t ec o nl ad e s c r i p c i nd a d aa n t e r i o r m e n t e } c a t c h( F I P A E x c e p t i o nf e ){ / /S is ep r o d u c eu n ae x c e p c i nF I P A( N o t U n d e s t o o d ,F a i l u r e ,R e f u s e , . . . ) f e . p r i n t S t a c k T r a c e ( ) ; / /D i r i g el ae x c e p c i nal as a l i d ae s t n d a r } / / A a d ee lc o m p o r t a m i e n t od ea t e n d e rp e t i c i o n e sd el o sa g e n t e sc o m p r a d o r e s a d d B e h a v i o u r ( n e wO f f e r R e q u e s t s S e r v e r ( ) ) ; / / A a d ee lc o m p o r t a m i e n t od ea t e n d e rp e t i c i o n e sd ec o m p r ad el o sa g e n t e sc o m p r a d o r e s a d d B e h a v i o u r ( n e wP u r c h a s e O r d e r s S e r v e r ( ) ) ; } / /...R e s t od e lc d i g o }

1.4 Ejecucin de agentes


Hay dos formas de ejecutar un agente: desde el GUI de JADE y desde la lnea de comandos.

1.4.1 Ejecucin de un agente desde el GUI de JADE


Para ejecutar el GUI de JADE: Situarse en el directorio donde se encuentra el archivo de la clase del agente. Ejecutar la orden java jade.Boot -gui desde la lnea de comandos. Una vez que est disponible el GUI, seguir los pasos mostrados en las siguientes ilustraciones.

1.4.2 Ejecucin de un agente desde la lnea de comandos


Ejecutar la orden java jade.Boot -container <nombre_del_agente>:<ruta_al_agente.class> desde la lnea de comandos.

1.4.3 Ejecucin remota de agentes

JADE es una plataforma que permite la ejecucin de un sistema de agentes en el que stos puedan estar repartidos entre diversos hosts. Para ejecutar un agente en re ejecutar la orden java jade.Boot -container -host nombreHost <nombre_del_agente>:<ruta_al_agente.class> desde la lnea de comandos.

Tambin es posible crear un RMA que ponga en contacto la plataforma local con la remota. Esto significa que desde el RMA de ambas plataformas podremos contemp producidos en el sistema de agentes, e interactuar con dichos agentes. Para ello tenemos que ejecutar la orden java jade.Boot -container -host nombreHost RMA1:j desde la lnea de comandos.

1.5 Terminar la ejecucin de agentes

Hay tres formas de terminar la ejecucin de un agente: desde el GUI de JADE, mediante la llamada al mtodo doDelete() dentro del cdigo del agente y desde la lnea d ventana de la consola.

1.5.1 Terminar la ejecucin de agentes desde el GUI de JADE


Seleccionar la opcin Kill del men contextual tal y como se ve en la imagen.

1.5.1 Terminar la ejecucin de agentes desde la ventana de la consola


Cerrando la ventana de la consola en la que se est ejecutando el agente o tecleando Ctrl + c cuando dicha ventana est activa.

1.5.2 Terminar la ejecucin de agentes en el cdigo


Llamando al mtodo doDelete() dentro del cdigo del agente. public void doDelete()

Es un mtodo de la clase Agent que realiza una transicin del los estados Activo, Suspendido o En espera al estado de Borrado destruyendo al agente. Se suele usar para finalizar agentes que estn en ejecucin continua. El mtodo doDelete() llama automticamente al mtodo takeDown(). protected void takeDown()

Mtodo que se invoca antes de que el agente termine su ejecucin. Se usa normalmente para realizar tareas de "limpieza" como por ejemplo, desregistrar el age del programador del agente el sobrescribir el mtodo para proveer al agente de un comportamiento especial antes de su destruccin.

1.5.3.1 Detalle de la terminacin del Agente BookBuyerAgent del ejemplo booktrading

/ /... r d e n e sp a c k a g eei m p o r t p u b l i cc l a s sB o o k B u y e r A g e n te x t e n d sA g e n t{ / /... p r o t e c t e dv o i ds e t u p ( ){ / /... i f( a r g s! =n u l l... ){ / /... } e l s e{/ /s in os eh ai n t r o d u c i d oe la r g u m e n t ot t u l od e ll i b r of i n a l i z a S y s t e m . o u t . p r i n t l n ( " N os eh ae s p e c i f i c a d oe lt t u l od e ll i b r o " ) ; d o D e l e t e ( ) ; / /l l a m a d aa lm t o d op a r al ad e s t r u c c i nd e la g e n t e } } p r o t e c t e dv o i dt a k e D o w n ( ){/ / a u s ed e f i n e nl a so p e r a c i o n e sd el i m p i e z a S y s t e m . o u t . p r i n t l n ( " A g e n t ec o m p r a d o r" + g e t A I D ( ) . g e t N a m e ( ) + "t e r m i n a n d o . " ) ;/ /s l or e a l i z au n ad e s p e d i d a } / /...r e s t od e lc d i g o }

1.5.3.2 Detalle de la terminacin del Agente BookSellerAgent del ejemplo booktrading

/ /... r d e n e sp a c k a g eei m p o r t p u b l i cc l a s sB o o k S e l l e r A g e n te x t e n d sA g e n t{ / /... p r o t e c t e dv o ds e t u p ( ){ / /... } p r o t e c t e dv o i dt a k e D o w n ( ){ / /A q u s ep o n e nl a so p e r a c i o n e sd el i m p i e z ad er e c u r s o s t r y{ D F S e r v i c e . d e r e g i s t e r ( t h i s ) ;/ /I n t e n t ad a r s ed eb a j ad e lr e s g i t r od el a sp g i n a sa m a r i l l a s } c a t c h( F I P A E x c e p t i o nf e ){ f e . p r i n t S t a c k T r a c e ( ) ; / /C a p t u r al ae x c e p c i nF I P A

/ /D i r i g el ae x c e p c i na lt e r m i n a ld es a l i d a } m y G u i . d i s p o s e ( ) ; / /C i e r r al ai n t e r f a zd eu s u a r i o S y s t e m . o u t . p r i n t l n ( " S e l l e r a g e n t" + g e t A I D ( ) . g e t N a m e ( ) + "t e r m i n a t i n g . " ) ;/ /S ed e s p i d e } / /...r e s t od e lc d i g o } / /e lv e n d e d o rn ol l a m ap o rs s o l oa lm t o d od o D e l e t ey aq u es uc o m p o r t a m i e n t oe sc c l i c o / /l al l a m a d aat a k e D o w np o rp a r t ed e lm t o d od o D e l e t es l os ep r o d u c es is ec i e r r al ai n t e r f a zol ac o n s o l a / /D oD e l e t es eu t i l i z ae nl ac l a s eB o o k S e l l e r G u i / /... r d e n e sp a c k a g eei m p o r t p u b l i cc l a s sB o o k S e l l e r G u ie x t e n d sJ F r a m e{ p r i v a t eB o o k e S e l l e r A g e n tm y A g e n t ; / /... B o o k S e l l e r G u i ( B o o k S e l l e r A g e n ta ){ / /c o n s t r u c t o r / /... m y A g e n t=a ; / /... a d d W i n d o w L i s t e n e r( n e wW i n d o w A d a p t e r ( ){ / /c o m p o r t a m i e n t od el av e n t a n ad ei n t e r f a z p u b l i cv o i dw i n d o w C l o s i n g ( W i n d o w E v e n te ){/ /r e c o g ee le v e n t od ec e r r a rl av e n t a n a m y A g e n t . d o D e l e t e ( ) ; / /l l a m a d aa lm t o d oe n c a r g a d od el al i m p i e z a } } ) ; } / /... }

1.6 Identificador de un agente


Para la correcta comunicacin, es necesario que cada agente est identificado de forma nica en la plataforma. Cumpliendo las especificaciones FIPA , cada agente posee un Identificador de Agente (objeto de la clase jade.core.AID), que va a tener la siguiente estructura: nombre_agente@host:puerto/JADE donde: nombre: nombre del agente. host: mquina donde se est ejecutando. puerto: por defecto es el 1099. El mtodo getAID() de la clase Agent devuelve el identificador del agente. i m p o r tj a d e . c o r e . A g e n t ; i m p o r tj a d e . c o r e . A I D ; p u b l i cc l a s sM i A g e n t ee x t e n d sA g e n t{ p r o t e c t e dv o i ds e t u p ( ){ S y s t e m . o u t . p r i n t l n ( " H o l a !E la g e n t e" + g e t A I D ( ) . g e t N a m e ( ) + "e s t l i s t o . " ) ; } } Conociendo el nombre del agente puede obtenerse su AID: S t r i n gN o m b r e a g e n t e=" E l A g e n t e " ; A I Di d=n e wA I D ( N o m b r e a g e n t e ,A I D . I S L O C A L N A M E ) ;

1.7 Paso de argumentos


Se le pueden pasar argumentos a un agente desde la lnea de comandos y/o desde la interfaz grfica. Los argumentos se pueden recuperar usando el mtodo getArguments() de la clase Agent que devuelve un array de objetos (java.lang.Object []).

1.7.1 Detalle de la obtencin de los argumentos en el BookBuyerAgent del ejemplo booktrading

/ /... r d e n e sp a c k a g eei m p o r t p u b l i cc l a s sB o o k B u y e r A g e n te x t e n d sA g e n t{ p r i v a t eS t r i n gt a r g e t B o o k T i t l e ; p r i v a t eA I D [ ]s e l l e r A g e n t s ;

/ /T t u l od e ll i b r oq u es eq u i e r e / /L i s t ad el o sa g e n t e sv e n d e d o r e sd el i b r o sc o n o c i d o s

p r o t e c t e dv o i ds e t u p ( ){ S y s t e m . o u t . p r i n t l n ( " H a l l o !B u y e r a g e n t" + g e t A I D ( ) . g e t N a m e ( ) + "i sr e a d y . " ) ; / /S a l u d oc o m p r a d o r O b j e c t [ ]a r g s=g e t A r g u m e n t s ( ) ; / /O b t i e n el o sa r g u m e n t o sd a d o se nl ai n i c i a l i z a c i nd e lc o m p r a d o r i f( a r g s! =n u l l& &a r g s . l e n g t h>0 ){ / /T i e n eq u eh a b e ra lm e n o su na r g u m e n t o

t a r g e t B o o k T i t l e=( S t r i n g )a r g s [ 0 ] ;/ /O b t i e n ee lt t u l od e ll i b r oac o m p r a rq u es ep a s c o m op r i m e ra r g u m e n t S y s t e m . o u t . p r i n t l n ( " T a r g e tb o o ki s" + t a r g e t B o o k T i t l e ) ; / /v i s u a l i z ae lt t u l oq u eq u i e r ec o m p r a r / /...r e s t od e lc d i g o } } / /c i e r r ed e li f / /c i e r r ed e ls e t u p

/ /...r e s t od e lc d i g o }C i e r r ed el ac l a s eB o o k B u y e r A g e n t

1.7.2 Paso de argumentos en la lnea de comandos


Ejemplo con el agente BookBuyerAgent: j a v aj a d e . B o o tc o n t a i n e ra g e n t e C o m p r a d o r : e x a m p l e s . b o o k T r a d i n g . B o o k B u y e r A g e n t ( l i b r o 1" l i b r o2 "l i b r o 3 )

Nota: Como se puede observar cuando un parmetro es una cadena compuesta por varias palabras, stas deben estar encerradas con comillas (" "). Adems si se qui parmetros stos deben separase mediante un espacio en blanco.

1.7.3 Paso de argumentos desde la interfaz grfica

Los parmetros se pueden indicar desde la interfaz grfica en la ventana de creacin de un nuevo agente. Cada parmetro se separa por un espacio en blanco. Si se qu espacios en blanco debe de encerrarse entre comillas dobles, pero estas comillas dobles sern parte del parmetro recibido.

1.8 Ejercicios
Prctica 1 Introduccin a un SMA en un entorno JADE La finalidad de este ejercicio es aprender a crear un agente JADE y que este realice tareas.

Objetivo: crear 5 agentes, 4 de ellos con nombres de balnearios (ej. Arnoia) y nombre del servicio, lo que ofrecen (ejemplos: SPA, Alojamiento, Alojamiento_Y_SPA), el corresponder con un cliente que desea un listado de los servicios disponibles, (ej. El Balneario Arnoia , ofrece las siguientes posibilidades: Alojamiento_Y_SPA, ).

Para crear estos agentes, sern necesarias dos clases diferentes: una clase para los agentes que ofrecen servicios y otra clase para los agentes que solicitan servicios Los agentes que ofrecen servicios debern realizar las siguientes tareas: Mostrar por pantalla un saludo, su nombre, su AID y su estado. Pasar como argumentos el tipo y nombre de servicio, capturar estos argumentos y asignrselos al servicio. Registrar su servicio en las pginas amarillas. El agente que solicita servicios deber realizar las siguientes tareas: Mostrar por pantalla un saludo, su nombre, su AID y su estado. Buscar y listar los tipos y nombres de los servicios que ofrece un agente determinado y mostrar el AID del agente que ofrece ese servicio. Finalmente los agentes se despiden y eliminan sus registros de las pginas amarillas.

Para realizar el ejercicio se deben seguir los siguientes pasos:

Crear una carpeta llamada "Ejercicio" en "C:\jade\src\examples\". Copiar y pegar el cdigo proporcionado en cada una de las plantillas en un nuevo fichero con nombre igual al de la clase (estos archivos se situarn en la carpeta anteriormente). Completar el cdigo del ejercicio sustituyendo los " ... " por lo que se considere adecuado. Compilar el cdigo desde una consola en el directorio especificado en el primer punto con la sentencia "javac *.java". Abrir una nueva consola para ejecutar el RMA. Lanzar desde consola los 5 agentes que se piden en el ejercicio.

Cdigo para el agente que ofrece servicios (Servicios.java):

/ * I m p l e m e n t a c i nd e la g e n t eq u es er e g i s t r a r c o nu n * s e r v i c i oe nl a sp g i n a sa m a r i l l a s . * / / / C r e a ru n ac a r p e t ad e n t r od ee x a m p l e s( c : \ j a d e \ s r c \ e x a m p l e s )yu b i c a re ne l l at o d o sl o sa r c h i v o sd el ap r c t i c a p a c k a g ee x a m p l e s . E j e r c i c i o ; i m p o r tj a d e . c o r e . A g e n t ; i m p o r tj a d e . d o m a i n . d f ; i m p o r tj a d e . d o m a i n . F I P A A g e n t M a n a g e m e n t . A M S A g e n t D e s c r i p t i o n ; i m p o r tj a d e . d o m a i n . D F S e r v i c e ; i m p o r tj a d e . d o m a i n . F I P A E x c e p t i o n ; i m p o r tj a d e . d o m a i n . F I P A A g e n t M a n a g e m e n t . D F A g e n t D e s c r i p t i o n ; i m p o r tj a d e . d o m a i n . F I P A A g e n t M a n a g e m e n t . S e r v i c e D e s c r i p t i o n ;

p u b l i cc l a s sS e r v i c i o se x t e n d sA g e n t{ / /I N I C I A L I Z A C I O ND E LA G E N T E p r o t e c t e dv o i d. . . . . .( ){ / *V i s u a l i z a rn o m b r e ,A I Dye s t a d od e la g e n t e * / S y s t e m . o u t . p r i n t l n ( " \ n " ) ; S y s t e m . o u t . p r i n t l n ( " E lA g e n t eh as i d oi n i c i a l i z a d o .\ n " ) ; S y s t e m . o u t . p r i n t l n ( " N o m b r ec o m p l e t od e la g e n t e :"+ . . . . . . . . . + " \ n " ) ;/ / O b t e n e re lN o m b r eC o m p l e t od e lA g e n t e S y s t e m . o u t . p r i n t l n ( " A I Du n i c od e la g e n t e :" +. . . . . . . . . ." \ n " ) ; / /O b t e n e re lA I Dd e lA g e n t e S y s t e m . o u t . p r i n t l n ( " E s t a d od e la g e n t e :" +. . . . . . . .+ " \ n " ) ; / / O b t e n e re le s t a d od e lA g e n t e S y s t e m . o u t . p r i n t l n ( " \ n " ) ; / *R e g i s t r a r s ee nl a sp a g i n a sa m a r i l l a s* / D F A g e n t D e s c r i p t i o nd e s c r i p c i o n=n e w. . . . . . . ; S e r v i c e D e s c r i p t i o ns e r v i c i o=n e w. . . . . . . . . . ;

S e r v i c e D e s c r i p t i o ns e r v i c i o=n e w. . . . . . . . . . ; / /C a p t u r a rl o sp a r a m e t r o sp a r aa s i g n a r s e l o sa lt i p oyn o m b r ed e ls e r v i c i o O b j e c t [ ]a r g s=. . . . . . . . ; / /S en e c e s i t a nd o sa r g u m e n t o s,e lp r i m e r os e r e lt i p od es e r v i c i oye ls e g u n d oe ln o m b r ed ed i c h os e r v i c i o i f( a r g s! =n u l l& &a r g s . l e n g t h= =2 ){ S t r i n gt i p o=( S t r i n g )a r g s [ 0 ] ; S t r i n gn o m b r e=( S t r i n g )a r g s [ 1 ] ; . . . . . . ; / / a s i g n a rt i p oa ls e r v i c i o . . . . . . ; / / a s i g n a rn o m b r ea ls e r v i c i o d e s c r i p c i o n . a d d S e r v i c e s ( s e r v i c i o ) ; t r y{ D F S e r v i c e . r e g i s t e r ( t h i s ,. . . . . ) ; / /R e g i s t r a re la g e n t eys ud e s c r i p c i o ne ne lD F } c a t c h( E x c e p t i o nf e ){ f e . p r i n t S t a c k T r a c e ( ) ; } } e l s e { S y s t e m . o u t . p r i n t l n ( " E R R O R :S en e c e s i t a nd o s2a r g u m e n t o s .S eF i n a l i z al aE j e c u c i n . " ) ; . . . . . . ; / /l l a m a d aa lm t o d op a r al ad e s t r u c c i o nd e la g e n t e } }

/ *T E R M I N A RL AE J E C U C I O ND E LA G E N T E* / / /E s t em t o d ol i b e r al o sr e c u r s o sd e la g e n t e p r o t e c t e dv o i dt a k e D o w n ( ){ S y s t e m . o u t . p r i n t l n ( " L i s t a d or e a l i z a d oC o r r e c t a m e n t e .E lA g e n t eC l i e n t e" + g e t A I D ( ) . g e t N a m e ( ) + "T e r m i n a . " ) ; t r y{ D F S e r v i c e . d e r e g i s t e r ( . . . . ) ; / /D e s r e g i s t r a ra la g e n t e }c a t c h( F I P A E x c e p t i o nf e ){ f e . p r i n t S t a c k T r a c e ( ) ; } } }

Cdigo para el agente que solicita servicios (Cliente.java):

/ * I m p l e m e n t a c i nd e la g e n t eq u eb u s c a r s e r v i c i o s * e nl a sp g i n a sa m a r i l l a s . * /

/ / C r e a ru n ac a r p e t ad e n t r od ee x a m p l e s( c : \ j a d e \ s r c \ e x a m p l e s )yu b i c a re ne l l at o d o sl o sa r c h i v o sd el ap r c t i c a p a c k a g ee x a m p l e s . E j e r c i c i o ;

i m p o r tj a d e . c o r e . A I D ; i m p o r tj a d e . c o r e . A g e n t ; i m p o r tj a d e . d o m a i n . d f ; i m p o r tj a d e . d o m a i n . F I P A A g e n t M a n a g e m e n t . A M S A g e n t D e s c r i p t i o n ; i m p o r tj a d e . d o m a i n . D F S e r v i c e ; i m p o r tj a d e . d o m a i n . F I P A E x c e p t i o n ; i m p o r tj a d e . d o m a i n . F I P A A g e n t M a n a g e m e n t . D F A g e n t D e s c r i p t i o n ; i m p o r tj a d e . d o m a i n . F I P A A g e n t M a n a g e m e n t . S e r v i c e D e s c r i p t i o n ; i m p o r tj a v a . u t i l . I t e r a t o r ; p u b l i cc l a s sC l i e n t ee x t e n d sA g e n t{ p r i v a t eA I D [ ]a g e n t e s ;/ / S e r ae la r r a yd o n d es eg u a r d e nl o sa g e n t e se n c o n t r a d o s / /I N I C I A L I Z A C I O ND E LA G E N T E p r o t e c t e dv o i d. . . . .( ){ / *V i s u a l i z a rn o m b r e ,A I Dye s t a d od e la g e n t e * / S y s t e m . o u t . p r i n t l n ( " \ n " ) ; S y s t e m . o u t . p r i n t l n ( " E lA g e n t eh as i d oi n i c i a l i z a d o .\ n " ) ; S y s t e m . o u t . p r i n t l n ( " N o m b r ec o m p l e t od e la g e n t e :"+. . . . . . . + " \ n " ) ;/ / O b t e n e re lN o m b r eC o m p l e t od e lA g e n t e S y s t e m . o u t . p r i n t l n ( " A I Du n i c od e la g e n t e :" +. . . . . . .+ " \ n " ) ; / /O b t e n e re lA I Dd e lA g e n t e S y s t e m . o u t . p r i n t l n ( " E s t a d od e la g e n t e :" +. . . . . . . .+ " \ n " ) ; / / O b t e n e re le s t a d od e lA g e n t e

S y s t e m . o u t . p r i n t l n ( " E s t a d od e la g e n t e :" +. . . . . . . .+ " \ n " ) ; / / O b t e n e re le s t a d od e lA g e n t e S y s t e m . o u t . p r i n t l n ( " \ n " ) ;

D F A g e n t D e s c r i p t i o nd e s c r i p c i o n=n e w. . . . . . . ; S e r v i c e D e s c r i p t i o ns e r v i c i o=n e w. . . . . . . ; / *Q u r e m o so b t e n e rt o d o sl o ss e r c i c i o sq u eh a ye ne lD F , *a s i q u es ea a d eu ns e r v i c i oal ad e s c r i p c i o ns i ne s p e c i f i c a rn o m b r en it i p o * / d e s c r i p c i o n . a d d S e r v i c e s ( . . . . . ) ; / / a a d i re ls e r v i c i oal ad e s c r i p c i o n t r y{ / /O b t e n e re nu na r r a yl a sd e s c r i p c i o n e sd et o d o sl o sa g e n t e sr e g i s t r a d o se ne lD F ,c u y o / /s e r v i c i oc o i n c i d ac o ne la n t e r i o r m e n t ec r e a d o( c u a l q u i e rn o m b r e ,c u a l q u i e rt i p od es e r v i c i o ) . D F A g e n t D e s c r i p t i o n [ ]d e s c r i p c i o n e s=D F S e r v i c e . s e a r c h ( t h i s ,d e s c r i p c i o n ) ; S y s t e m . o u t . p r i n t l n ( " L o sA g e n t e so b t e n i d o ss o nl o ss i g u i e n t e s :\ n " ) ;

/ / O b t e n e rl o sA I Dd el a sd e s c r i p c i o n e s a g e n t e s=n e wA I D [ d e s c r i p c i o n e s . l e n g t h ] ; f o r( i n ti=0 ;i<d e s c r i p c i o n e s . l e n g t h ;+ + i ){ / / g e t N a m e ( )d el ac l a s eD F A g e n t D e s c r i p t i o nd e v u e l v eu nA I D a g e n t e s [ i ]=d e s c r i p c i o n e s [ i ] . g e t N a m e ( ) ; / / g e t N a m e ( )d el ac l a s eA I Dd e v u e l v ee ln o m b r ed e la g e n t e S y s t e m . o u t . p r i n t l n ( a g e n t e s [ i ] . g e t N a m e ( )+"O f r e c el o ss i g u i e n t e ss e r v i c i o s :\ n " ) ; I t e r a t o r < S e r v i c e D e s c r i p t i o n >i t=d e s c r i p c i o n e s [ i ] . g e t A l l S e r v i c e s ( ) ; w h i l e( i t . h a s N e x t ( ) ) { S e r v i c e D e s c r i p t i o ns=i t . n e x t ( ) ; S y s t e m . o u t . p r i n t l n ( "-E lB a l n e a r i o"+s .. . . . . .+" ,o f r e c el a ss i g u i e n t e sp o s i b i l i d a d e s :"+s .. } } } c a t c h( F I P A E x c e p t i o nf e ){ f e . p r i n t S t a c k T r a c e ( ) ; } . . . . . . . . ; / /L l a m a d aa lm t o d op a r ae l i m i n a re la g e n t e }

/ /B o r r a re la g e n t e / /E s t em t o d ol i b e r al o sr e c u r s o sd e la g e n t e p r o t e c t e dv o i d. . . .( ){ S y s t e m . o u t . p r i n t l n ( " L i s t a d or e a l i z a d oC o r r e c t a m e n t e .\ nE lA g e n t eC l i e n t e" + g e t A I D ( ) .. . . . . .+ "T e r m i n a .\ n " ) ; } }

Ayuda Acerca de Blog Precio Privacidad Trminos Apoyo Elevar de categora Contributions to http://programacionjade.wikispaces.com/ are licensed under a Creative Commons Attribution Share-Alike Non-Commercial 3.0 License. Portions not contributed by visitors are Copyright 2014 Tangient LLC

You might also like