SlideShare a Scribd company logo
Integrating DDS into AXCIOMA,
the component approach
Johnny Willemsen (jwillemsen@remedy.nl)
CTO Remedy IT
https://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
https://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 © Remedy IT6
Component
Copyright © Remedy IT
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 © Remedy IT8
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 © Remedy IT9
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 © Remedy IT10
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 © Remedy IT11
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 © Remedy IT12
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 © Remedy IT13
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 © Remedy IT14
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 IT
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 © Remedy IT17
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 © Remedy IT22
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 © Remedy IT23
Shapes Example
Copyright © Remedy IT
…
Controller
Request/Reply
interaction
Request/Reply
interaction
Publisher
Event
interaction
Event
interaction
Subscriber…
24
Generated ShapeType
Class
Copyright © Remedy IT25
class ShapeType
{
public:
ShapeType () = default;
~ShapeType () = default;
ShapeType (const ShapeType&) = default;
ShapeType (ShapeType&&) = default;
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 IT
/// 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 IT
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 square 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
Postbus 81
6930 AB Westervoort
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
Company Presentation RemedyIT
PDF
Integrating DDS into AXCIOMA, the component approach
PDF
AXCIOMA, the internals, the component framework for distributed, real-time, a...
PDF
AXCIOMA, the component framework for distributed, real-time and embedded systems
PDF
Modernizing SCA through new Object Management Group (OMG) standards
PDF
Using Automation to Improve Software Services
PPT
Oracle 11i OID AD Integration
PDF
Integrating DDS into AXCIOMA - The Component Approach
Company Presentation RemedyIT
Integrating DDS into AXCIOMA, the component approach
AXCIOMA, the internals, the component framework for distributed, real-time, a...
AXCIOMA, the component framework for distributed, real-time and embedded systems
Modernizing SCA through new Object Management Group (OMG) standards
Using Automation to Improve Software Services
Oracle 11i OID AD Integration
Integrating DDS into AXCIOMA - The Component Approach

Similar to Integrating DDS into AXCIOMA, the component approach (20)

PDF
Component Based DDS with C++11 and R2DDS
PDF
AXCIOMA, the component framework for distributed, real-time and embedded systems
PDF
Model Driven, Component Based Development for CBDDS and IDL to C++11
PDF
AXCIOMA, the internals, the component framework for distributed, real-time, a...
PDF
Modernizing SCA through new Object Management Group (OMG) standards
PDF
CORBA Programming with TAOX11/C++11 tutorial
PDF
CORBA Programming with TAOX11/C++11 tutorial
PDF
DDS Programming with IDL to C++11 tutorial
PDF
Architecting your Frontend
PDF
CNS Presentation
PDF
Brocade Software Networking (SDN NFV Day ITB 2016)
PPTX
ColdFusion 11 Overview - CFSummit 2013
PDF
MT82 IoT Security Starts at Edge
PPTX
C:\Fakepath\Combating Software Entropy 2
PPTX
C:\Fakepath\Combating Software Entropy 2
PPTX
Intel XDK - Philly JS
PPTX
Developing Mission-Critical Avionics and Defense Systems with Ada and DDS
PPTX
Dynamics 365 Saturday - London 2018 - New Features and Deprecations with Dyna...
PDF
Remedy IT Company presentation
PDF
News to Development Environments and for RDz for z/VSE
 
Component Based DDS with C++11 and R2DDS
AXCIOMA, the component framework for distributed, real-time and embedded systems
Model Driven, Component Based Development for CBDDS and IDL to C++11
AXCIOMA, the internals, the component framework for distributed, real-time, a...
Modernizing SCA through new Object Management Group (OMG) standards
CORBA Programming with TAOX11/C++11 tutorial
CORBA Programming with TAOX11/C++11 tutorial
DDS Programming with IDL to C++11 tutorial
Architecting your Frontend
CNS Presentation
Brocade Software Networking (SDN NFV Day ITB 2016)
ColdFusion 11 Overview - CFSummit 2013
MT82 IoT Security Starts at Edge
C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2
Intel XDK - Philly JS
Developing Mission-Critical Avionics and Defense Systems with Ada and DDS
Dynamics 365 Saturday - London 2018 - New Features and Deprecations with Dyna...
Remedy IT Company presentation
News to Development Environments and for RDz for z/VSE
 
Ad

More from Remedy IT (18)

PDF
Comparing IDL to C++ with IDL to C++11
PDF
ACE/TAO/CIAO/DAnCE Maintenance overview
PDF
Remedy IT Revised Submission Presentation for the Unified Component Model (UC...
PDF
Revised submission for Unified Component Model (UCM) for Distributed, Real-Ti...
PDF
Component Technologies for Fractionated Satellites
PDF
UCM Initial Submission presentation
PDF
Remedy IT Initial Submission for the Unified Component Model (UCM) for Distri...
PDF
Unified Component Model for Distributed, Real- Time and Embedded Systems Requ...
PDF
Request For Proposal Unified Component Model for Distributed, Real-Time and E...
PDF
Test What Matters Most
PDF
IDL to C++03 RFC
PDF
F6COM: A Case Study in Extending Container Services through Connectors
PDF
AMI4CCM, custom DDS connectors, and IDL to C++11
PDF
Draft Request For Proposal Unified Component Model for Distributed, Real-Time...
PDF
Test What Matters Most
PDF
Comparing IDL to C++ with IDL to C++11
PDF
Component Based Model Driven Development of Mission Critical Defense Applicat...
PDF
Remedy IT Flyer_introduction
Comparing IDL to C++ with IDL to C++11
ACE/TAO/CIAO/DAnCE Maintenance overview
Remedy IT Revised Submission Presentation for the Unified Component Model (UC...
Revised submission for Unified Component Model (UCM) for Distributed, Real-Ti...
Component Technologies for Fractionated Satellites
UCM Initial Submission presentation
Remedy IT Initial Submission for the Unified Component Model (UCM) for Distri...
Unified Component Model for Distributed, Real- Time and Embedded Systems Requ...
Request For Proposal Unified Component Model for Distributed, Real-Time and E...
Test What Matters Most
IDL to C++03 RFC
F6COM: A Case Study in Extending Container Services through Connectors
AMI4CCM, custom DDS connectors, and IDL to C++11
Draft Request For Proposal Unified Component Model for Distributed, Real-Time...
Test What Matters Most
Comparing IDL to C++ with IDL to C++11
Component Based Model Driven Development of Mission Critical Defense Applicat...
Remedy IT Flyer_introduction
Ad

Recently uploaded (20)

PDF
Hybrid model detection and classification of lung cancer
PDF
A novel scalable deep ensemble learning framework for big data classification...
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PDF
Mushroom cultivation and it's methods.pdf
PPTX
1. Introduction to Computer Programming.pptx
PDF
DP Operators-handbook-extract for the Mautical Institute
PDF
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
A Presentation on Touch Screen Technology
PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
Zenith AI: Advanced Artificial Intelligence
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
A Presentation on Artificial Intelligence
PPTX
Tartificialntelligence_presentation.pptx
PDF
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
PDF
August Patch Tuesday
Hybrid model detection and classification of lung cancer
A novel scalable deep ensemble learning framework for big data classification...
gpt5_lecture_notes_comprehensive_20250812015547.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Univ-Connecticut-ChatGPT-Presentaion.pdf
Mushroom cultivation and it's methods.pdf
1. Introduction to Computer Programming.pptx
DP Operators-handbook-extract for the Mautical Institute
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
Encapsulation_ Review paper, used for researhc scholars
A Presentation on Touch Screen Technology
A comparative study of natural language inference in Swahili using monolingua...
NewMind AI Weekly Chronicles - August'25-Week II
Zenith AI: Advanced Artificial Intelligence
Building Integrated photovoltaic BIPV_UPV.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
A Presentation on Artificial Intelligence
Tartificialntelligence_presentation.pptx
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
August Patch Tuesday

Integrating DDS into AXCIOMA, the component approach

  • 1. Integrating DDS into AXCIOMA, the component approach Johnny Willemsen (jwillemsen@remedy.nl) CTO Remedy IT https://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 https://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 © Remedy IT6
  • 7. Component Copyright © Remedy IT 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 © Remedy IT8
  • 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 © Remedy IT9
  • 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 © Remedy IT10
  • 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 © Remedy IT11
  • 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 © Remedy IT12 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 © Remedy IT13 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 © Remedy IT14
  • 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 IT 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 © Remedy IT17
  • 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 © Remedy IT22
  • 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 © Remedy IT23
  • 24. Shapes Example Copyright © Remedy IT … Controller Request/Reply interaction Request/Reply interaction Publisher Event interaction Event interaction Subscriber… 24
  • 25. Generated ShapeType Class Copyright © Remedy IT25 class ShapeType { public: ShapeType () = default; ~ShapeType () = default; ShapeType (const ShapeType&) = default; ShapeType (ShapeType&&) = default; 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 IT /// 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 IT 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 square 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 Postbus 81 6930 AB Westervoort 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