An alternative choice is to have the negotiation server do all the work and
communicate booked resources to the service provider.
The ResourceProxy class extends the class Proxy by implementing the
Preference interface. In this way the preferences can be updated in a nego-
tiation. This class is also responsible for making the reservations when the
corresponding negotiation agent notifies a successful negotiation.
The typical usage scenario of the distributed negotiation agent framework
is illustrated in Figure 20.10. The scenario involves three nodes: the client
node on the left side of the figure, the negotiation server node in the middle,
and the service provider node on the right side.
Initially the provider process registers the provider preferences with the
negotiation server. Upon registration the server creates a negotiation agent
that will handle all the negotiations on behalf of the provider.
Then clients can start a negotiation process. When the server receives a
negotiation request from a client for a given provider, it locates the appro-
priate provider agent, then it creates a client negotiation agent that will
represent the client, and finally creates a mediation agent that will manage
the negotiation process.
The provider agent notifies the provider of the progress and result of the
negotiation. On the client side the client agent notifies the client.
The ServerInterface interface defines the operations that are remotely acces-
sible on the negotiation server. The first operation, registerProvider() , registers
a new provider with the server; the second operation allows a client to
request a negotiation with a specific provider. This interface extends Remote
because it has to be remotely accessible.
Figure 20.10 Agent negotiation collaboration diagram