E1 applications are constructed as a collection of distributed objects. This section briefly discusses the methodology of distributed objects development and the tools needed.
A distributed object consists of semantics and replication objects developed, as a rule, by different sites. Normally, an object developer implements the semantics object and specifies one or more standard replication strategies, which can be applied to it. In rare cases is the replication strategy developed for one particular semantics object.
E1 supports the component paradigm of software development. For this purpose, the distributed object model is extended by a set of services: Object Registry, Access Control Server, Global Naming Server, and garbage collection system. Also included in the E1 component model is the Interface Definition Language (IDL), making posiible binary interoperability of components written in various programming languages. Figure illustrates the C++-based development cycle of a distributed object. Object development is carried out by two sites - the site implementing the replication strategy, and the site implementing the semantics object, i.e. the component developer. The semantics object developer prepares the IDL-definition of object interfaces, using which the IDL compiler generates abstract C++ classes from which object implementation is inherited. The IDL-definition of the object contains the following information:
- definitions of the data structures used as parameters or return values by the object methods;
- unique class and interface identifiers;
- interface declarations: method names, types of arguments and return values, directional attributes and additional meta-information which can be used by the Replication Strategies Compiler. For example, method declaration can have one of the ([read], [modify]) attributes.
Replication strategy can be implemented independent of the semantics object. However replication object can not be compiled until the information about the interfaces of the specific semantics object is available. This contradicts the existence of universal replication strategies, e.g. active replication, which can be applied to various objects. To alleviate this contradiction, the replication strategy is described using a special scripting language denoting the semantics object's interfaces and methods by some abstract identifiers. When the replication strategy is applied to a certain class of semantics objects for the first time, the appropriate replication object is compiled on the fly from the replication strategy description and the semantics object's IDL-definition by the Replication Strategies Compiler (RSC). Besides replication objects, the RSC generates GRPC-stubs, that are required for communication between distributed object replicas.
Development cycle of distributed object
The distributed objects can be developed not only in C++, but also any other programming language, which can be mapped to the E1 object model.