A data-oriented interface is defined by:
-
an abstract participant whose name is the interface name
-
inputs:
- Subscriber(s) containing DataReaders
- Subscribers are associated with SubscriberQos
- DataReader(s) are associated with DataReaderQos
-
outputs:
- Publishers(s) containing DataWriters
- Publishers are associated with PublisherQos
- DataWriters(s) are associated with DataWriterQos
An abstract participant
- can be be composed with other abstract participants (interfaces)
- does not specify a participant_qos
Abstract participants are composed via inheritance
base_name=$(BASE_NAME_...)BASE_NAME__...environment variable specifies the base interface
A service is a collection of interfaces. At a minimum a service definition includes:
-
a service name, say
MyService -
OPTIONAL: a
<types>tag- typically using
<include file="...">tags to load the XML type definitions (generated from IDL), that are used by the service - only needed if dynamic types are used by the service or if a concrete service is being defined
- an abstract service can bind the types later when components are defined
- NOTE: it is a good practice to include this section, so that the service definition works with both compiled types and dynamic types
- typically using
-
a
domain_participant_librarynamedname=MyService_Librarythat contains:-
a marker interface (i.e. has no inputs and outputs) named
MyService_Rootthat- OPTIONAL:
<register_type>tags- registers the types used by the service; this is only needed if dynamic types are used (e.g. using scripting in Lua etc.)
- NOTE: it is a good practice to register the types, so that the service definition works with both compiled types and dynamic types
- the types can be in a separate file
<topic>tags for each topic used by the service
- OPTIONAL:
-
one or more service interfaces
-
-
a service
qos_profilenamedServiceQosLib::User.Service.MyServicethat defines the endpoint qos policies for all the topics used by the service using topics filters (topic_filter)- optional per interface qos profiles that specialize the service qos profile, e.g. for resources or different ownership strengths etc
-
Services can be composed of other services
- A service interface can be composed of other service interfaces
-
Since composition of XML App Creation is not currently supported out of the box, it can be achieved via carefully orchestrated inheritance. The DOMA framework provides and implementation using scripting and environment variables, described below.
A service interface implementation is called a module.
A composite service interface may be implemented as composition of modules.
The instantiation of a service is called a "deployment".
A deployment binds the service modules to resources.
A deployment's artifacts look similar to those of a service---with the distinction that qos policies specify the actual resources (transports, initial peers, discovery etc.)
A component is a unit of deployment.
It binds a module to resources.
Typically, there will be one component per unix-style 'process`.
A component binding is configured by defining the environment variables:
NAME_Component= "component name"DOMAIN_ID_Component= "domain id"BASE_NAME_Component= "the composite interface to instantiate"
A component's DomainParticipantFactoryQos and DomainParticipantQos
are retrieved from the qos profile
DeploymentQosLib::$(NAME_Component)
This qos profile may customize qos policies for:
participant_qosparticipant_factory_qos
Author: Rajive Joshi, Real-Time Innovations Inc. Copyright (C) 2017.