Implementando Padrões de Projeto para Agentes móveis no

Transcription

Implementando Padrões de Projeto para Agentes móveis no
Implementing Mobile Agent Design Patterns in the
JADE framework
Authors
Emerson Ferreira de Araújo Lima
Graduated in the Federal University of Alagoas, Brazil
Mastering in the Federal University of Campina Grande, Brazil
Patrícia Duarte de Lima Machado
PhD in Computer Science. University of Edinburgh, Edinburgh, Scotland
Jorge César Abrantes de Figueiredo
Pos-Doctor. Aarhus Universitet, Aarhus C, Denmark
Flávio Ronison Sampaio
Graduating in the Federal University of Campina Grande, Brazil
Abstract
Mobile Agents are programs that can migrate between different hosts in an
autonomous way, continuing their execution from the point where they stopped before
the migration. An approach that can simplify and improve the development of
applications based on Mobile Agents are the use of Design Patterns – ideas of solutions
for a given problem inside some context. However, despite their potentiality, they have
seldom been used in the development of applications based on Mobile Agents. This is
perhaps due to the lack of information on mobile agent patterns or how complicated it
would be to implement them in a given platform. In this work, we present the
implementation of Design Patterns in the JADE framework, showing the experience and
results obtained. We expect to stimulate the use of these patterns, showing how they can
be implemented and raising interest on the advantages that they can bring.
1. Introduction
Mobile agents are autonomous computer programs that can act in the interest of
an entity, migrating between different network locations, executing tasks locally and
continuing their execution at the point where they stopped before migration [4]. Mobile
agents can also have features like intelligence and ability to cooperate.
The use of mobile agents can bring several advantages to applications and their
users: (1) reducing network traffic, as interactions can be carried out locally,
independently of network latency; (2) asynchronous and decentralised execution,
allowing the user to disconnect from the network when agents are performing a task; (3)
ability to detect changes in the execution environment and react autonomously,
simplifying the development of distributing systems that are more robust and fault
tolerant. One may argue that these advantages can be obtained when using other
paradigms. However, despite this, the great advantage of mobile agents is to combine
these advantages in single and more abstract paradigm [7].
A disadvantage of mobile agents is the need to install a support agent platform at
each host the agents need to visit. Also, in these platforms, agents code is usually
interpreted. This can impact considerably on the performance of systems. In this sense, it
is recommended to avoid moving agents unnecessarily, since this can increase network
traffic. Besides, agents code and data must be as short as possible if we want to achieve
the benefits of the technology [16]. An agent functionality can be factored in a way it
carries exactly what is needed. Information that is not going to be used or can be easily
recovered can be discarded. Furthermore, it is important to mention security. This is a
hard problem that is faced by all technologies of developing distributed systems [3],[19].
The more secure, the lower the performance of the system is.
The use of design patterns is an approach to improve the development process of
applications and the quality of the final products. Some mobile agent design patterns have
already been proposed [1],[11]. However, most of these patterns have not been concretely
implemented yet. In addition, there is not enough concrete information on how they can
be implemented and on whether they are technically feasible when considering a specific
agent platform.
In this paper, we present an experience on implementing mobile agent design
patterns in the JADE platform1, showing that they are feasible. We aim at stimulating
their use when developing applications based on this technology. In order to choose the
agent platform to conduct our experiment, we have used the following criteria: (1) the
platform has to be distributed free of charge and expiration date and in its complete form;
(2) the platform must have compatible versions that run in different operational systems,
like Unix and Windows and their variations for portable devices; (3) the programming
language supported must be JAVA, an object oriented language that is portable, running
in different operating systems and having versions dedicated to minimum hardware
configurations; and (4) support for users such as documentation, forums and discussion
lists as well as a list of reported problems. JADE meets all of these criteria. In addition,
the platform is integrated with the LEAP project2, which offers support for portable
devices, and it is open source. Also, the platform has detailed documentation for
programmers and administrators and an active discussion list.
In the sequel, Section 2 introduces design pattern concepts and motivation for
their use. The mobile agent design patterns considered in this paper are briefly described.
Section 3 presents our experience on implementing the patterns in the JADE framework.
Finally, concluding remarks are presented in Section 4.
1
2
http://jade.cselt.it
http://leap.crm-paris.com/
2. Mobile Agents Design Patterns
Although mobile agents technology has been successfully applied in different
case studies ([2],[12],[5] and [8]), its application in practical scenarios is still restricted.
The well-known methodologies and notations employed in the development of object
oriented applications do not properly address mobility issues. In some notations, as for
example in the AUML3 notation, mobility is considered only at the deployment diagrams
level.
To cope with this limitation, in the last decade, many projects were conducted in
order to incorporate mobility aspects into traditional methodologies. In [18], it is
proposed a method to be applied in the design phase. In [12], UML diagrams extensions
are proposed to incorporate mobility. In [6], a modified software development process
based on the process defined by Larman [15] is presented. This modified process allows
the representation of mobility in the analysis and design phases.
A different approach to increase the usage of mobile agents in real applications is
the definition of design patterns. The basic idea of design patterns is to define general
solution models for common problems found in a given context. In fact, some problems
can be faced many times during different phases of the development process. It would be
worthwhile if good solutions for these problems could be reused instead of the necessity
to develop a new one from scratch. Design patterns make easier the development of
applications, increasing flexibility and promoting reuse.
Design patterns for different problems on mobile agents have been proposed in
[18] and [1]. Despite the importance of these patterns, they have been not largely used in
practice. The lack of a systematic approach in the definition of those patterns, as well as
the inexistence of adequate studies about their implementation in real platforms have
contributed to this scenario. The purpose of this work is to implement a group of design
patterns for mobile agents in the JADE framework. As a result of these implementations,
we expect to improve our understanding on the solutions defined by the patterns, as well
as to verify the feasibility in implementing them.
In the following paragraphs, we describe the design patterns we considered for
implementation.
Itinerary
This pattern, proposed in [18], provides a way to execute the migration of an
agent, which will be responsible for executing a given task in remote hosts. The agent
receives an itinerary on the source agency, indicating the sequence of agencies it should
visit. Once in an agency, the agent executes its task locally and then continues on its
itinerary. After visiting the last agency, the agent go back to its source agency. Figure 1
illustrates this pattern.
3
http://www.auml.org
Figure 1 -
Itinerary Pattern
Star-Shaped
On the Star-Shaped pattern[18], the agent receives a list of agencies that it has to
migrate to. So, it migrates to the first destination agency, where it executes a task, going
back to the source agency. The agent repeats this cycle until visit the last agency on its
list. Figure 2 shows this pattern.
Figure 2 -
Star-Shaped Pattern
Branching
On the Branching pattern [18], the agent receives a list of agencies to visit and
clones itself according to the numbers of agencies in the itinerary. Then, all clones will
visit an agency of the received list. Each clone has to execute its corresponding task and
notify the source agency when the task is completed. The importance of this pattern is
that it splits the tasks that can be executed in parallel. The treatment of the final results is
an issue not covered by this pattern. For instance, the clones can put the result of the task
in a user interface or send it to another agent. This pattern is shown at Figure 3.
Figure 3 -
Branching Pattern
Master-Slave
On the Master-Slave pattern [13], a master agent delegates a task to be done on a
given agency to a slave agent, in order continue executing other tasks that cannot be
interrupted. The slave agent visits the indicated agency, where it accomplishes the task
and then returns to the source agency with the results. The master agent receives the
results from the slave agent. Then, the slave one destroys itself.
MoProxy
On this pattern, proposed in [17], when an agent needs a resource, it requests to
the Resource Granter, indicating the desired permissions. Then, the resource granter
returns a mobile proxy for the agent in order to access the resource with the desired
permissions depending on the restrictions of the resource.
Meeting
The Meeting pattern [13] suggests a way to promote local interactions between
agents distributed on the net. Such interactions make possible the execution of given
tasks, as well as the optimization of results. Then, the MeetingAgent, who will meet
others, has a Meeting object that keeps the place and the identification of the meeting. In
this way, the MeetingAgent requests the Meeting object the place of the meeting and then
migrates to it. A MeetingManager, which is an entity that manages the meeting, is
responsible for notifying the agents located in the meeting place about the arrivals and
exits of new ones. The Meeting object is responsible for intermediating the register of the
agent on the manager.
Facilitator
The Facilitator pattern [13] defines a service that provides a name service and
localization of agents with specific abilities, thus facilitating the localization of a given
agent.
Mutual Itinerary Recording
This pattern ([10]) is a general schema that guarantees the itinerary of a given
agent will be registered and tracked by other cooperative agent and vice-versa, in a
disposal of mutual support. When an agent is moving between platforms, it carries the
information from the last platform, the current and the next ones to the cooperative agent
through an authenticated channel. The agent keeps the register of the itinerary and it
always compares the itinerary that it possesses with the received one. When an
inconsistence is detected it should be treated. For instance, it would either disallow the
agent to visit the platform that caused the inconsistency, or suspend the functioning of an
agent, or send the agent back to the source agency.
3. Design Patterns Implementation
In this section, we present the implementation of the design patterns described
previously. For each of them, we explain the functioning in JADE, emphasizing the
classes we implemented and the JADE framework classes and concepts used.
Itinerary
In our implementation, we defined an ItineraryAgent, whose type is Agent. This
agent initially adds the behaviour Itinerarybehaviour, whose type is OneShotBehaviour,
that sets the itinerary the agent must follow, and then, it starts the migration. The agent
execution is controlled by the methods beforeMove and afterMove, that controls the
migration and allows the execution of the job, respectively. The agent job is implemented
in JobBehaviour (of type OneShotBehahvour) class, added to the agent whenever he
arrives to the new destination. An important detail: before migrating, the agent verifies,
through AMS4, if the destination container exists. If it does not, it tries to migrate to the
next destination in its itinerary. This verification is made by the behaviour
GetAvailableLocationBehaviour, that is available in the example codes provided by the
framework.
Star-Shaped
In this implementation, we defined a StarShapedAgent, of type Agent, that adds
the SetItineraryBehaviour behaviour, identical to the explained in previous pattern. The
functioning of this agent is similar to the ItineraryAgent, being controlled by the methods
beforeMove and afterMove, having the JobBehaviour implementing the task and the class
GetAvailableLocationsBehaviour responsible for verifying the availability of the
destination container.
4
AMS – Agent Management System
Branching
In this pattern, we implemented a BranchingAgent, of type Agent, that adds the
SetItineraryBehaviour, identical to the explained in the Itinerary pattern. Before initiating
the migration, the agent adds the CloneBehaviour behavior, that is responsible for cloning
the agent according to the number of destinations in the itinerary. Each agent verifies,
adding the GetAvailableLocationsBehaviour , if the destination container exists. If it does
not exist, the agent destroys itself. If it exists, clone migrates for one of the destinations in
the itinerary, where it adds the JobBehaviour, and executes the defined task. When it
finishes the task, it returns to the source container, shows the results in the UI5 and
destroys itself.
Master-Slave
Here, a MasterAgent, of type Agent, was implemented. It adds the
ReceiveResultBehaviour, of type CyclicBehaviour, responsible for receiving the messages
destined to the master. Then, master requests to its container the creation of a SlaveAgent,
also of type Agent, passing as parameter the destination of the slave. After being created
and started, the slave initializes the job and migrates. When it arrives in the destination,
the agent adds the JobBehaviour, that executes the defined task, and then returns the
source container, where it sends the results to the master and destroys itself. The results
are sent through ACL messages, and received by the master’s cyclic behavior.
In Figure 4 we have the sequence diagram for this pattern. In the used notation,
we have an object representing the container, and when the agent wants to migrate, it
requests to this object, using an arrow labeled with a move(). Then, the container sends
the agent to the destination container (arrow labeled with a MIGRATING AGENT), that
receives and instantiate the agent, so that it continues the execution in the new container
(arrow labeled with a initialize()). Message interchange is represented by arrows labeled
with a send(“content”).
MoProxy
In this pattern, we defined a MoProxy agent, of type Agent, that is the resources
granter. Then, any agent can send an ACL message to the MoProxy, passing as
parameters the type of resource that it desires to access and the permissions desired.
When it receives the message, MoProxy creates an agent (ResourceAgent) which gives
access to the desired resource, respecting the access restrictions of the resource. Then, it
sends the identification of the ResourceAgent to the agent who requested the resource.
From there, the requester agent starts to interact with the ResourceAgent through ACL
messages and, for this, both agents must add a CyclicBehaviour to receive and to treat the
messages directed to them. The agent must know the types of requests that are available
for that resource and in case that the resource is not available, MoProxy agent returns the
message to the requester agent informing the inexistence of the resource.
5
User Interface
Figure 4 -
Master-Slave pattern Sequence Diagram
Meeting
The implementation of this pattern is illustrated in the sequence diagram shown in
Figure 5, where we use the notation explained previously. As we can see, we defined a
MeetingAgent, of type Agent, that is in a container called SourceContainer. This agent
possesses a Meeting object and requests to it the meeting place (method
getMeetingPlace). Then, the agent migrates to the meeting place (DestinationContainer),
and, after its arrival, it adds the ReceiveMessageBehaviour(CyclicBehaviour), that is
responsible for receiving the messages destined to the MeetingAgent.
In the meeting place there is a MeetingManager, implemented as an agent. It has
the CyclicBehaviour named UpdateMeetingBehaviour, responsible for receiving
messages for the meeting update.
The MeetingAgent requests the Meeting object, to register it in the meeting
(method ready). Then, a message is sent to the MeetingManager, using the capacity of
sending ACL messages of the MeetingAgent. The manager sends the list of
identifications of agents in the meeting for the just-arrived agent, and sends the
identification of the just-arrived agent to all agents in the meeting. From now on, the
MeetingAgent can interchange messages with others agents in the meeting.
When it wants to leave the meeting, the MeetingAgent sends a request to the
Meeting object (method leave). A message is sent to the manager, informing that the
agent is leaving the meeting. The MeetingAgent, then, migrates to another container.
Figure 5 -
Meeting Pattern Sequence Diagram
Facilitator
The implementation of this pattern was simplified, since the platform already
provides a Directory Facilitator (DF) service. To register in the DF the agent must
include in its initialization (method setup) the following piece of code:
try {
ServiceDescription serviceDescription = new ServiceDescription();
serviceDescription.setType("AgentType");
serviceDescription.setName("AgentName");
DFAgentDescription dfd = new DFAgentDescription();
dfd.setName(getAID());
dfd.addServices(serviceDescription);
// register the description with the DF
DFService.register(this, dfd);
System.out.println(getLocalName()+" registered with the DF");
} catch (FIPAException e) {e.printStackTrace();}
Then, we implemented a FacilitatorAgent, of type Agent, that waits for messages
from other agents. When the agent receives a message, it adds the SearchBehaviour
(OneShotBehaviour), that will do the search according to the type defined in the message
and then it returns the results to the requester agent.
Mutual Itinerary Recording
In this pattern implementation, we have two cooperating ItineraryAgent agents.
The functionality is similar to the Itinerary pattern. The difference is that, here, an agent
always sends to the other a message carrying its previous, current and next container.
This message is sent in a safe way using SSL/TLS6. It is necessary, however, to define a
security configuration file, as explained in [21]. In this file the following line must be
added:
imtp=jade.security.impl.RMISSLIMTPManager
To receive the itinerary from the other agent and verify if some problem exists,
the agent adds the CheckItineraryBehaviour (CyclicBehaviour).
4. Conclusions
The use of design patterns has generally increased due to the advantages they can
bring to applications development, like reuse and a better understanding of their project.
These advantages can also be obtained when developing mobile agent-based applications
6
SSL/TLS – Secure Socket Layer/TransportLayer Security
by using mobile agent design patterns. In this sense, several mobile agent patterns have
already been proposed. These patterns present solutions that can be reused, avoiding loss
of time and effort to investigate problems that have already been solved.
In this work, we implemented mobile agent design patterns using the JADE
framework. As mentioned in Section 3, all patterns chosen could be implemented without
major obstacles as long as the developer is familiar with JADE. Indeed some concepts
and tools offered by JADE made the task easier. For instance, the Sniffer Agent helped
testing and debugging. Also, the Directory Facilitator provides the search service
required by the Facilitator pattern.
In general, the behaviour concept is very useful, since it can be dynamically added
to an agent to change its actions and add new functionality. Also, behaviours encapsulate
the actions of agents. For instance, by defining the JobBehaviour class, we were able to
implement the task of the agent separately from the implementation of the agent itself.
Another example is the SetItineraryBehaviour class, where the way of setting the
itinerary can be changed without affecting the corresponding agent. Agent
communication can also be easily implemented by using the behaviour concept.
Another advantage of JADE is the possibility to check whether a destination
agency is available before moving an agent to it. The ACL feature of messages exchange
is also very useful, since it does not require an agent to have concrete references to other
agents in order to be able interact with them. Interaction between agents can be made by
asynchronous messages exchange.
A drawback of JADE is not to provide support to migration between different
execution environments, i.e., it is only possible to migrate agents in the scope of a single
one. Therefore, migration between different hosts is only supported if containers are in
the same platform.
Finally, it is important to remark that most of the patterns considered in this paper
have been proposed in the scope of other agent platforms. This is evidence that the JADE
platform offers support that is comparable to other platforms.
5. References
[1]
Y. Aridor and D.B. Lange. Agent design patterns: Elements of agent application
design. In Proceedings of the Second International Conference on Autonomous
Agents. ACM Press, 1998.
[2]
M.C. Bernardes and E.S. Moreira. Implementation of an intrusion detection
system based on mobile agents. In International Symposium on Software
Engineering for Parallel and Distributed Systems (PDSE 2000). IEEE, 2000.
[3]
D.M. Chess. Security issues in mobile code systems. In Mobile Agents and
Security, 1998.
[4]
A. Fuggeta, G.P. Picco, and G. Vigna. Understanding code mobility.
In IEEE Transactions onSoftware Engineering, volume 24, May 1998.
[5]
R.H. Glitho, E. Olougouna, and S. Pierre. Mobile agents and their use for
information retrieval: A brief overview and an elaborate case study. IEEE
Network, 2002.
[6]
F.P. Guedes. Um modelo para o desenvolvimento de aplicações baseadas em
agentes móveis. Master’s thesis, Universidade Federal de Campina Grande, 2002.
[7]
C.G. Harrison, D.M. Chess, and A. Kershenbaum. Mobile agents: are they a good
idea? Technical Report RC 19887, IBM Thomas J. Watson Research Center,
1995.
[8]
Hayzelden and Bigham, editors. Agents for Future Communication Systems.
Springer, 1999.
[9]
IKv++ GmbH. Grasshopper - A Platform for Mobile Software Agents.
http://www.grasshopper.de, 1998.
[10]
W. Jansen and T. Karygiannis. Mobile agent security. In NIST Special Publication
800-19, 1999.
[11]
E.A. Kendall, P.V.M. Krishna, C.V. Pathak, and C.B. Suresh. Patterns of
intelligent and mobile agents. Proceedings of the 2nd International Conference on
Autonomous Agents (Agents’98), New York, 1998. ACM Press.
[12]
C. Klein, A. Rausch, M. Sihling, and Z. Wen. Extension of the Unified Modeling
Language for mobile agents. In Keng Siau and Terry Halpin, editors, Unified
Modeling Language: Systems Analysis, Design and Development Issues. Idea
Publishing Group, 2001.
[13]
D.B. Lange and M. Oshima. Programming and Deploying Java Mobile Agents
with Aglets. Addison-Wesley, Reading, MA, 1998.
[14]
D.B. Lange and M. Oshima. Seven good reasons for mobile agents.
Communications of theACM, March 1999.
[15]
C. Larman. Applying UML and Patterns - An Introduction to Object-Oriented
Analysis and Design. Prentice Hall, Inc., 1999.
[16]
H. Peine. Application and programming experience with the ara mobile agent
system. Software-Practice and Experience, 2002.
[17]
A.Kr. Singh, R. Sankar, and V. Jamwal. Design patterns for mobile agent
applications.
[18]
Y. Tahara, A. Ohsuga, and S. Honiden. Agent system development method based
on agent patterns. In Proceedings of the 21st international conference on Software
engineering. IEEE Computer Society Press, 1999.
[19]
Y. Tahara, A. Ohsuga, and S. Honiden. Safety and security in mobile agents. In
Draft Proceedings of AOSE2000, 2000.
[20]
Y. Tahara, N. Toshiba, A. Ohsuga, and S. Honiden. Secure and efficient mobile
agent application reuse using patterns. In Proceedings of the 2001 symposium on
Software reusability. ACM Press, 2001.
[21] G. Vitaglione. JADE Security Administrator guide.
http://jade.cselt.it/doc/tutorials/SecurityAdminGuide.pdf, September 2002.