<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Developing Web Client Applications with JaCa-Web</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Mattia</forename><surname>Minotti</surname></persName>
							<email>mattia.minotti@studio.unibo.it</email>
							<affiliation key="aff0">
								<orgName type="institution">University of Bologna Cesena</orgName>
								<address>
									<country key="IT">Italy</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Andrea</forename><surname>Santi</surname></persName>
							<email>a.santi@unibo.it</email>
							<affiliation key="aff1">
								<orgName type="department">DEIS</orgName>
								<orgName type="institution">University of Bologna Cesena</orgName>
								<address>
									<country key="IT">Italy</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Alessandro</forename><surname>Ricci</surname></persName>
							<email>a.ricci@unibo.it</email>
							<affiliation key="aff2">
								<orgName type="department">DEIS</orgName>
								<orgName type="institution">University of Bologna Cesena</orgName>
								<address>
									<country key="IT">Italy</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Developing Web Client Applications with JaCa-Web</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">F0BB17672768B712540EA56F1030889E</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T05:55+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>We believe that agent-oriented programming languages and multi-agent programming technologies provide an effective level of abstraction for tackling the design and programming of mainstream software applications, in particular those that involve the management of asynchronous events and concurrency. In this paper we support this claim in practice by discussing the use of a platform integrating two main agent programming technologies -Jason agent programming language and CArtAgO environment programming framework -to the development of Web Client applications. Following the cloud computing perspective, these kinds of applications will more and more replace desktop applications, exploiting the Web infrastructure as a common distributed operating system, raising however challenges that are not effectively tackled -we argue -by mainstream programming paradigms, such as the objectoriented one.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>I. INTRODUCTION</head><p>The value of Agent-Oriented Programming (AOP) <ref type="bibr" target="#b23">[24]</ref> -including Multi-Agent Programming (MAP) -is often remarked and evaluated in the context of Artificial Intelligence (AI) and Distributed AI problems. This is evident, for instance, by considering existing agent programming languages (see <ref type="bibr" target="#b4">[5]</ref>, <ref type="bibr" target="#b6">[7]</ref> for comprehensive surveys) -whose features are typically demonstrated by considering AI toy problems such as block worlds and alike. Besides this view, we argue that the level of abstraction introduced by AOP is effective for organizing and programming software applications in general, starting from those programs that involve aspects related to reactivity, asynchronous interactions, concurrency, up to those involving different degrees of autonomy and intelligence. In that context, an important example is given by Web Client applications, which share more and more features with desktop applications, combining their better user experience with all the benefits provided by the Web, such as distribution, openness and accessibility. This kind of applications are at the core of the cloud computing vision.</p><p>In this paper we show this idea in practice by describing a platform for developing Web Client applications using agent programming technologies, in particular Jason for programming agents and CArtAgO for programming the environments where agents work. We refer to the integrated use of Jason and CArtAgO as JaCa and its application for building Web Client application as JaCa-Web. Besides describing the platform, our aim here is to discuss the key points that make JaCa and -more generally -agent-oriented programming a suitable paradigm for tackling main complexities of software applications, advanced Web applications in this case, that -we argue -are not properly addressed by mainstream programming languages, such as object-oriented ones. In that, this work extends a previous one <ref type="bibr" target="#b13">[14]</ref> where we adopted a Java-based framework called simpA <ref type="bibr" target="#b22">[23]</ref> to this end, replaced in this paper Jason so as to exploit the features provided by strong agency, in particular by the Belief-Desire-Intention (BDI) architecture.</p><p>The remainder of the paper is organised as follows. First, we provide a brief overview of JaCa (Section II) programming model and platform. Then, we discuss the use of JaCa for developing Web Client applications (Section III), remarking the advantages compared to existing state-of-the art approaches. To evaluate the approach we describe the design and implementation of a case study (Section IV), discussing, finally, related work (Section V) and open issues (Section VI).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>II. AGENT-ORIENTED PROGRAMMING FOR MAINSTREAM APPLICATION DEVELOPMENT -THE JaCa APPROACH</head><p>An application in JaCa is designed and programmed as a set of agents which work and cooperate inside a common environment. Programming the application means then programming the agents on the one side, encapsulating the logic of control of the tasks that must be executed, and the environment on the other side, as first-class abstraction providing the actions and functionalities exploited by the agents to do their tasks. It is worth remarking that this is an endogenous notion of environment, i.e. the environment here is part of the software system to be developed <ref type="bibr" target="#b20">[21]</ref>.</p><p>More specifically, in JaCa Jason <ref type="bibr" target="#b5">[6]</ref> is adopted as programming language to implement and execute the agents and CArtAgO <ref type="bibr" target="#b19">[20]</ref> as the framework to program and execute environments.</p><p>Being a concrete implementation of an extended version of AgentSpeak(L) <ref type="bibr" target="#b17">[18]</ref>, Jason adopts a BDI (Belief-Desire-Intention)-based computational model and architecture to define the structure and behaviour of individual agents. In that, agents are implemented as reactive planning systems: they run continuously, reacting to events (e.g., perceived changes in the environment) by executing plans given by the programmer. Plans are courses of actions that agents commit to execute so as to achieve their goals. The pro-active behaviour of agents is possible through the notion of goals (desired states of the world) that are also part of the language in which plans are written. Besides interacting with the environment, Jason agents can communicate by means of speech acts.</p><p>On the environment side, CArtAgO -following the A&amp;A meta-model <ref type="bibr" target="#b14">[15]</ref>, <ref type="bibr" target="#b21">[22]</ref> -adopts the notion of artifact as first-class abstraction to define the structure and behaviour of environments and the notion of workspace as a logical container of agents and artifacts. Artifacts explicitly represent the environment resources and tools that agents may dynamically instantiate, share and use, encapsulating functionalities designed by the environment programmer. In order to be used by the agents, each artifact provides of a usage interface composed by a set of operations and observable properties. Operations correspond to the actions that the artifact makes it available to agents to interact with such a piece of the environment. Operations are executed by the artifact transactionally, and only one operation can be in execution at a time, like in the case of monitors in concurrent programming. Observable properties define the observable state of the artifact, which is represented by a set of information items whose value (and value change) can be perceived by agents as percepts. Besides observable properties, the execution of operations can generate signals perceivable by agents as percepts, too. As a principle of composability, artifacts can be assembled together by a link mechanism, which allows for an artifact to execute operations over another artifact. CArtAgO provides a Java-based API to program the types of artifacts that can be instantiated and used by agents at runtime, and then an object-oriented datamodel for defining the data structures in actions, observable properties and events.</p><p>Finally, the notion of workspace is used to define the topology of complex environments, that can be organised as multiple sub-environments, possibly distributed over the network. By default, each workspace contains a predefined set of artifact created at boot time, providing basic actions to manage the set of artifacts in a workspace -for instance, to create, lookup, link together artifacts -to join multiple workspaces, to print message on the console, and so on.</p><p>JaCa integrates Jason and CArtAgO so as to make it seamless the use of artifact-based environments by Jason agents. To this purpose, first, the overall set of external actions that a Jason agent can perform is determined by the overall set of artifacts that are actually available in the workspaces where the agent is working. So, the action repertoire is dynamic and can be changed by agents themselves by creating, disposing artifacts. Then, the overall set of percepts that a Jason agent can observe is given by the observable properties and observable events of the artifacts available in the workspace at runtime. Actually an agent can explicitly select which artifacts to observe, by means of a specific action called focus. By observing an artifact, artifacts' observable properties are directly mapped into beliefs in the belief-base, updated automatically each time the observable property changes its value. So a Jason agent can specify plans reacting to changes to beliefs that concern observable properties or can select plan according to the value of beliefs which refer to observable properties. Artifacts' signals instead are not mapped into the belief base, but processed as non persistent percepts possibly triggering plans-like in the case of message receipt events. Finally, the Jason data-model -essentially based on Prolog terms -is extended to manage also (Java) objects, so as to work with data exchanged by performing actions and processing percepts.</p><p>A full description of Jason language/platform and CArtAgO framework -and their integration -is out of the scope of this paper: the interested reader can find details in literature <ref type="bibr" target="#b19">[20]</ref>, <ref type="bibr" target="#b18">[19]</ref> and on Jason and CArtAgO open-source web sites 12 .</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>III. PROGRAMMING WEB CLIENT APPLICATIONS WITH JaCa</head><p>In this section, we describe how the features of JaCa can be exploited to program complex Web Client applications, providing benefits over existing approaches. First, we sketch the main complexities related to the design and programming of modern and future web applications; then we describe how these are addressed by JaCa-Web, which is a framework on top of JaCa to develop such a kind of applications.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A. Programming Future Web Applications: Complexities</head><p>Due to network speed problems overcoming and machine computational power increasing, the client-side of so-called rich web applications is constantly evolving in terms of complexity. Web Client applications share more and more features with desktop applications in order to combine their better user experience with all Web benefits, such as distribution, openness and accessibility. One of the most important features of Web Client is a new interaction model between the client user interface of a Web browser and the server-side of the application. Such rich Web applications allow the client to send multiple concurrent requests in an asynchronous way, avoiding complete page reload and keeping the user interface live and responding. Periodic activities within the client-side of the applications can be performed in the same fashion, with clear advantages in terms of perceived performance, efficiency and interactivity.</p><p>So the more complex web apps are considered, the more the application logic put on the client side becomes richer, eventually including asynchronous interactions -with the user, with remote services -and possibly also concurrency -due to the concurrent interaction with multiple remote services. This situation is exemplified by cloud computing applications, such as Google doc <ref type="foot" target="#foot_2">3</ref> .</p><p>The direction of decentralizing responsibilities to the client, and eventually improving the capability of working offline, is evident also by considering the new HTML standard 5.0, which enriches the set of API and features that can be used An abstract overview of a JaCa-Web application, referring in particular to the toy example described in the paper. In evidence: (Top) the workspace with the agents (circles) and artifacts (rounded square); among the artifacts, myPage and primeService1 enable and rule the interaction with the external environment sources, namely the human user and the remote HTTP service; (Bottom) the layers composing the JaCa-Web platform, which includes -on top of the Java Virtual Machine and browser/web infrastructure -Jason and CArtAgO sub-system and then a pre-defined library of artifacts (JaCa-Web artifacts) specifically designed for the Web context. by the web application on the client side <ref type="foot" target="#foot_3">4</ref> . Among the others, some can have a strong impact on the way an application is designed: it is the case of the Web Worker mechanism <ref type="foot" target="#foot_4">5</ref> , which makes it possible to spawn background workers running scripts in parallel to their main page, allowing for thread-like operation with message-passing as the coordination mechanism. Another one is cross-document messaging <ref type="foot" target="#foot_5">6</ref> , which defines mechanisms for communicating between browsing contexts in HTML documents.</p><p>Besides devising enabling mechanisms, a main issue is then how to design and program applications of this kind.</p><p>A basic and standard way to realise the client side of web app is to embed in the page scripts written in some scripting language -such as JavaScript. Originally such scripts were meant just to perform check on the inputs and to create visual effects. The problem is that scripting languages -like JavaScript -have not been designed for programming in the large, so using them to organize, design, implements complex programs is hard and error-prone.</p><p>To address the problems related to scripting languages, higher-level approaches have been proposed, based on frameworks that exploit mainstream object-oriented programming languages. A main example is Google Web Toolkit (GWT) <ref type="foot" target="#foot_6">7</ref> , which allows for developing client-side apps with Java. This choice makes it possible to reuse and exploit all the strength of mainstream programming-in-the-large languages that are typically not provided by scripting languages-an example is strong typing. However it does not provide significant improvement for those aspects that are still an issue for OO programming languages, such as concurrency, asynchronous events and interactions, and so on.</p><p>We argue then that these aspects can be effectively captured by adopting an agent-oriented level of abstraction and programmed by exploiting agent-oriented technologies such as JaCa: in next section we discuss this point in detail.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. An Agent-Oriented Programming Approach based on JaCa</head><p>By exploiting JaCa, we directly program the Web Client application as a normal JaCa agent program, composed by a workspace with one or multiple agents working within an artifact-based environment including a set of pre-defined type of artifacts specifically designed for the Web context domain (see Fig. <ref type="figure">1</ref>). Generally speaking, agents are used to encapsulate the logic of control and execution of the tasks that characterise the Web Client app, while artifacts are used to implement the environment needed for executing the tasks, including those coordination artifacts that can ease the coordination of the agents' work. As soon as the page is downloaded by the browser, the application is launched -creating the workspace, the initial set of agents and artifacts.</p><p>Among the pre-defined types of artifact available in the workspace, two main ones are the Page artifact and the HTTPService artifact. Page provides a twofold functionality to agents: (i) to access and change the web page, internally exploiting specific low-level technology to work with the DOM (Document Object Model) object, allowing for dynamically updating its content, structure, and visualisation style; (ii) to make events related to user's actions on the page observable to agents as percepts. An application may either exploit directly Page or define its own extension with specific operations and observable properties linked to the specific content of the page. HTTPService provides basic functionalities to interact with a remote HTTP service, exploiting and hiding the use of sockets and low-level mechanisms. Analogously to Page, this kind of artifact can be used as it is -providing actions to do HTTP requests -or can be extended providing an higher-level application specific usage interface hiding the HTTP level.</p><p>To exemplify the description of these elements and of JaCa-Web programming in the overall, in the following we consider a toy example of Web Client app, in which two agents are used to search for prime numbers up to a maximum value which can specified and dynamically changed by the user through the web page. As soon as an agent finds a new prime number, a field on the the web page reporting the total number of values is updated.</p><p>The environment (shown in Fig. <ref type="figure">1</ref>) includes -besides the artifact representing the page, called here myPage -an artifact called numGen, functioning as a number generator, shared and used by agents to get the numbers to verify, and two artifacts, primeService1 and primeService2, providing the (same) functionality that is verifying if a number is prime. myPage is an instance of MyPage extending the basic Page artifact so as to be application specific, by: (i) defining an observable property maxnum whose value is directly linked to the related input field on the web page; (ii) generating start and stop signals as soon as the page button controls start and stop are pressed; (ii) defining an operation incPrimes that updates the output field of the page reporting the actual number of prime numbers found. numGen is an instance of the NumGen artifact (see Fig. <ref type="figure">2</ref>), which provides an action getNextNum to generate a new number -retrieved as output (i.e. action feedback) parameter. The two prime number service artifacts provide the same usage interface, composed by a checkPrime(num: integer) action, which generates an observable event is_prime(num: integer) if the number is found to be prime. One artifact does the computation locally (LocalPrimeService); the other one, instead -which is an instance of RemotePrimeService, extending the pre-defined HTTPService artifact -provides the functionality by interacting with a remote HTTP service.</p><p>Fig. <ref type="figure" target="#fig_2">3</ref> shows the source code of one of the two agents. After having set up the tools needed to work, the agent waits to perceive a start event generated by the page. Then, it starts working, repeatedly getting a new number to checkby executing a getNextNum -until the maximum number is achieved. The agent knows such a maximum value by means of the maxnum page observable property-which is mapped onto the related agent belief. The agent checks the number by performing the action checkPrime and then reacting to is_prime(Num: integer) event, updating the page by performing incPrimes. If a stop event is perceivedwhich means that the user pressed the stop button on the Web page -the agent promptly reacts and stops working, dropping public class MyPage extends PageArtifact { protected void setup() { defineObsProperty("maxnum",getMaxValue()); //Operation for event propagation linkEventToOp("start","click","startClicked"); linkEventToOp("stop","click","stopClicked"); linkEventToOp("maxnum","change","maxnumChange"); } @OPERATION void incPrimes(){ Elem el = getElementById("primes_found"); its main intention.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>C. Key points</head><p>We have identified three key points that, in our opinion, represent main benefits is adopting agent-oriented programming and, in particular, the JaCa-Web programming model, for developing applications of this kind.</p><p>First, agents are first-class abstractions for mapping possibly concurrent tasks identified at the design level, so reducing the gap from design to implementation. The approach allows for choosing the more appropriate concurrent architecture, allocating more tasks to the same kind of agent or defining multiple kind of agents working concurrently. This allows for easily programming Web Client concurrent applications, that are able to exploit parallel hardware on the client side (such as multi-core architectures). In the example, two agents are used to fairly divide the overall job and work concurrently, !setup. +!setup &lt;-lookupArtifact("MyPage",Page); focus(Page); makeArtifact("primeService1","RemotePrimeService"); makeArtifact("numGen","NumGen").  exploiting the number generator artifact as a coordination tool to share the sequence of numbers. Actually, changing the solution by using a single agent or more than two agents would not require any substantial change in the code.</p><p>A second key point provided by the agent control architecture is the capability of defining task-oriented computational behaviours that straightforwardly integrate the management of asynchronous events generated by the environment -such as the input of the user or the responses retrieved from remote services -and the management of workflows of possibly articulated activities, which can be organized and structured in plans and sub-plans. This makes it possible to avoid the typical problems produced by the use of callbacks to manage events within programs that need -at the same time -to have one or multiple threads of control.</p><p>In the prime searcher agent shown in the example, for instance, on the one hand we use a plan handling the checkPrimes goal to pro-actively search for prime numbers. The plan is structured then into a subgoal checkNum to process the number retrieved by interacting with the number generator. Then, the plan executed to handle this subgoal depends on the dynamic condition of the system: if the number to process is greater than the current value of the maxnum page observable property (i.e. of its related agent belief), then no checks are done and the goal is achieved; otherwise, the number is checked by exploiting a prime service available in the environment and the a new checkPrimes goal is issued to go on exploring the rest of the numbers. The user can dynamically change the value of the maximum number to explore, and this is promptly perceived by the agents which can change then their course of actions accordingly. On the other hand, reactive plans are used to process asynchronous events from the environment, in particular to process incoming results from prime services (plan +is_prime(Num) &lt;-...) and user input to stop the research (plan +stop &lt;-...).</p><p>Finally, the third aspect concerns the strong separation of concerns which is obtained by exploiting the environment as first class abstraction. Jason agents, on the one side, encapsulates solely the logic and control of tasks execution; on the other side, basic low-level mechanisms to interact and exploit the Web infrastructure are wrapped inside artifacts, whose functionalities are seamlessly exploited by agents in terms of actions (operations) and percepts (observable properties and events). Also, application specific artifacts -such as NumGen -can be designed to both encapsulate shared data structures useful for agents' work and regulate their access by agents, functioning as a coordination mechanism.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>IV. A CASE STUDY</head><p>To stress the features of agent-oriented programming and test-drive the capabilities of the JaCa-Web framework, we developed a real-world Web application -with features that go beyond the ones that are typically found in current Web Client app. The application is about searching products and comparing prices from multiple services, a "classic" problem on the Web.</p><p>We imagine the existence of N services that offer product lists with features and prices, codified in some standard machine-readable format. The client-side in the Web application needs to search all services for a product that satisfies a set of user-defined parameters and has a price inferior to a certain user-defined threshold. The client also needs to periodically monitor services so as to search for new offerings of the same product. A new offering satisfying the constraints should be visualised only when its price is more convenient than the currently best price. The client may finish its search and monitoring activities when some user-defined conditions are met-a certain amount of time is elapsed, a product with a price less than a specified threshold is find, or the user interrupts the search with a click on a proper button in the page displayed by the browser. Finally, if such an interruption took place, by pressing another button it must be possible to let the search continue from the point where it was blocked.</p><p>The characteristics of concurrency and periodicity of the activities that the client-side needs to perform make this case study a significant prototype of the typical Web Client application. Typically applications of this kind are realised by implementing all the features on the server side, withouthowever -any support for long-term searching and monitoring capabilities. In the following, we describe a solution based on JaCa-Web, in which responsibilities related to the long-term search and comparison are decentralised into the client side of the application, improving then the scalability of the solutioncompared to the server-side solution -and the user experience, providing a reactive user interface and a desktop-like look-andfeel. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A. Application Design</head><p>The solution includes two kinds of agents (see Fig. <ref type="figure" target="#fig_3">4</ref>): a UserAssistant agent -which is responsible of setting up the application environment and manage interaction with the user -and multiple ProductFinder agents, which are responsible to periodically interact with remote product services to find the products satisfying the user-defined parameters. To aggregate data retrieved from services and coordinate the activities of the UserAssistant and ProductFinder we introduce a Product-Directory artifact, while a MyPage page artifact and multiple instances of ProductService artifacts are used respectively by the UserAssistant and ProductFinder to interact with the user and with remote product services.</p><p>More in detail, the UserAssistant agent is the first agent booted on the client side, and it setups the application environment by creating the ProductDirectory artifact and spawning a number of ProductFinder agents, one for each service to monitor. Then, by observing the MyPage artifact, the agent monitors user's actions and inputs. In particular, the web page provides controls to start, stop the searching process and to specify and change dynamically the keywords related to the product to search, along with the conditions to possibly terminate the process. Page events are mapped onto start and stop observable events generated by MyPage, while specific observable propertieskeywords and termination conditions -are used to make it observable the input information specified by the user.</p><p>The UserAssistant reacts to these observable events and to changes to observable properties, and interacts with Pro-ductFinder agents to coordinate the searching process. The interaction is mediated by the ProductDirectory artifact, which is used and observed by both the UserAssistant and ProductFinders. In particular, this artifact provides a usage interface with operations to: (i) dynamically update the state and modality of the searching process -in particular startSearch and stopSearch to change the value of a searchState observable property -useful to coordinate agents' work -and changeBasePrice, changeKeywords to change the value of the base price and the keywords describing the product, which are stored in a keyword observable property; (ii) aggregate product information found by ProductFinders -in particular addProducts, removeProducts, clearAllProducts to respectively add and remove a product, and remove all products found so far. Besides searchState and keywords, the artifact has further observable properties, bestProduct, to store and make it observable the best product found so far.</p><p>Finally, each ProductFinders periodically interact with a remote product service by means of a private ProductService artifact, which extends a HTTPService artifact providing an operation (requestProducts) to directly perform highlevel product-oriented requests, hiding the HTTP level.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. Implementation</head><p>The source code of the application can be consulted on the JaCa-Web web site <ref type="foot" target="#foot_7">8</ref> , where the interested reader can find also the address of a running instance that can be used for tests. Here we just report a snippet of the ProductFinder agents' source code (Fig. <ref type="figure" target="#fig_4">5</ref>), with in evidence (i) the plans used by the agent to react to changes to the search state property perceived from the ProductDirectory artifact -adding and removing a new search goal, and (ii) the plan used to achieve that goal, first getting the product list by means of the requestProducts operation and then updating the ProductDirectory accordingly by adding new products and removing products no more available. It is worth noting the use of the keywords belief -related to the keywords  observable property of the ProductDirectory artifact -in the context condition of the plan to automatically retrieve and exploit updated information about the product to search.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>V. RELATED WORK</head><p>Several frameworks and bridges have been developed to exploit agent technologies for the development of Web applications. Main examples are the Jadex Webbridge <ref type="bibr" target="#b15">[16]</ref>, JACK WebBot <ref type="bibr" target="#b1">[2]</ref> and the JADE Gateway Agent <ref type="bibr" target="#b0">[1]</ref>. The Webbridge Framework enables a seamless integration of the Jadex BDI agent framework <ref type="bibr" target="#b16">[17]</ref> with JSP technology, combining the strength of agent-based computing with Web interactions. In particular, the framework extends the the Model 2 architecture -which brings the Model-View-Controller (MVC) pattern in the context of Web application development -to include also agents, replacing the controller with a bridge to an agent application, where agents react to user requests. JACK WebBot is a framework on top of the JACK BDI agent platform which supports the mapping of HTTP requests to JACK event handlers, and the generation of responses in the form of HTML pages. Using WebBot, you can implement a web application which makes use of JACK agents to dynamically generate web pages in response to user input. Finally, the JADE Gateway Agent is a simple interface to connect any Java non-agent application -including Web Applications based on Servlets and JSP -to an agent application running on the JADE platform <ref type="bibr" target="#b2">[3]</ref>.</p><p>All these approaches explore the use of agent technologies on the server side of Web Applications, while in our work we focus on the client side, which is what characterises Web 2.0 applications. So -roughly speaking -our agents are running not on a Web server, but inside the Web browser, so in a fully decentralized fashion. Indeed, these two views can be combined together so as to frame an agent-based way to conceive next generation Web applications, with agents running on both the client and server side.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>VI. OPEN ISSUES AND FUTURE WORK</head><p>Besides the advantages described in previous sections, the application of current agent programming technologies to the development of concrete software systems such as Web Client applications have been useful to focus some main weaknesses that these technologies currently have to this end. Here we have identified three general issues that will be subject of future work:</p><p>(i) Devising of a notion of type for agents and artifacts -current agent programming languages and technologies lack of a notion of type as the one found in mainstream programming languages and this makes the development of large system hard and error-prone. This would make it possible to detect many errors at compile time, allowing for strongly reducing the development time and enhancing the safety of the developed system. In JaCa we have a notion of type just for artifacts: however it is based on the lower OO layer and so not expressive enough to characterise at a proper level of abstraction the features of environment programming.</p><p>(ii) Improving modularity in agent definition -this is a main issue already recognised in the literature <ref type="bibr" target="#b7">[8]</ref>, <ref type="bibr" target="#b8">[9]</ref>, <ref type="bibr" target="#b10">[11]</ref>, where constructs such as capabilities have been proposed to this end. Jason still lacks of a construct to properly modularise and structure the set of plans defining an agent's behaviour-a recent proposal is described here <ref type="bibr" target="#b12">[13]</ref>.</p><p>(iii) Improving the integration with the OO layer -To represent data structures, Jason -as well as the majority of agent programming languages -adopts Prolog terms, which are very effective to support mechanisms such as unification, but quite weak -from an abstraction and expressiveness point of view -to deal with complex data structures. Main agent frameworks (not languages) in Agent-Oriented Software Engineering contexts -such as Jade<ref type="foot" target="#foot_8">9</ref> or JACK <ref type="foot" target="#foot_9">10</ref> -adopt object-oriented data models, typically exploiting the one of existing OO languages (such as Java). By integrating Jason with CArtAgO, we introduced a first support to work with an object-oriented data model, in particular to access and create objects that are exchanged as parameters in actions/percepts. However, it is just a first integration level and some important aspects -such as the use of unification with object-oriented data structures -are still not tackled.</p><p>Finally, the use of agents to represent concurrent and interoperable computational entities already sets the stage for a possible evolution of Web Client applications into Semantic Web applications <ref type="bibr" target="#b3">[4]</ref>. From the very beginning <ref type="bibr" target="#b9">[10]</ref>, research activity on the Semantic Web has always dealt with intelligent agents capable of reasoning on machine-readable descriptions of Web resources, adapting their plans to the open Internet environment in order to reach a user-defined goal, and negotiating, collaborating, and interacting with each other during their activities. So, a main future work accounts for extending the JaCa-Web platform with Semantic Web technologies: to this purpose, existing works such as JASDL <ref type="bibr" target="#b11">[12]</ref>, will be main references.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head></head><label></label><figDesc>Fig.1. An abstract overview of a JaCa-Web application, referring in particular to the toy example described in the paper. In evidence: (Top) the workspace with the agents (circles) and artifacts (rounded square); among the artifacts, myPage and primeService1 enable and rule the interaction with the external environment sources, namely the human user and the remote HTTP service; (Bottom) the layers composing the JaCa-Web platform, which includes -on top of the Java Virtual Machine and browser/web infrastructure -Jason and CArtAgO sub-system and then a pre-defined library of artifacts (JaCa-Web artifacts) specifically designed for the Web context.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head></head><label></label><figDesc>(Num): maxnum(Max) &amp; Num &lt;= Max &lt;-checkPrime(Num); !checkPrimes. +!checkNum(Num) &lt;-maxnum(Max) &amp; Num &gt; Max. +is_prime(Num) &lt;-incPrimes. +stop &lt;-.drop_intention(checkPrimes).</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Fig. 3 .</head><label>3</label><figDesc>Fig. 3. Jason source code of a prime searcher agent.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Fig. 4 .</head><label>4</label><figDesc>Fig. 4. The architecture of the client-side Web application sample in terms of agent, artifacts, and their interactions. UA is the UserAgent, PFs are the ProductFinder agents, PD is the ProductDirectory artifact and finally Services are the ProductService artifacts</figDesc><graphic coords="6,74.67,54.01,462.64,201.50" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_4"><head>Fig. 5 .</head><label>5</label><figDesc>Fig. 5. A snippet of ProductFinder agent's plans.</figDesc></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">http://jason.sourceforge.net</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_1">http://cartago.sourceforge.net</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="3" xml:id="foot_2">http://docs.google.com</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_3">http://dev.w3.org/html5/spec/</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="5" xml:id="foot_4">http://www.whatwg.org/specs/web-workers/current-work/</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="6" xml:id="foot_5">http://dev.w3.org/html5/postmsg/</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="7" xml:id="foot_6">http://code.google.com/webtoolkit/</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="8" xml:id="foot_7">http://jaca-web.sourceforge.net</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="9" xml:id="foot_8">http://jade.tilab.com</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="10" xml:id="foot_9">http://www.agent-software.com</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<ptr target="http://jade.tilab.com/doc/api/jade/wrapper/gateway/jadegateway.html" />
		<title level="m">JADE gateway agent (JADE 4.0 api</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<ptr target="http://www.aosgrp.com/documentation/jack/webbotmanualweb/index.html#thejackwebbotarchitecture" />
		<title level="m">JACK intelligent agents webbot manual</title>
				<imprint/>
	</monogr>
	<note>Agent Oriented Software Pty</note>
</biblStruct>

<biblStruct xml:id="b2">
	<monogr>
		<title level="m" type="main">Developing Multi-Agent Systems with JADE</title>
		<author>
			<persName><forename type="first">F</forename><forename type="middle">L</forename><surname>Bellifemine</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Caire</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Greenwood</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2007">2007</date>
			<publisher>Wiley</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<title level="m" type="main">The Semantic Web</title>
		<author>
			<persName><forename type="first">T</forename><surname>Berners-Lee</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Hendler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Lassila</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2001">2001</date>
			<publisher>Scientific American</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<monogr>
		<title level="m">Multi-Agent Programming: Languages, Platforms and Applications</title>
				<editor>
			<persName><forename type="first">R</forename><surname>Bordini</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Dastani</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><surname>Dix</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">A</forename><forename type="middle">E F</forename><surname>Seghrouchni</surname></persName>
		</editor>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2005">2005</date>
			<biblScope unit="volume">1</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<monogr>
		<title level="m" type="main">Programming Multi-Agent Systems in AgentSpeak Using Jason</title>
		<author>
			<persName><forename type="first">R</forename><surname>Bordini</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Hübner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Wooldridge</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2007">2007</date>
			<publisher>John Wiley &amp; Sons, Ltd</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<monogr>
		<title level="m">Multi-Agent Programming: Languages, Platforms and Applications</title>
				<editor>
			<persName><forename type="first">R</forename><forename type="middle">H</forename><surname>Bordini</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Dastani</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><surname>Dix</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">A</forename><forename type="middle">El</forename><surname>Fallah</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Seghrouchni</forename></persName>
		</editor>
		<meeting><address><addrLine>Berlin / Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="volume">2</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Extending the capability concept for flexible BDI agent In Programming Multi-Agent Systems</title>
		<author>
			<persName><forename type="first">L</forename><surname>Braubach</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Pokahr</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Lamersdorf</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">LNAI</title>
		<imprint>
			<biblScope unit="volume">3862</biblScope>
			<biblScope unit="page" from="139" to="155" />
			<date type="published" when="2005">2005</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Modularity in agent programming languages: An illustration in extended 2APL</title>
		<author>
			<persName><forename type="first">M</forename><surname>Dastani</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Mol</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Steunebrink</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 11th Pacific Rim Int. Conference on Multi-Agent Systems (PRIMA 2008)</title>
				<meeting>the 11th Pacific Rim Int. Conference on Multi-Agent Systems (PRIMA 2008)</meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="volume">5357</biblScope>
			<biblScope unit="page" from="139" to="152" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Agents and the Semantic Web</title>
		<author>
			<persName><forename type="first">J</forename><surname>Hendler</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Intelligent Systems</title>
		<imprint>
			<biblScope unit="volume">16</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="30" to="37" />
			<date type="published" when="2001">2001</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Modules as policy-based intentions: Modular agent programming in GOAL</title>
		<author>
			<persName><forename type="first">K</forename><surname>Hindriks</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Programming Multi-Agent Systems</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="volume">5357</biblScope>
			<biblScope unit="page" from="156" to="171" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">JASDL: A practical programming approach combining agent and semantic web technologies</title>
		<author>
			<persName><forename type="first">T</forename><surname>Klapiscak</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">H</forename><surname>Bordini</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Declarative Agent Languages and Technologies VI</title>
				<imprint>
			<date type="published" when="2009">2009. 2009</date>
			<biblScope unit="volume">5397</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Modularity and compositionality in Jason</title>
		<author>
			<persName><forename type="first">N</forename><surname>Madden</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Logan</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of Int. Workshop Programming Multi-Agent Systems</title>
				<meeting>Int. Workshop Programming Multi-Agent Systems<address><addrLine>ProMAS</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2009">2009. 2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">An agent-based programming model for developing client-side concurrent web 2.0 applications</title>
		<author>
			<persName><forename type="first">M</forename><surname>Minotti</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Piancastelli</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Ricci</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Web Information Systems and Technologies</title>
		<title level="s">Lecture Notes in Business Information Processing</title>
		<editor>
			<persName><forename type="first">J</forename><surname>Filipe</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><surname>Cordeiro</surname></persName>
		</editor>
		<meeting><address><addrLine>Berlin Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="volume">45</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Artifacts in the A&amp;A meta-model for multi-agent systems</title>
		<author>
			<persName><forename type="first">A</forename><surname>Omicini</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Ricci</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Viroli</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Autonomous Agents and Multi-Agent Systems</title>
		<imprint>
			<biblScope unit="volume">17</biblScope>
			<biblScope unit="issue">3</biblScope>
			<date type="published" when="2008-12">Dec. 2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<monogr>
		<title level="m" type="main">The webbridge framework for building web-based agent applications</title>
		<author>
			<persName><forename type="first">A</forename><surname>Pokahr</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Braubach</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="173" to="190" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Jadex: A BDI reasoning engine</title>
		<author>
			<persName><forename type="first">A</forename><surname>Pokahr</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Braubach</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Lamersdorf</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Multi-Agent Programming</title>
				<editor>
			<persName><forename type="first">R</forename><surname>Bordini</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Dastani</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><surname>Dix</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">A</forename><forename type="middle">E F</forename><surname>Seghrouchni</surname></persName>
		</editor>
		<imprint>
			<publisher>Kluwer</publisher>
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Agentspeak(l): Bdi agents speak out in a logical computable language</title>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">S</forename><surname>Rao</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 7th European workshop on Modelling autonomous agents in a multi-agent world : agents breaking away</title>
				<meeting>the 7th European workshop on Modelling autonomous agents in a multi-agent world : agents breaking away<address><addrLine>Secaucus, NJ, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Springer-Verlag New York, Inc</publisher>
			<date type="published" when="1996">1996</date>
			<biblScope unit="page" from="42" to="55" />
		</imprint>
	</monogr>
	<note>MAAMAW &apos;96</note>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Integrating artifact-based environments with heterogeneous agentprogramming platforms</title>
		<author>
			<persName><forename type="first">A</forename><surname>Ricci</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Piunti</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">D</forename><surname>Acay</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Bordini</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Hübner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Dastani</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of 7th International Conference on Agents and Multi Agents Systems (AAMAS08)</title>
				<meeting>7th International Conference on Agents and Multi Agents Systems (AAMAS08)</meeting>
		<imprint>
			<date type="published" when="2008">2008</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Environment programming in CArtAgO</title>
		<author>
			<persName><forename type="first">A</forename><surname>Ricci</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Piunti</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Viroli</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Omicini</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Multi-Agent Programming: Languages, Platforms and Applications</title>
				<editor>
			<persName><forename type="first">R</forename><forename type="middle">H</forename><surname>Bordini</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Dastani</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><surname>Dix</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">A</forename><forename type="middle">El</forename><surname>Fallah-Seghrouchni</surname></persName>
		</editor>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="volume">2</biblScope>
			<biblScope unit="page" from="259" to="288" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<analytic>
		<title level="a" type="main">Action and perception in multi-agent programming languages: From exogenous to endogenous environments</title>
		<author>
			<persName><forename type="first">A</forename><surname>Ricci</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Santi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Piunti</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the International Workshop on Programming Multi-Agent Systems (ProMAS&apos;10)</title>
				<meeting>the International Workshop on Programming Multi-Agent Systems (ProMAS&apos;10)<address><addrLine>Toronto, Canada</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<analytic>
		<title level="a" type="main">The A&amp;A programming model &amp; technology for developing agent environments in MAS</title>
		<author>
			<persName><forename type="first">A</forename><surname>Ricci</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Viroli</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Omicini</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Programming Multi-Agent Systems</title>
				<editor>
			<persName><forename type="first">M</forename><surname>Dastani</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">A</forename><forename type="middle">El</forename><surname>Fallah Seghrouchni</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">A</forename><surname>Ricci</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Winikoff</surname></persName>
		</editor>
		<meeting><address><addrLine>Berlin / Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="volume">4908</biblScope>
			<biblScope unit="page" from="91" to="109" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">simpA: A simple agent-oriented Java extension for developing concurrent applications</title>
		<author>
			<persName><forename type="first">A</forename><surname>Ricci</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Viroli</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Piancastelli</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Languages, Methodologies and Development Tools for Multi-Agent Systems</title>
		<title level="s">LNAI</title>
		<editor>
			<persName><forename type="first">M</forename><surname>Dastani</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">A</forename><forename type="middle">E F</forename><surname>Seghrouchni</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><surname>Leite</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">P</forename><surname>Torroni</surname></persName>
		</editor>
		<meeting><address><addrLine>Durham, UK</addrLine></address></meeting>
		<imprint>
			<publisher>Springer-Verlag</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="volume">5118</biblScope>
			<biblScope unit="page" from="176" to="191" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<analytic>
		<title level="a" type="main">Agent-oriented programming</title>
		<author>
			<persName><forename type="first">Y</forename><surname>Shoham</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Artificial Intelligence</title>
		<imprint>
			<biblScope unit="volume">60</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="51" to="92" />
			<date type="published" when="1993">1993</date>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
