Software Architecture
The Submarine server is based on a very simple architecture where the core elements are driving what I call external connectors. A connector is the implementation of one of the main interfaces giving a special service.
The following diagram shows the core components.

Submarine server is handled by a class called EAISystem. This class implements two interfaces Submiter and ConnectorControler and drives the channels classes and handles the PoolingFunction, the ListeningFunction, the Parser and Serializer, the WritingFunction and the Resource interface implementations.

PoolingFunction, ListeningFunction and WritingFunction are all connectors to external systems. But the two first ones are connectors designed to get documents from the system and to submit them to Submarine. WritingFunction is the opposite. It is designed to take the result document of a channel and send it to an underlying system.

The following chapter describes in more details what are those core components but note that all these components except EAISystem have the ability to be configured from an XML element.