<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Developing Web Client Applications with JaCa-Web</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Mattia Minotti</string-name>
          <email>mattia.minotti@studio.unibo.it</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Andrea Santi</string-name>
          <email>a.santi@unibo.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Alessandro Ricci</string-name>
          <email>a.ricci@unibo.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>DEIS, University of Bologna</institution>
          ,
          <addr-line>Cesena</addr-line>
          ,
          <country country="IT">Italy</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>University of Bologna</institution>
          ,
          <addr-line>Cesena</addr-line>
          ,
          <country country="IT">Italy</country>
        </aff>
      </contrib-group>
      <abstract>
        <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>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>
        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 [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] where we adopted a
Java-based framework called simpA [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] 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>
      <p>
        The value of Agent-Oriented Programming (AOP) [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ] –
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 II. AGENT-ORIENTED PROGRAMMING FOR MAINSTREAM
considering existing agent programming languages (see [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], APPLICATION DEVELOPMENT – THE JaCa APPROACH
[
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] for comprehensive surveys) – whose features are typically An application in JaCa is designed and programmed as
demonstrated by considering AI toy problems such as block a set of agents which work and cooperate inside a
comworlds and alike. Besides this view, we argue that the level mon environment. Programming the application means then
of abstraction introduced by AOP is effective for organizing programming the agents on the one side, encapsulating the
and programming software applications in general, starting logic of control of the tasks that must be executed, and
from those programs that involve aspects related to reactivity, the environment on the other side, as first-class abstraction
asynchronous interactions, concurrency, up to those involving providing the actions and functionalities exploited by the
different degrees of autonomy and intelligence. In that context, agents to do their tasks. It is worth remarking that this is an
an important example is given by Web Client applications, endogenous notion of environment, i.e. the environment here
which share more and more features with desktop applications, is part of the software system to be developed [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ].
combining their better user experience with all the benefits More specifically, in JaCa Jason [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] is adopted as
proprovided by the Web, such as distribution, openness and gramming language to implement and execute the agents and
accessibility. This kind of applications are at the core of the CArtAgO [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] as the framework to program and execute
cloud computing vision. environments.
      </p>
      <p>
        In this paper we show this idea in practice by describing a Being a concrete implementation of an extended version
platform for developing Web Client applications using agent of AgentSpeak(L) [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ], Jason adopts a BDI
(Belief-Desireprogramming technologies, in particular Jason for program- Intention)-based computational model and architecture to
deming agents and CArtAgO for programming the environments fine the structure and behaviour of individual agents. In that,
where agents work. We refer to the integrated use of Jason agents are implemented as reactive planning systems: they run
and CArtAgO as JaCa and its application for building Web continuously, reacting to events (e.g., perceived changes in the
Client application as JaCa-Web. Besides describing the plat- environment) by executing plans given by the programmer.
form, our aim here is to discuss the key points that make 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 [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] – 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.
      </p>
      <p>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.</p>
      <p>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 [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ], [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] and on Jason and CArtAgO open-source
web sites12.
      </p>
      <p>III. PROGRAMMING WEB CLIENT APPLICATIONS WITH</p>
      <p>JaCa</p>
      <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>
      <sec id="sec-1-1">
        <title>A. Programming Future Web Applications: Complexities</title>
        <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 doc3.</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</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>1http://jason.sourceforge.net 2http://cartago.sourceforge.net 3http://docs.google.com</title>
      <p>User
myPage
maxnum 100
nprimes 4
incPrimes</p>
      <p>PrimeSearcher</p>
      <p>PrimeSearcher
Jason</p>
      <p>CArtAgO
Java Virtual Machine</p>
      <p>Browser
checkPrime</p>
      <p>HTTP
numGen
current</p>
      <p>8
nextNum
primeService2</p>
      <p>chcehcekcPkrPi mrimee
JaCa-Web Artifacts</p>
      <p>Web tech
(JavaScript,
LiveConnect, ...)</p>
      <p>RemotePrimeService
by the web application on the client side4. Among the others,
some can have a strong impact on the way an application is
designed: it is the case of the Web Worker mechanism5, 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 messaging6, 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)7,
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
4http://dev.w3.org/html5/spec/
5http://www.whatwg.org/specs/web-workers/current-work/
6http://dev.w3.org/html5/postmsg/
7http://code.google.com/webtoolkit/
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>
      <sec id="sec-2-1">
        <title>B. An Agent-Oriented Programming Approach based on JaCa</title>
        <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. 1). 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
