SlideShare a Scribd company logo
Integrating DDS into AXCIOMA,
the component approach
Johnny Willemsen (jwillemsen@remedy.nl)
CTO Remedy IT
http://www.remedy.nl
Remedy IT
Remedy IT is specialized in communication
middleware and component technologies
Strong focus on open standards based solutions
Actively involved in the Object Management Group,
chairing several OMG standardization efforts
Our customers are in various domains including
telecom, aerospace and defense, transportation,
industrial automation
For more information take a look at our website
www.remedy.nl
Copyright © Remedy IT2
What We Do
Global Service Delivery Partner for RTI Connext
DDS
Develop implementations of OMG open standards
• Commercial: TAOX11, AXCIOMA
• Open source: TAO, CIAO, R2CORBA
Deliver services related to OMG standards including
the CORBA, CCM, and DDS standard
Develop open standards as part of the Object
Management Group
Copyright © Remedy IT3
What is AXCIOMA?
AXCIOMA is a comprehensive software suite
combining eleven Object Management Group (OMG)
open standards
• LwCCM, DDS, DDS4CCM, AMI4CCM, CORBA,
IDL, IDL2C++11, RPC4DDS, DDS Security, DDS X-
Types, and D&C
AXCIOMA is based on
• Interoperable Open Architecture (IOA)
• Component Based Architecture (CBA)
• Service Oriented Architecture (SOA)
• Event Driven Architecture (EDA)
• Model Driven Architecture (MDA)
Copyright © Remedy IT4
AXCIOMA
AXCIOMA supports the design, development, and
deployment of a distributed component based
architecture
A component based architecture encapsulates and
integrates the following mechanisms in a “container”
• Threading model
• Lifecycle management
• Connection management
Copyright © Remedy IT5
What Is a Component?
Independent revisable unit of software with well
defined interfaces, called ports
Can be packaged as an independent deployable set
of files
Smallest decomposable unit that defines standard
ports is called a monolithic component
An component assembly is an aggregation of
monolithic components or other component
assemblies
Copyright © Remedy6
Component
Copyright © Remedy
Provides
(facet)
attributes
Component
Configuration
Life cycle
Uses
(receptacle)
attributes
Component
Assembly
Configuration
Life cycle
callbacks
7
IDL CODE DEPLOY
DATA
(types and interfaces)
INTERACTION
PATTERNS
BUSINESS
(connectors)
(components)
Uses Generate
Generate
Generate
Types and Interfaces
Interaction pattern
implementations
Component executor
starter code
Deployment
plan
Shared libraries
Deployment
tools
Implement business logic
Component Framework
Copyright © Remedy8
IDL CODE DEPLOY
DATA
(types and interfaces)
INTERACTION
PATTERNS
BUSINESS
(connectors)
(components)
Uses Generate
Generate
Generate
Types and Interfaces
Interaction pattern
implementations
Component executor
starter code
Deployment
plan
Shared libraries
Deployment
tools
Implement business logic
Component Framework
Copyright © Remedy9
IDL CODE DEPLOY
DATA
(types and interfaces)
INTERACTION
PATTERNS
BUSINESS
(connectors)
(components)
Uses Generate
Generate
Generate
Types and Interfaces
Interaction pattern
implementations
Component executor
starter code
Deployment
plan
Shared libraries
Deployment
tools
Implement business logic
Component Framework
Copyright © Remedy10
IDL CODE DEPLOY
DATA
(types and interfaces)
INTERACTION
PATTERNS
BUSINESS
(connectors)
(components)
Uses Generate
Generate
Generate
Types and Interfaces
Interaction pattern
implementations
Component executor
starter code
Deployment
plan
Shared libraries
Deployment
tools
Implement business logic
Component Framework
Copyright © Remedy11
IDL CODE DEPLOY
DATA
(types and interfaces)
INTERACTION
PATTERNS
BUSINESS
(connectors)
(components)
Uses Generate
Generate
Generate
Types and Interfaces
Interaction pattern
implementations
Component executor
starter code
Deployment
plan
Shared libraries
Deployment
tools
Implement business logic
Component Framework
Copyright © Remedy12
Compilation
IDL CODE DEPLOY
DATA
(types and interfaces)
INTERACTION
PATTERNS
BUSINESS
(connectors)
(components)
Uses Generate
Generate
Generate
Types and Interfaces
Interaction pattern
implementations
Component executor
starter code
Deployment
plan
Shared libraries
Deployment
tools
Implement business logic
Component Framework
Copyright © Remedy13
Compilation
Interaction Patterns
Define how components interact with the outside
world
• Request/Reply interaction
client, server, asynchronous client, and
asynchronous server
• Event interaction
supplier, push consumer, and pull consumer
• State interaction
observable, passive observer, push observer, pull
observer, and push state observer
All these interaction patterns can be realized using
DDS
Copyright © Remedy14
Our AXCIOMA DDS
Challenge
Integrate RTI Connext DDS into AXCIOMA
Provide the IDL to C++11 API to our users
Abstract and optimize DDS through the interaction
patterns
• Request/reply
• State
• Event
Copyright © Remedy IT15
IDL to C++11 Language
Mapping (I)
Copyright © Remedy
Simplified mapping for C++
• Make use of the standard C++ library as much as
possible
Make use of the C++11 features to
• Reduce amount of application code
• Reduce amount of possible coding errors by
providing a safer API
• Gain runtime performance
• Speedup development and testing
Faster time to market
Reduced costs
Reduced training time
16
IDL to C++11 Language
Mapping (II)
An IDL interface maps to so called reference types
Reference types are automatically reference counted
A nil reference type is represented as nullptr
A boolean operator for reference comparison is
available
Invoking an operation on a nil reference results in a
INV_OBJREF exception, no need whether object
references are valid throughout your business code
Copyright © Remedy17
DDSX11
RTI Connext DDS currently does not support the IDL
to C++11 language mapping
DDSX11 performs the bridging between the IDL to
C++11 and RTI Connext DDS C++ API
Hides all vendor API details from the programmer
Combination of
• IDL based code generation
• C++11 code generation
• Core support classes and templates
Copyright © Remedy IT18
DDSX11 Conversion traits
For DDSX11 the C++11 types are leading
For each IDL defined type we provide a trait with
helper methods to convert between C++ and C++11
• Basic type traits are part of the core
• Constructed type traits are generated by our RIDL
IDL compiler
Generated for a specific vendor
DDSX11 uses the traits and is unaware of the real
type
Copyright © Remedy IT19
DDSX11 Conversion traits
Conversion traits are currently optimized for RTI
Connext DDS using the ‘old’ C++ API
Traits can be generated differently for other vendors
or a different RTI version
At the moment the C++ and C++11 type are the
same the conversion traits are optimized away by the
compiler
• DDSX11 and user code doesn’t need to be changed
Copyright © Remedy IT20
Optimizing DDS Usage
DDS API is hidden from the programmer
Knowledge about how DDS setup is part of the
connector
The DDS usage knowledge is implemented and
optimized once
• Usage of domain participants (how many)
• Reuse of topics
• Clean shutdown of DDS
DDSX11 can use IDL4 annotations which are
converted to the DDS vendor specific setting
Copyright © Remedy IT21
Component and DDS
Execution Model
Components run in a single threaded, re-entrant
environment
Callbacks from DDS threads are going dispatched
onto our main thread
No locking in user code necessary
Additional Execution Models will be available for
more complex execution environments
Copyright © Remedy22
Testing
All our connector and framework functionality has to
be tested automatically
No need for special DDS test connectors
Special test components that trigger fault conditions
• Sometimes need to be combined with specific QoS
settings
On heavy loads sometimes DomainParticipant
discovery is missed
• Wait on DDS callbacks like publication_matched
before starting the real test code
Keep QoS and configuration as simple as possible
Copyright © Remedy23
Shapes Example
Copyright © Remedy
…
Controller
Request/Reply
interaction
Request/Reply
interaction
Publisher
Event
interaction
Event
interaction
Subscriber…
24
Generated ShapeType
Class
Copyright © Remedy25
class ShapeType
{
public:
ShapeType () = default;
~ShapeType () = default;
ShapeType (const ShapeType&) = default;
ShapeType (ShapeType&&) = default;
explicit inline ShapeType (
color_type color, int32_t x, int32_t y, int32_t shapesize);
ShapeType& operator= (const ShapeType&) = default;
ShapeType& operator= (ShapeType&&) = default;
…
// Getters and Setters
private:
// Struct members as private members
};
ShapeType shape {"GREEN", 0, 0, 15 };
std::cout << “Created ShapeType " << shape << std::endl;
ShapeType shape1 = shape;
ShapeType shape2 (shape1);
Component Executor
Class
Copyright © Remedy
/// Component Executor Implementation Class : Publisher_comp_exec_i
class Pubisher_comp_exec_i final
: public virtual IDL::traits<CCM_Publisher_comp>::base_type
{
public:
/// Constructor
Publisher_comp_exec_i ();
//@@{__RIDL_REGEN_MARKER__} - END :
Shapes_Publisher_comp_Impl::Publisher_comp_exec_i[ctor]
/// Destructor
virtual ~Publisher_comp_exec_i ();
/** @name Component port operations. */
//@{
/// Factory method and getter for the control facet
/// @return existing instance of facet if one exists, else creates it
virtual IDL::traits<Shapes::CCM_Control>::ref_type
get_control () override;
//@}
...
26
Facet Executor Class
Copyright © Remedy
Shapes::ReturnStatus
control_exec_i::setLocation (
uint16_t x,
uint16_t y)
{
Shapes::ReturnStatus status = Shapes::ReturnStatus::RETURN_ERROR;
auto cex = IDL::traits<Publisher_comp_exec_i>::narrow (
this->component_executor_.lock ());
if (cex)
status = cex->setLocation (x, y);
else
std::cout << "setLocation - failed to lock executor." << std::endl;
return status;
}
27
Write a DDS sample
Copyright © Remedy IT28
// Get the writer port which we use to write a DDS sample
IDL::traits< ::Shapes::ShapeType_conn::Writer>::ref_type writer =
this->context_->get_connection_info_write_data ();
// Write one sample squary for the given instance handle
writer->write_one (this->square_, this->instance_handle_);
Receive a DDS sample
Copyright © Remedy IT29
// Data is delivered through a callback
void
info_out_data_listener_exec_i::on_one_data (
const ::ShapeType& datum,
const ::CCM_DDS::ReadInfo&)
{
std::cout << "Received " << datum << std::endl;
}
Conclusion
DDS fits perfect into a component based approach
DDSX11 abstracts vendor differences and improves
portability of user code
Fully automated testing is possible but takes time to
implement
IDL to C++11 simplifies user code, increases
performance, and reduces time to implement
Copyright © Remedy IT30
Contact
Remedy IT
Melkrijder 11
3861 SG Nijkerk (Gld)
The Netherlands
tel.: +31(0)88 053 0000
e-mail: sales@remedy.nl
website: www.remedy.nl
Twitter: @RemedyIT
Slideshare: RemedyIT
Subscribe to our mailing list
Copyright © Remedy IT31

More Related Content

PDF
System integration in offshore supply vessels – how we applied DDS and redefi...
PPTX
IoT and M2M Safety and Security
PPTX
TechTalk: Connext DDS 5.2.
PPTX
FACE-ing Reality: Maintaining our Military Edge in the Modern World
PPTX
Developing Mission-Critical Avionics and Defense Systems with Ada and DDS
PPTX
Secrets of Autonomous Car Design
PPTX
Data Distribution Service Security and the Industrial Internet of Things
PDF
How to Design Distributed Robotic Control Systems
System integration in offshore supply vessels – how we applied DDS and redefi...
IoT and M2M Safety and Security
TechTalk: Connext DDS 5.2.
FACE-ing Reality: Maintaining our Military Edge in the Modern World
Developing Mission-Critical Avionics and Defense Systems with Ada and DDS
Secrets of Autonomous Car Design
Data Distribution Service Security and the Industrial Internet of Things
How to Design Distributed Robotic Control Systems

What's hot (20)

PPTX
The Inside Story: How OPC UA and DDS Can Work Together in Industrial Systems
PDF
How to Cut $2 Million of Your Safety Cert Costs
PPTX
Space Rovers and Surgical Robots: System Architecture Lessons from Mars
PPTX
Managing Avionics Safety Certification for Unmanned Aircraft
PDF
The Low-Risk Path to Building Autonomous Car Architectures
PPTX
Cybersecurity Spotlight: Looking under the Hood at Data Breaches and Hardenin...
PDF
ISO 26262 Approval of Automotive Software Components
PDF
Fog Computing is the Future of the Industrial Internet of Things
PPTX
Weather Information System Airport and Decision Support (WISADS)
PDF
What Does Interoperability Mean for the IoT?
PPTX
Learn About FACE Aligned Reference Platform: Built on COTS and DO-178C Certif...
PPTX
Learn About the FACE Standard for Avionics Software and a Ready-to-Go COTS Pl...
PDF
The Inside Story: Leveraging the IIC's Industrial Internet Security Framework
PPTX
DDS Enabling Open Architecture
PDF
The Promise of Interoperability
PPTX
How the fusion of time sensitive networking, time-triggered ethernet and data...
PDF
Distributed Communication and Control for a Network of Melting Probes in Extr...
PPTX
October Southern CA Road Shows - Build Safe and Secure Distributed Systems
PPTX
Accelerating Safety and Security Certification with FACE™ COTS Solutions
PDF
Upgrade Your System’s Security - Making the Jump from Connext DDS Professiona...
The Inside Story: How OPC UA and DDS Can Work Together in Industrial Systems
How to Cut $2 Million of Your Safety Cert Costs
Space Rovers and Surgical Robots: System Architecture Lessons from Mars
Managing Avionics Safety Certification for Unmanned Aircraft
The Low-Risk Path to Building Autonomous Car Architectures
Cybersecurity Spotlight: Looking under the Hood at Data Breaches and Hardenin...
ISO 26262 Approval of Automotive Software Components
Fog Computing is the Future of the Industrial Internet of Things
Weather Information System Airport and Decision Support (WISADS)
What Does Interoperability Mean for the IoT?
Learn About FACE Aligned Reference Platform: Built on COTS and DO-178C Certif...
Learn About the FACE Standard for Avionics Software and a Ready-to-Go COTS Pl...
The Inside Story: Leveraging the IIC's Industrial Internet Security Framework
DDS Enabling Open Architecture
The Promise of Interoperability
How the fusion of time sensitive networking, time-triggered ethernet and data...
Distributed Communication and Control for a Network of Melting Probes in Extr...
October Southern CA Road Shows - Build Safe and Secure Distributed Systems
Accelerating Safety and Security Certification with FACE™ COTS Solutions
Upgrade Your System’s Security - Making the Jump from Connext DDS Professiona...
Ad

Viewers also liked (8)

PDF
MiroSurge: Research Platform for Robotic Surgery
PPTX
Generic Vehicle Architecture – DDS at the Core.
PPTX
eProsima RPC over DDS - Connext Conf London October 2015
PDF
Generic vehicle architecture
PDF
Connected Car by Ashish Bhasin
PDF
Tech Mahindra - Connected Engineering
PDF
The Inside Story: GE Healthcare's Industrial Internet of Things (IoT) Archite...
PPTX
DDS over Low Bandwidth Data Links - Connext Conf London October 2014
MiroSurge: Research Platform for Robotic Surgery
Generic Vehicle Architecture – DDS at the Core.
eProsima RPC over DDS - Connext Conf London October 2015
Generic vehicle architecture
Connected Car by Ashish Bhasin
Tech Mahindra - Connected Engineering
The Inside Story: GE Healthcare's Industrial Internet of Things (IoT) Archite...
DDS over Low Bandwidth Data Links - Connext Conf London October 2014
Ad

Similar to Integrating DDS into AXCIOMA - The Component Approach (20)

PDF
Integrating DDS into AXCIOMA, the component approach
PDF
Component Based DDS with C++11 and R2DDS
PDF
Model Driven, Component Based Development for CBDDS and IDL to C++11
PDF
AXCIOMA, the component framework for distributed, real-time and embedded systems
PDF
AXCIOMA, the component framework for distributed, real-time and embedded systems
PDF
AXCIOMA, the internals, the component framework for distributed, real-time, a...
PDF
AXCIOMA, the internals, the component framework for distributed, real-time, a...
PDF
CORBA Programming with TAOX11/C++11 tutorial
PDF
DDS Programming with IDL to C++11 tutorial
PDF
CORBA Programming with TAOX11/C++11 tutorial
PPTX
ColdFusion 11 Overview - CFSummit 2013
PDF
Modernizing SCA through new Object Management Group (OMG) standards
PPTX
Dynamics 365 Saturday - London 2018 - New Features and Deprecations with Dyna...
PDF
Modernizing SCA through new Object Management Group (OMG) standards
PDF
News to Development Environments and for RDz for z/VSE
 
PDF
Component Based Model Driven Development of Mission Critical Defense Applicat...
PDF
Remedy IT Company presentation
PDF
Company Presentation RemedyIT
PDF
IBM Rhapsody Code Generation Customization
PDF
Brocade Software Networking (SDN NFV Day ITB 2016)
Integrating DDS into AXCIOMA, the component approach
Component Based DDS with C++11 and R2DDS
Model Driven, Component Based Development for CBDDS and IDL to C++11
AXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the internals, the component framework for distributed, real-time, a...
AXCIOMA, the internals, the component framework for distributed, real-time, a...
CORBA Programming with TAOX11/C++11 tutorial
DDS Programming with IDL to C++11 tutorial
CORBA Programming with TAOX11/C++11 tutorial
ColdFusion 11 Overview - CFSummit 2013
Modernizing SCA through new Object Management Group (OMG) standards
Dynamics 365 Saturday - London 2018 - New Features and Deprecations with Dyna...
Modernizing SCA through new Object Management Group (OMG) standards
News to Development Environments and for RDz for z/VSE
 
Component Based Model Driven Development of Mission Critical Defense Applicat...
Remedy IT Company presentation
Company Presentation RemedyIT
IBM Rhapsody Code Generation Customization
Brocade Software Networking (SDN NFV Day ITB 2016)

More from Real-Time Innovations (RTI) (7)

PPTX
A Tour of RTI Applications
PDF
Precise, Predictive, and Connected: DDS and OPC UA – Real-Time Connectivity A...
PDF
The Inside Story: How the IIC’s Connectivity Framework Guides IIoT Connectivi...
PPTX
Introduction to RTI DDS
PPTX
Cyber Security for the Connected Car
PPTX
Advancing Active Safety for Next-Gen Automotive
PPTX
Slash Avionics Integration Costs with DO-178C Certifiable Connectivity Software
A Tour of RTI Applications
Precise, Predictive, and Connected: DDS and OPC UA – Real-Time Connectivity A...
The Inside Story: How the IIC’s Connectivity Framework Guides IIoT Connectivi...
Introduction to RTI DDS
Cyber Security for the Connected Car
Advancing Active Safety for Next-Gen Automotive
Slash Avionics Integration Costs with DO-178C Certifiable Connectivity Software

Recently uploaded (20)

PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
OMC Textile Division Presentation 2021.pptx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Machine learning based COVID-19 study performance prediction
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Machine Learning_overview_presentation.pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Empathic Computing: Creating Shared Understanding
PPTX
Spectroscopy.pptx food analysis technology
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
A Presentation on Artificial Intelligence
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
NewMind AI Weekly Chronicles - August'25-Week II
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
OMC Textile Division Presentation 2021.pptx
Mobile App Security Testing_ A Comprehensive Guide.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Machine learning based COVID-19 study performance prediction
Spectral efficient network and resource selection model in 5G networks
gpt5_lecture_notes_comprehensive_20250812015547.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Machine Learning_overview_presentation.pptx
MIND Revenue Release Quarter 2 2025 Press Release
A comparative analysis of optical character recognition models for extracting...
Empathic Computing: Creating Shared Understanding
Spectroscopy.pptx food analysis technology
Unlocking AI with Model Context Protocol (MCP)
A Presentation on Artificial Intelligence
Agricultural_Statistics_at_a_Glance_2022_0.pdf
A comparative study of natural language inference in Swahili using monolingua...
Accuracy of neural networks in brain wave diagnosis of schizophrenia
Programs and apps: productivity, graphics, security and other tools
NewMind AI Weekly Chronicles - August'25-Week II

Integrating DDS into AXCIOMA - The Component Approach

  • 1. Integrating DDS into AXCIOMA, the component approach Johnny Willemsen (jwillemsen@remedy.nl) CTO Remedy IT http://www.remedy.nl
  • 2. Remedy IT Remedy IT is specialized in communication middleware and component technologies Strong focus on open standards based solutions Actively involved in the Object Management Group, chairing several OMG standardization efforts Our customers are in various domains including telecom, aerospace and defense, transportation, industrial automation For more information take a look at our website www.remedy.nl Copyright © Remedy IT2
  • 3. What We Do Global Service Delivery Partner for RTI Connext DDS Develop implementations of OMG open standards • Commercial: TAOX11, AXCIOMA • Open source: TAO, CIAO, R2CORBA Deliver services related to OMG standards including the CORBA, CCM, and DDS standard Develop open standards as part of the Object Management Group Copyright © Remedy IT3
  • 4. What is AXCIOMA? AXCIOMA is a comprehensive software suite combining eleven Object Management Group (OMG) open standards • LwCCM, DDS, DDS4CCM, AMI4CCM, CORBA, IDL, IDL2C++11, RPC4DDS, DDS Security, DDS X- Types, and D&C AXCIOMA is based on • Interoperable Open Architecture (IOA) • Component Based Architecture (CBA) • Service Oriented Architecture (SOA) • Event Driven Architecture (EDA) • Model Driven Architecture (MDA) Copyright © Remedy IT4
  • 5. AXCIOMA AXCIOMA supports the design, development, and deployment of a distributed component based architecture A component based architecture encapsulates and integrates the following mechanisms in a “container” • Threading model • Lifecycle management • Connection management Copyright © Remedy IT5
  • 6. What Is a Component? Independent revisable unit of software with well defined interfaces, called ports Can be packaged as an independent deployable set of files Smallest decomposable unit that defines standard ports is called a monolithic component An component assembly is an aggregation of monolithic components or other component assemblies Copyright © Remedy6
  • 7. Component Copyright © Remedy Provides (facet) attributes Component Configuration Life cycle Uses (receptacle) attributes Component Assembly Configuration Life cycle callbacks 7
  • 8. IDL CODE DEPLOY DATA (types and interfaces) INTERACTION PATTERNS BUSINESS (connectors) (components) Uses Generate Generate Generate Types and Interfaces Interaction pattern implementations Component executor starter code Deployment plan Shared libraries Deployment tools Implement business logic Component Framework Copyright © Remedy8
  • 9. IDL CODE DEPLOY DATA (types and interfaces) INTERACTION PATTERNS BUSINESS (connectors) (components) Uses Generate Generate Generate Types and Interfaces Interaction pattern implementations Component executor starter code Deployment plan Shared libraries Deployment tools Implement business logic Component Framework Copyright © Remedy9
  • 10. IDL CODE DEPLOY DATA (types and interfaces) INTERACTION PATTERNS BUSINESS (connectors) (components) Uses Generate Generate Generate Types and Interfaces Interaction pattern implementations Component executor starter code Deployment plan Shared libraries Deployment tools Implement business logic Component Framework Copyright © Remedy10
  • 11. IDL CODE DEPLOY DATA (types and interfaces) INTERACTION PATTERNS BUSINESS (connectors) (components) Uses Generate Generate Generate Types and Interfaces Interaction pattern implementations Component executor starter code Deployment plan Shared libraries Deployment tools Implement business logic Component Framework Copyright © Remedy11
  • 12. IDL CODE DEPLOY DATA (types and interfaces) INTERACTION PATTERNS BUSINESS (connectors) (components) Uses Generate Generate Generate Types and Interfaces Interaction pattern implementations Component executor starter code Deployment plan Shared libraries Deployment tools Implement business logic Component Framework Copyright © Remedy12 Compilation
  • 13. IDL CODE DEPLOY DATA (types and interfaces) INTERACTION PATTERNS BUSINESS (connectors) (components) Uses Generate Generate Generate Types and Interfaces Interaction pattern implementations Component executor starter code Deployment plan Shared libraries Deployment tools Implement business logic Component Framework Copyright © Remedy13 Compilation
  • 14. Interaction Patterns Define how components interact with the outside world • Request/Reply interaction client, server, asynchronous client, and asynchronous server • Event interaction supplier, push consumer, and pull consumer • State interaction observable, passive observer, push observer, pull observer, and push state observer All these interaction patterns can be realized using DDS Copyright © Remedy14
  • 15. Our AXCIOMA DDS Challenge Integrate RTI Connext DDS into AXCIOMA Provide the IDL to C++11 API to our users Abstract and optimize DDS through the interaction patterns • Request/reply • State • Event Copyright © Remedy IT15
  • 16. IDL to C++11 Language Mapping (I) Copyright © Remedy Simplified mapping for C++ • Make use of the standard C++ library as much as possible Make use of the C++11 features to • Reduce amount of application code • Reduce amount of possible coding errors by providing a safer API • Gain runtime performance • Speedup development and testing Faster time to market Reduced costs Reduced training time 16
  • 17. IDL to C++11 Language Mapping (II) An IDL interface maps to so called reference types Reference types are automatically reference counted A nil reference type is represented as nullptr A boolean operator for reference comparison is available Invoking an operation on a nil reference results in a INV_OBJREF exception, no need whether object references are valid throughout your business code Copyright © Remedy17
  • 18. DDSX11 RTI Connext DDS currently does not support the IDL to C++11 language mapping DDSX11 performs the bridging between the IDL to C++11 and RTI Connext DDS C++ API Hides all vendor API details from the programmer Combination of • IDL based code generation • C++11 code generation • Core support classes and templates Copyright © Remedy IT18
  • 19. DDSX11 Conversion traits For DDSX11 the C++11 types are leading For each IDL defined type we provide a trait with helper methods to convert between C++ and C++11 • Basic type traits are part of the core • Constructed type traits are generated by our RIDL IDL compiler Generated for a specific vendor DDSX11 uses the traits and is unaware of the real type Copyright © Remedy IT19
  • 20. DDSX11 Conversion traits Conversion traits are currently optimized for RTI Connext DDS using the ‘old’ C++ API Traits can be generated differently for other vendors or a different RTI version At the moment the C++ and C++11 type are the same the conversion traits are optimized away by the compiler • DDSX11 and user code doesn’t need to be changed Copyright © Remedy IT20
  • 21. Optimizing DDS Usage DDS API is hidden from the programmer Knowledge about how DDS setup is part of the connector The DDS usage knowledge is implemented and optimized once • Usage of domain participants (how many) • Reuse of topics • Clean shutdown of DDS DDSX11 can use IDL4 annotations which are converted to the DDS vendor specific setting Copyright © Remedy IT21
  • 22. Component and DDS Execution Model Components run in a single threaded, re-entrant environment Callbacks from DDS threads are going dispatched onto our main thread No locking in user code necessary Additional Execution Models will be available for more complex execution environments Copyright © Remedy22
  • 23. Testing All our connector and framework functionality has to be tested automatically No need for special DDS test connectors Special test components that trigger fault conditions • Sometimes need to be combined with specific QoS settings On heavy loads sometimes DomainParticipant discovery is missed • Wait on DDS callbacks like publication_matched before starting the real test code Keep QoS and configuration as simple as possible Copyright © Remedy23
  • 24. Shapes Example Copyright © Remedy … Controller Request/Reply interaction Request/Reply interaction Publisher Event interaction Event interaction Subscriber… 24
  • 25. Generated ShapeType Class Copyright © Remedy25 class ShapeType { public: ShapeType () = default; ~ShapeType () = default; ShapeType (const ShapeType&) = default; ShapeType (ShapeType&&) = default; explicit inline ShapeType ( color_type color, int32_t x, int32_t y, int32_t shapesize); ShapeType& operator= (const ShapeType&) = default; ShapeType& operator= (ShapeType&&) = default; … // Getters and Setters private: // Struct members as private members }; ShapeType shape {"GREEN", 0, 0, 15 }; std::cout << “Created ShapeType " << shape << std::endl; ShapeType shape1 = shape; ShapeType shape2 (shape1);
  • 26. Component Executor Class Copyright © Remedy /// Component Executor Implementation Class : Publisher_comp_exec_i class Pubisher_comp_exec_i final : public virtual IDL::traits<CCM_Publisher_comp>::base_type { public: /// Constructor Publisher_comp_exec_i (); //@@{__RIDL_REGEN_MARKER__} - END : Shapes_Publisher_comp_Impl::Publisher_comp_exec_i[ctor] /// Destructor virtual ~Publisher_comp_exec_i (); /** @name Component port operations. */ //@{ /// Factory method and getter for the control facet /// @return existing instance of facet if one exists, else creates it virtual IDL::traits<Shapes::CCM_Control>::ref_type get_control () override; //@} ... 26
  • 27. Facet Executor Class Copyright © Remedy Shapes::ReturnStatus control_exec_i::setLocation ( uint16_t x, uint16_t y) { Shapes::ReturnStatus status = Shapes::ReturnStatus::RETURN_ERROR; auto cex = IDL::traits<Publisher_comp_exec_i>::narrow ( this->component_executor_.lock ()); if (cex) status = cex->setLocation (x, y); else std::cout << "setLocation - failed to lock executor." << std::endl; return status; } 27
  • 28. Write a DDS sample Copyright © Remedy IT28 // Get the writer port which we use to write a DDS sample IDL::traits< ::Shapes::ShapeType_conn::Writer>::ref_type writer = this->context_->get_connection_info_write_data (); // Write one sample squary for the given instance handle writer->write_one (this->square_, this->instance_handle_);
  • 29. Receive a DDS sample Copyright © Remedy IT29 // Data is delivered through a callback void info_out_data_listener_exec_i::on_one_data ( const ::ShapeType& datum, const ::CCM_DDS::ReadInfo&) { std::cout << "Received " << datum << std::endl; }
  • 30. Conclusion DDS fits perfect into a component based approach DDSX11 abstracts vendor differences and improves portability of user code Fully automated testing is possible but takes time to implement IDL to C++11 simplifies user code, increases performance, and reduces time to implement Copyright © Remedy IT30
  • 31. Contact Remedy IT Melkrijder 11 3861 SG Nijkerk (Gld) The Netherlands tel.: +31(0)88 053 0000 e-mail: sales@remedy.nl website: www.remedy.nl Twitter: @RemedyIT Slideshare: RemedyIT Subscribe to our mailing list Copyright © Remedy IT31