JORAM directly benefits from the cutting-edge technology used to implement the platform. This technology and the way it is used in JORAM are briefly presented in this section.
The experience drawn from many years of research in distributed computing has led us to adopt an approach based on distributed intelligence for the design of distributed applications. Bringing data handling near data sources allows the computing load to be balanced between the computing resources available on the network, and enables bandwidth reduction as only pertinent pre-handled data is transported on the network. This basic design principle is implemented through a programming model and run-time environment described below.
Agents are distributed Java objects that communicate through message passing. An agent body is defined by a Java class that inherits from a pre-defined class “Agent” (i.e. describing the generic behavior of an Agent object).
Agents conform to an “Event-React” programming model. An event is the notification of a typed message that turns into the execution of a method of the object class (the “reaction”). This method may in turn generate new events handled by other agents. A “Reaction” is atomic (i.e. “all or nothing” property) and the state of an agent is persistent.
Agents are lightweight entities that share a hosting environment called an “Agent Server”. Agent servers are configurable run-time structures that implement various behavior policies for agents (e.g. atomicity and persistency).
At the heart of the agent server an engine controls the agent execution flow. This single flow runs as a loop that executes the reaction in an atomic way.
The Channel component is responsible for event transmission to the target agent server. The cooperation between server channels implements the distributed message bus. This bus provides the communication path between agents, running in the same server or hosted by different servers (in the same machine or in different machines).
Each local bus is composed of two parts: a channel and a set of network components.