JaCaWeb 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. 1) 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. 2), 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. 3 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 check –
by 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 perceived –
which means that the user pressed the stop button on the Web
page – the agent promptly reacts and stops working, dropping
}</p>
        <p>}
}
}</p>
        <p>}
}</p>
        <p>}
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(){</p>
        <p>Elem el = getElementById("primes_found");
el.setValue(el.intValue()+1);
}
@INTERNAL_OPERATION private void startClicked(){</p>
        <p>signal("start");
}
@INTERNAL_OPERATION private void stopClicked(){</p>
        <p>signal("stop");
}
@INTERNAL_OPERATION private void maxnumChange(){</p>
        <p>updateObsProperty("maxnum",getMaxValue());
}
private int getMaxValue(){</p>
        <p>return getElementById("maxnum").intValue();
public class RemotePrimeService extends HTTPService {
@OPERATION void checkPrime(double n){</p>
        <p>HTTPResponse res =</p>
        <p>doHTTPRequest(serverAddr,"isPrime",n);
if (res.getElem("is_prime").equals("true")){</p>
        <p>signal("is_prime",n);
public class NumGen extends Artifact {
void init(){</p>
        <p>defineObsProperty("current",0);
}
@OPERATION void nextNum(OpFeedbackParam&lt;Integer&gt; res){
int v = getObsProperty("current").intValue();
updateObsProperty("current",++v);
res.set(v);</p>
      </sec>
      <sec id="sec-2-2">
        <title>C. Key points</title>
        <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
&lt;- lookupArtifact("MyPage",Page);
focus(Page);
makeArtifact("primeService1","RemotePrimeService");
makeArtifact("numGen","NumGen").
+start
&lt;- lookupArtifact("primeService1",Serv);
focus(Serv);
lookupArtifact("numGen",NunGen);
focus(NumGen);
!!checkPrimes.
+!checkPrimes
&lt;- nextNum(Num);</p>
        <p>!checkNum(Num).
+!checkNum(Num): maxnum(Max) &amp; Num &lt;= Max
&lt;- checkPrime(Num);</p>
        <p>!checkPrimes.
+!checkNum(Num) &lt;- maxnum(Max) &amp; Num &gt; Max.
+is_prime(Num) &lt;- incPrimes.
+stop &lt;- .drop_intention(checkPrimes).
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>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>IV. A CASE STUDY</title>
      <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, without –
however – 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 solution –
compared to the server-side solution – and the user experience,
providing a reactive user interface and a desktop-like
look-andfeel.</p>
      <sec id="sec-3-1">
        <title>A. Application Design</title>
        <p>The solution includes two kinds of agents (see Fig. 4): 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
ProductDirectory 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 properties – keywords 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
ProductFinder 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>
      </sec>
      <sec id="sec-3-2">
        <title>B. Implementation</title>
        <p>The source code of the application can be consulted on
the JaCa-Web web site8, 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. 5), 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
8http://jaca-web.sourceforge.net
// ProductFinder agent
...
+searchState("start")
&lt;- lookupArtifact("service1",Service);
focus(Service);
!!search.
+!search: keywords(Keywords)
&lt;- requestProducts(Keywords,ProductList);
!processProducts(ProductList,</p>
        <p>ProductsToAdd,</p>
        <p>ProductsToRemove);
addProducts(ProductsToAdd);
removeProducts(ProductsToRemove);
.wait({+keywords(_)},5000,_);
!search.
+searchState("stop")
&lt;- .drop_intention(search).
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>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>V. RELATED WORK</title>
      <p>
        Several frameworks and bridges have been developed to
exploit agent technologies for the development of Web
applications. Main examples are the Jadex Webbridge [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ], JACK
WebBot [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] and the JADE Gateway Agent [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. The Webbridge
Framework enables a seamless integration of the Jadex BDI
agent framework [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] 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 [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </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>
    </sec>
    <sec id="sec-5">
      <title>VI. OPEN ISSUES AND FUTURE WORK</title>
      <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 [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ],
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 [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
      </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 9 or JACK10 – 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 [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. From the very beginning [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], 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
9http://jade.tilab.com
10http://www.agent-software.com
this purpose, existing works such as JASDL [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], will be main
references.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <article-title>[1] JADE gateway agent (JADE 4.0 api)</article-title>
          - http://jade.tilab.com/doc/api/jade/ wrapper/gateway/jadegateway.html.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>Agent</given-names>
            <surname>Oriented Software</surname>
          </string-name>
          <article-title>Pty</article-title>
          .
          <article-title>JACK intelligent agents webbot manual</article-title>
          - http://www.aosgrp.com/documentation/jack/webbot manual web/ index.html#thejackwebbotarchitecture.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>F. L.</given-names>
            <surname>Bellifemine</surname>
          </string-name>
          , G. Caire, and
          <string-name>
            <given-names>D.</given-names>
            <surname>Greenwood</surname>
          </string-name>
          .
          <article-title>Developing Multi-Agent Systems with JADE</article-title>
          . Wiley,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>T.</given-names>
            <surname>Berners-Lee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hendler</surname>
          </string-name>
          , and
          <string-name>
            <given-names>O.</given-names>
            <surname>Lassila</surname>
          </string-name>
          .
          <source>The Semantic Web. Scientific American</source>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>R.</given-names>
            <surname>Bordini</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Dastani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Dix</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A. E. F.</given-names>
            <surname>Seghrouchni</surname>
          </string-name>
          , editors.
          <source>MultiAgent Programming: Languages, Platforms and Applications</source>
          (vol.
          <volume>1</volume>
          ). Springer,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>R.</given-names>
            <surname>Bordini</surname>
          </string-name>
          , J. Hu¨bner, and
          <string-name>
            <given-names>M.</given-names>
            <surname>Wooldridge</surname>
          </string-name>
          .
          <article-title>Programming Multi-Agent Systems in AgentSpeak Using Jason</article-title>
          . John Wiley &amp; Sons, Ltd,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>R. H.</given-names>
            <surname>Bordini</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Dastani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Dix</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>El Fallah</surname>
          </string-name>
          Seghrouchni, editors.
          <source>Multi-Agent Programming: Languages, Platforms and Applications</source>
          (vol.
          <volume>2</volume>
          ). Springer Berlin / Heidelberg,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>L.</given-names>
            <surname>Braubach</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Pokahr</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Lamersdorf</surname>
          </string-name>
          .
          <article-title>Extending the capability concept for flexible BDI agent modularization</article-title>
          .
          <source>In Programming MultiAgent Systems</source>
          , volume
          <volume>3862</volume>
          <source>of LNAI</source>
          , pages
          <fpage>139</fpage>
          -
          <lpage>155</lpage>
          . Springer,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>M.</given-names>
            <surname>Dastani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Mol</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Steunebrink</surname>
          </string-name>
          .
          <article-title>Modularity in agent programming languages: An illustration in extended 2APL</article-title>
          .
          <source>In Proceedings of the 11th Pacific Rim Int. Conference on Multi-Agent Systems (PRIMA</source>
          <year>2008</year>
          ), volume
          <volume>5357</volume>
          <source>of LNCS</source>
          , pages
          <fpage>139</fpage>
          -
          <lpage>152</lpage>
          . Springer,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>J.</given-names>
            <surname>Hendler</surname>
          </string-name>
          .
          <article-title>Agents and the Semantic Web</article-title>
          .
          <source>IEEE Intelligent Systems</source>
          ,
          <volume>16</volume>
          (
          <issue>2</issue>
          ):
          <fpage>30</fpage>
          -
          <lpage>37</lpage>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>K.</given-names>
            <surname>Hindriks</surname>
          </string-name>
          .
          <article-title>Modules as policy-based intentions: Modular agent programming in GOAL. In Programming Multi-Agent Systems</article-title>
          , volume
          <volume>5357</volume>
          <source>of LNCS</source>
          , pages
          <fpage>156</fpage>
          -
          <lpage>171</lpage>
          . Springer,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>T.</given-names>
            <surname>Klapiscak</surname>
          </string-name>
          and
          <string-name>
            <given-names>R. H.</given-names>
            <surname>Bordini</surname>
          </string-name>
          . JASDL:
          <article-title>A practical programming approach combining agent and semantic web technologies</article-title>
          .
          <source>In Declarative Agent Languages and Technologies VI</source>
          , volume
          <volume>5397</volume>
          /2009 of LNCS,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>N.</given-names>
            <surname>Madden</surname>
          </string-name>
          and
          <string-name>
            <given-names>B.</given-names>
            <surname>Logan</surname>
          </string-name>
          .
          <article-title>Modularity and compositionality in Jason</article-title>
          .
          <source>In Proceedings of Int. Workshop Programming Multi-Agent Systems (ProMAS</source>
          <year>2009</year>
          ).
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M.</given-names>
            <surname>Minotti</surname>
          </string-name>
          ,
          <string-name>
            <surname>G.</surname>
          </string-name>
          <article-title>Piancastelli, and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Ricci</surname>
          </string-name>
          .
          <article-title>An agent-based programming model for developing client-side concurrent web 2.0 applications</article-title>
          . In J. Filipe and J. Cordeiro, editors,
          <source>Web Information Systems and Technologies</source>
          , volume
          <volume>45</volume>
          <source>of Lecture Notes in Business Information Processing</source>
          . Springer Berlin Heidelberg,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>A.</given-names>
            <surname>Omicini</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Ricci</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Viroli</surname>
          </string-name>
          .
          <article-title>Artifacts in the A&amp;A meta-model for multi-agent systems</article-title>
          . Autonomous Agents and
          <string-name>
            <surname>Multi-Agent</surname>
            <given-names>Systems</given-names>
          </string-name>
          ,
          <volume>17</volume>
          (
          <issue>3</issue>
          ), Dec.
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>A.</given-names>
            <surname>Pokahr</surname>
          </string-name>
          and
          <string-name>
            <surname>L. Braubach.</surname>
          </string-name>
          <article-title>The webbridge framework for building web-based agent applications</article-title>
          . pages
          <fpage>173</fpage>
          -
          <lpage>190</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>A.</given-names>
            <surname>Pokahr</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Braubach</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Lamersdorf</surname>
          </string-name>
          .
          <article-title>Jadex: A BDI reasoning engine</article-title>
          . In R. Bordini,
          <string-name>
            <given-names>M.</given-names>
            <surname>Dastani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Dix</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A. E. F.</given-names>
            <surname>Seghrouchni</surname>
          </string-name>
          , editors,
          <source>Multi-Agent Programming</source>
          . Kluwer,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>A. S.</given-names>
            <surname>Rao</surname>
          </string-name>
          . Agentspeak(l):
          <article-title>Bdi agents speak out in a logical computable language</article-title>
          .
          <source>In MAAMAW '96: Proceedings of the 7th European workshop on Modelling autonomous agents in a multi-agent world : agents breaking away</source>
          , pages
          <fpage>42</fpage>
          -
          <lpage>55</lpage>
          , Secaucus, NJ, USA,
          <year>1996</year>
          . Springer-Verlag New York, Inc.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ricci</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Piunti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L. D.</given-names>
            <surname>Acay</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Bordini</surname>
          </string-name>
          , J. Hu¨bner, and
          <string-name>
            <given-names>M.</given-names>
            <surname>Dastani</surname>
          </string-name>
          .
          <article-title>Integrating artifact-based environments with heterogeneous agentprogramming platforms</article-title>
          .
          <source>In Proceedings of 7th International Conference on Agents and Multi Agents Systems (AAMAS08)</source>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ricci</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Piunti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Viroli</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Omicini</surname>
          </string-name>
          .
          <article-title>Environment programming in CArtAgO</article-title>
          . In R. H.
          <string-name>
            <surname>Bordini</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Dastani</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Dix</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>El</surname>
          </string-name>
          Fallah-Seghrouchni, editors,
          <source>Multi-Agent Programming: Languages, Platforms and Applications</source>
          , Vol.
          <volume>2</volume>
          , pages
          <fpage>259</fpage>
          -
          <lpage>288</lpage>
          . Springer,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ricci</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Santi</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Piunti</surname>
          </string-name>
          .
          <article-title>Action and perception in multi-agent programming languages: From exogenous to endogenous environments</article-title>
          .
          <source>In Proceedings of the International Workshop on Programming MultiAgent Systems (ProMAS'10)</source>
          , Toronto, Canada,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ricci</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Viroli</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Omicini. The</surname>
          </string-name>
          <string-name>
            <surname>A</surname>
          </string-name>
          &amp;
          <article-title>A programming model &amp; technology for developing agent environments in MAS</article-title>
          . In M. Dastani,
          <string-name>
            <given-names>A.</given-names>
            <surname>El Fallah Seghrouchni</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Ricci</surname>
          </string-name>
          , and M. Winikoff, editors,
          <source>Programming Multi-Agent Systems</source>
          , volume
          <volume>4908</volume>
          <source>of LNAI</source>
          , pages
          <fpage>91</fpage>
          -
          <lpage>109</lpage>
          . Springer Berlin / Heidelberg,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ricci</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Viroli</surname>
          </string-name>
          , and
          <string-name>
            <surname>G. Piancastelli.</surname>
          </string-name>
          <article-title>simpA: A simple agent-oriented Java extension for developing concurrent applications</article-title>
          . In M. Dastani,
          <string-name>
            <given-names>A. E. F.</given-names>
            <surname>Seghrouchni</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Leite</surname>
          </string-name>
          , and P. Torroni, editors,
          <source>Languages, Methodologies and Development Tools for Multi-Agent Systems</source>
          , volume
          <volume>5118</volume>
          <source>of LNAI</source>
          , pages
          <fpage>176</fpage>
          -
          <lpage>191</lpage>
          , Durham, UK,
          <year>2007</year>
          . Springer-Verlag.
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Shoham</surname>
          </string-name>
          .
          <article-title>Agent-oriented programming</article-title>
          .
          <source>Artificial Intelligence</source>
          ,
          <volume>60</volume>
          (
          <issue>1</issue>
          ):
          <fpage>51</fpage>
          -
          <lpage>92</lpage>
          ,
          <year>1993</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>