Architecture

HeadQuarter has a modular architecture the consists of the ObjectBus for network transport, a package that deals with the identity of things and a set of predefined subsystems that represent the actual functionality.

HeadQuarter architecture overview

Subsystems

HeadQuarter is contructed of a set of so called 'subsystems'. Subsystems have a designated task and information to maintain. Subsystems are independent of each other.

Real world objects defined by the application share information by assembling data from several subsystems.

Facettes

A certain objects part within each single subsystem is called a facette. So an object e.g. may have a position in the world, which will turn out to be it's location facette within the location subsystem.

Each subsystem stores its facettes in a way that is most appropriate to the problem space. The location subsystem e.g. might apply a spatially indexed structure. Additionally, the strategies or even the protocols used to distribute information over the network are defined by the subsystem itself.

This makes it possible to apply the optimal treatment.

In contrast to other distributed environments, different applications may assemble different sets of facettes to implement its specific view to an object. E.g. a 'radar screen' application might only be interested in the location subsystem. Object type, name, health etc. are of no relevance. Additionally it might no be interested in a certain object but need to enumerate all in a given spatial area. That is a task the location subsystem can perform.

Identity

All facettes of an application object are glued together by a common identity. 'Identity' is a very strong notion within the HeadQuarter architecture. Everything has to be identifyable.

An identity is everything suitable to uniquely identify an object in a certain context. It may be a plain name, a ID, a database query, a network host, a URL.

Identity is one of the key HeadQuarter concepts!

ObjectBus

Subsystems need to transport information over the net. This is the task of the ObjectBus package. Basically, ObjectBus is a messaging system on top of Javas NIO package.