1. Architecture
1.1. Definitions
- System architecture
- method of system decomposition into parts and bind they in the integration.
- System component
- minimal part with all-sufficient functionality. Using both as stand alone and with interaction with another components.
- Interaction
- information change between system parts
- Messages
- interaction mechanism. Message is the structure contains:
- receiver identifier
- sender identifier
- command
- arguments for command
- Transport
- environment of interaction by messages serialized to text
- Event
- object achievement specified state. Event message differs from ordinary message by empty 'receiver identifier'. Therefore message manager will be notified and execute one or more commands from components.
1.2. E/AS Platform
1.2.1 E/AS Platform is multilayer execute core intended for support components operations.
1.2.2 Layers:
- Transport
- MM (message manager)
- ODB (object database)
- Code executor
- UI (interface to external users and devices)
1.2.3 The interaction between layers is performed by passing messages. Interation is allowed only between neighboring layers. Physical placement of the layers doesn't regulated: layers can be placed on one host or on several hosts in any combinations.
1.3. E/AS Platform Architecture

Figure 1. E/AS Platform Architecture
1.3.1 Applicative information system (system) based on E/AS platform contains from couple of interaction components. Each component has multi-layer structure (contains layers in accordance with 1.2.2) and realize defined finctionality on applicative level. Couple of components and their functions is managed by special component named Component manager. Its goals are installation/removing/updating components int the system, lookup installed components and providing information about components and their finctions.
1.3.2 Functions on Code executor layer must use object-oriented language.
1.3.3 The interaction between components is performed by passing messages. There is the Message manager layer in system for this task. Its functions are:
- receive messages from components by transport;
- decoding (deserialization) of these messages;
- lookup target component and command in list of installed components and supported commands;
- execute function binded to specified component/command;
- get result of execution;
- answer serialization;
- send answer message by transport.
1.4. E/AS Component
1.4.1 Each E/AS component contains:
- Formalized definition of data structure (metadata). This definition is stored in the ODB as obect;
- Stored applicative data (object on ODB layer);
- Applicative executable code for realization component functionality (Code executor layer);
- Client UI by XFL forms (UI layer);
- Message handler (Message manager layer);
- Documentation
1.4.2. E/AS component must have ability to serialize itself for move and/or replication to the another aplicative information system.
1.4.3 All data and metadata are performed as objects. These objects can be stored in the ODB or can gotten from other sources via components.
1.4.4 Executable code on Code executor layer can be writted on any high-level programming language. Preferences should be given to language, that supports their code distribution via byte-code.
2. System realization
2.1. Language And Layer Elements
It is suggested to use CLIP language and framework, because it is granted followed conditions:
- simple syntax
- byte-code support
- obect-oriented programming support
- realization of several platform layers (transport, ODB, Code executor, UI)
- OpenSource license
Disadvantages:
- less developers
- weak documentation
- less ready product written on CLIP
2.2. Realization And Components
E/AS platform consists of realization slice (couple of system classes for base functionality) and components.
Base classes specified in 2.3. is named 'core'.
2.3. Classes
| |
Method/Field |
Event |
Description |
|
| EASTransportManager |
| | open() | system.transport.open | Init all EASConnection object and open connections |
| | close() | system.transport.close | Close all connections |
| | connections | system.transport.connections | List of connection (identifiers of EASConnection objects) |
| EASConnection |
| | open() | <id>.open | Init and open connection. For client connections - connect to server, for server connections - open port for accept incoming connections |
| | close() | <id>.close | Close connection |
| | type | <id>.type | Connection type |
| | name | <id>.name | Connection name |
| | serialize() | <id>.serialize | Serialize to text followed structure: type, length, content |
| | deserialize() | <id>.deserialize | Deserialize from text followed structure: type, length, content |
| | sessions | <id>.sessions | List of open sessions (identifiers of EASSession objects) |
| EASSession |
| | open() | - | Open new session. Executed from new session established |
| | close() | <id>.close | Close session |
| | receive() | <id>.receive | Receive new data packet (structure: type, length, content) |
| | send() | <id>.send | Send data packet (structure: type, length, content) |
| | name | <id>.name | Session name. Created automatically on session open |
| | connection | <id>.connection | Identifier of EASConnection object |
| | attributes | <id>.attributes | Information about session (IP, host, etc.) |
| EASMessageManager |
| | open() | system.mm.open | Activate Transport, ODB, Code executor, UI layers |
| | close() | system.mm.close | Deactivate all active layers, program exit |
| | process() | system.mm.process | Process incoming message |
| EASDatabaseManager |
| | open() | system.database.open | Connect to ODB |
| | close() | system.database.close | Disconnect from ODB |
| | execute() | system.database.execute | Execute database operation defined on high-level language (object-oriented SQL) |
| | get() | system.database.get | Get database object contents by object identifier |
| | getAttr() | system.database.getAttr | Get database object attribute content by object identifier and attribute name |
| | databases | system.database.databases | List of databases and depository names |
| EASExecuteManager |
| | open() | system.exec.open | Init Code executor layer |
| | close() | system.exec.close | Close Code executor layer |
| | execute() | system.exec.execute | Execute command |
| | commands() | system.exec.commands | List of components and their commands |
| | connect() | system.exec.connect | Connect system code to event |
| | disconnect() | system.exec.disconnect | Disconnect system code from event |
| EASUIManager |
| | open() | system.ui.open | Init user interface |
| | close() | system.ui.close | Close user interface: close all open forms |
| | openForm() | system.ui.openForm | Get and open specified interface form (UIForm) |
| | closeForm() | system.ui.closeForm | Close form UIForm |
| | forms | system.ui.forms | List of open forms UIForm |
2.4. Functions
setSlot( [<MM>], <event>, <code block> ) — add handler code to event.
setCommand( [<MM>], <object name>, <command>, <code block> ) — connect command for named object and handler code.
sendMessage( [<MM>], [<receiver>], <command/event>, [<arguments as array or object>], [<отправитель>] ) — send message.
3. Platform Work Algorithm
All core classes placed in library libeascore.so.
For platform work one or several executable program will be build with using core E/AS classes (starter).
3.1. Common Program Work
- First object EASTransportManager is created. On its init object of connections (EASConnection) are created based on parameters from config file. There is in EASConnection constructor EASMessageManager object is created and EASMessageManager constructor crete object of EASDatabaseManager, EASExecuteManager, EASUIManager classes.
- Execute method open() of EASConnection object.
- EASMessageManager.open():
- EASDatabaseManager.open(). Open database.
- EASExecuteManager.open(). Read components list.
- Then there is followed algorithm is used:
3.2. Client:
- EASUIManager.open(). Init user interface.
- Interactive request for connection parameters.
- Connect to server via EASConnection.open()
- Open main form via EASUIManager.openForm()
- On event appearance from user these events are translated via EASMessageManager.process() and executed in EASExecuteManager.execute()
- On main interface form EASMessageManager.close() will be executed and all services will be stopped.
3.3. Server:
- EASConnection.open(). Wait new connection.
- On new connection EASSession object will be created and execute its method open().
- On new data packet is received ( EASSession.receive() ):
- deserialization of this packet by EASConnection.deserialize()
- send message via EASMessageManager.process() and execute command in EASExecuteManager.execute()
- answer serialization by EASConnection.serialize()
- send packet via EASSession.send()
- On session break EASSession.close() will be executed.