SlideShare a Scribd company logo
1 of 26
Download to read offline
Component Based DDS using
C++11
R2DDS (Ruby to DDS)
RTI London Connext Conference 2014
Johnny Willemsen
CTO Remedy IT
jwillemsen@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,
leading several OMG open 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
Develop implementations of OMG open standards
• Open source; TAO, CIAO, R2CORBA
• Commercial; TAOX11, AXCIOMA
Deliver services related to OMG standards including
CORBA, CCM, DDS
Deliver services for specific implementations,
including RTI Connext DDS
Develop open standards as part of the OMG
Copyright © Remedy IT3
Component Based DDS
DDS is a great technology but
• It provides a messaging protocol, not a complete
architecture
• Provides a lot of freedom to the developer which can
lead to misuse
• Lots of things are left to the application like
deployment and threading model design
• Vendor portability can be a challenge
• No vendor support for the IDL to C++11 language
mapping
Copyright © Remedy IT4
CBDDS Standards
CBDDS combines eleven OMG standards into a
comprehensive software suite
• IDL4, IDL2C++11
• CORBA
• DDS, DDS X-Types, DDS Security, RPC4DDS
• LwCCM, DDS4CCM, AMI4CCM
• D&C
Copyright © Remedy IT5
CBDDS Principles
Interoperable Open Architecture (IOA)
Component Based Architecture (CBA)
Service Oriented Architecture (SOA)
Event Driven Architecture (EDA)
Model Driven Architecture (MDA)
Copyright © Remedy IT6
What is a Component?
Independent revisable unit of software with well
defined interfaces called “ports”
Able to be packaged as an independent deployable
set of files
Smallest decomposable unit that defines standard
ports is a “monolithic component”
A “component assembly” is an aggregation of
monolithic components or other component
assemblies
Copyright © Remedy IT7
Why Component Based
Development?
Modularity
Reuse
Interoperability
Extensibility
Scalability
Reduced Complexity
Faster and Cheaper Development
Quality and Reliability
Deployability
Copyright © Remedy IT8
Interaction Patterns
CBDDS uses so called interaction patterns to define
the interaction between user components
CBDDS defines request/reply, state, and event
interaction patterns
An interaction pattern is realized at deployment time
using a specific communication middleware, legacy
system, or hardware
Copyright © 20139
Request/Reply Interaction
Pattern
Support for synchronous and asynchronous
invocations
Delivered with a function style API
Defined in IDL using operations with arguments and
an optional return value
The application code that uses this interaction
pattern is unaware of how the interaction pattern is
realized
Copyright © 201310
Event Interaction Pattern
The event interaction pattern defines extended ports
for the following roles
• Basic many-to-many publish subscribe messaging
• Event distribution with optional user defined data
Copyright © 201311
State Interaction Pattern
The state interaction pattern defines extended ports
for the following roles
• Distributed state management and access
• Distributed database functionality with eventual
consistency
Copyright © 201312
Deployment
CBDDS also includes deployment tooling
Supports single process, single node, and distributed
deployments
Applications can be deployed using a deployment
plan
Which DDS QoS is used is a deployment decision,
not hardcoded into the business logic
Various options to define a deployment plan
Copyright © Remedy IT13
IDL to C++11
IDL to C++11 is a formal OMG standard that greatly
simplifies the development of IDL based applications
Reuse as much as possible from the C++11 standard
• Standard basic types
• Uses STL containers like std::string, std::vector,
std::array
• Uses C++11 move semantics to provide a safe and
fast API
Standardized IDL::traits<T> to simplify template
programming
Automatic reference counting by using
std::shared_ptr and std::weak_ptr semantics
No new/delete and no plain C++ pointers!
Copyright © Remedy IT14
The Technical Side
CBDDS with C++11 is implemented as part of our
AXCIOMA product
Component related glue code is generated by our
Ruby based IDL compiler
• No dependency on remote CORBA support, all local
interfaces
C++11 representation of the user defined types,
including all types that are used for DDS
communication
But, no DDS vendor supports the IDL to C++11
language mapping out of the box
Copyright © Remedy IT15
C++11 to C++ Conversion
Framework
Based on the user defined IDL types, an implied IDL
definition is generated by RIDLC
• This implied IDL definition is passed to rtiddsgen
RIDLC generates a set of conversion traits to convert
between the RTI Connext DDS C++ type definition
and the C++11 type definition
• By using C++11 move semantics this is in most
cases just a move of memory, no copy!
C++11 representation of the DDS entities uses the
RTI Connext DDS C++ representation and the
conversion traits
At the moment RTI supports IDL to C++11 the
conversion traits will expand to nothing!
Copyright © Remedy IT16
Some Code!
Copyright © Remedy IT17
Sender ReceiverDDS
// Sender component class which publishes one sample to DDS
class Sender_i : public IDL::traits<Sender>::base_type
{
public:
// Register an instance to DDS
virtual void configuration_complete () override {
IDL::traits<Shapes::ShapeType_conn::Writer>::ref_type writer =
context_->get_connection_info_write_data();
instance_handle_ = writer->register_instance (square_);
}
// Write one sample to DDS
virtual void ccm_activate () override {
IDL::traits<Shapes::ShapeType_conn::Writer>::ref_type writer =
context_->get_connection_info_write_data();
writer->write_one (square_, instance_handle_);
}
private:
DDS::InstanceHandle_t instance_handle_;
// Use C++11 uniform initialization to initialize the member
ShapeType square {“GREEN”, 10, 10, 1};
};
Receiver Code (1)
Copyright © Remedy IT18
// Receiver component which receives the samples from DDS
class Receiver_i : public IDL::traits<Receiver>::base_type
{
public:
virtual void configuration_complete () override {}
// We want sample by sample
virtual void ccm_activate () override {
IDL::traits<CCM_DDS::DataListenerControl>::ref_type lc =
context_->get_connection_info_data_control();
lc->mode (CCM_DDS::ListenerMode::ONE_BY_ONE);
}
private:
IDL::traits<Shapes::CCM_Sender_Context>::ref_type context_;
IDL::traits<Shapes::ShapeType_conn::CCM_Listener>::ref_type
data_listener_;
};
Receiver Code (2)
Copyright © Remedy IT19
// Receive the sample from DDS and just dump it to the console
class info_out_i: public
IDL::traits<Shapes::ShapeType_conn::CCM_Listener>::base_type
{
public:
// Sample has been received by DDS
virtual void on_one_data (const ShapeType& shape,
CCM_DDS::ReadInfo&) override {
std::cout << “Received ” << shape << std::endl;
}
private:
IDL::traits<Shapes::CCM_Sender_Context>::ref_type context_;
};
Ruby to DDS
Copyright © Remedy IT20
Ruby to DDS
Ruby is a powerful scripting language
Integrated part of the Ruby on Rails framework for
developing web based applications
R2CORBA makes it possible to use and provide
CORBA functionality using Ruby
R2DDS is a prototype developed by Remedy IT to
use DDS from Ruby
Push data from DDS to the web browser using Ruby
on Rails
Currently generates C++ code based on the IDL type
definition, could potentially use Dynamic Data in the
future
Copyright © Remedy IT21
Some Ruby DDS Code
Copyright © Remedy IT22
// Create all needed DDS entities (without QoS for simplicity)
dfp = DDS.DomainParticipantFactory_init()
dp = dfp.create_participant()
topic = dp.create_topic()
pub = dp.create_publisher()
sub = dp.create_subscriber()
dw = pub.create_datawriter(topic)
dr = sub.create_datareader(topic, listener)
// Create an ORANGE shape and publish it 10 times with increasing
// size and position
shape = ShapeType.new("ORANGE", 10, 10, 10)
$i = 1
while $i <= 10 do
dw.write(shape)
shape.shapesize = $i * 10
shape.x = $i * 10
shape.y = $i * 10
$i=$i+1
sleep(1)
end
Ruby DDS listener Code
Copyright © Remedy IT23
// Define a new Listener that prints the received shape to the
// console
class ShapeListener < DDS::DataReaderListener
def initialize()
end
def on_data_available(reader)
shape = ShapeType.new()
reader.read (shape);
puts "Read sample #{shape.color()} #{shape.x()} #{shape.y()}
#{shape.shapesize()}";
end
end
// Create an instance and create a new DDS datareader with this
// listener
listener = ShapeListener.new()
dr = sub.create_datareader(topic, listener)
Questions?
Copyright © Remedy IT24
Want to know more?
Let us meet here at the RTI London Connext
Conference 2014!
See our website at http://www.remedy.nl
Check our slideshare presentations at
http://www.slideshare.net/RemedyIT
Email me at jwillemsen@remedy.nl
Call us at +31-10-5220139
Follow us on Twitter @RemedyIT
Copyright © Remedy IT25
Contact
26
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 IT

More Related Content

What's hot

Resume_Appaji
Resume_AppajiResume_Appaji
Resume_Appaji
Appaji K
 
Is Your Data Secure
Is Your Data SecureIs Your Data Secure
Is Your Data Secure
Real-Time Innovations (RTI)
 

What's hot (20)

Communication Patterns Using Data-Centric Publish/Subscribe
Communication Patterns Using Data-Centric Publish/SubscribeCommunication Patterns Using Data-Centric Publish/Subscribe
Communication Patterns Using Data-Centric Publish/Subscribe
 
DDS for JMS Programmers
DDS for JMS ProgrammersDDS for JMS Programmers
DDS for JMS Programmers
 
OMG DDS Security Submission Presentation (September 2013 - 6th Revised Submis...
OMG DDS Security Submission Presentation (September 2013 - 6th Revised Submis...OMG DDS Security Submission Presentation (September 2013 - 6th Revised Submis...
OMG DDS Security Submission Presentation (September 2013 - 6th Revised Submis...
 
Resume_Appaji
Resume_AppajiResume_Appaji
Resume_Appaji
 
OMG DDS Security Standard
OMG DDS Security StandardOMG DDS Security Standard
OMG DDS Security Standard
 
RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011
 
Introduction to DDS
Introduction to DDSIntroduction to DDS
Introduction to DDS
 
Reactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDSReactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDS
 
Patterns of Data Distribution
Patterns of Data DistributionPatterns of Data Distribution
Patterns of Data Distribution
 
RTI Data-Distribution Service (DDS) Master Class - 2010
RTI Data-Distribution Service (DDS) Master Class - 2010RTI Data-Distribution Service (DDS) Master Class - 2010
RTI Data-Distribution Service (DDS) Master Class - 2010
 
Is Your Data Secure
Is Your Data SecureIs Your Data Secure
Is Your Data Secure
 
Two Approaches You Must Consider when Architecting Radar Systems
Two Approaches You Must Consider when Architecting Radar SystemsTwo Approaches You Must Consider when Architecting Radar Systems
Two Approaches You Must Consider when Architecting Radar Systems
 
Big datadc skyfall_preso_v2
Big datadc skyfall_preso_v2Big datadc skyfall_preso_v2
Big datadc skyfall_preso_v2
 
Binder: Android IPC
Binder: Android IPCBinder: Android IPC
Binder: Android IPC
 
TechTalk: Connext DDS 5.2.
TechTalk: Connext DDS 5.2.TechTalk: Connext DDS 5.2.
TechTalk: Connext DDS 5.2.
 
Cont0519
Cont0519Cont0519
Cont0519
 
Sdn and open flow tutorial 4
Sdn and open flow tutorial 4Sdn and open flow tutorial 4
Sdn and open flow tutorial 4
 
chaitraresume
chaitraresumechaitraresume
chaitraresume
 
Here Be Dragons: Security Maps of the Container New World
Here Be Dragons: Security Maps of the Container New WorldHere Be Dragons: Security Maps of the Container New World
Here Be Dragons: Security Maps of the Container New World
 
Best Practices Using RTI Connext DDS
Best Practices Using RTI Connext DDSBest Practices Using RTI Connext DDS
Best Practices Using RTI Connext DDS
 

Viewers also liked

Viewers also liked (6)

sDDS: An Adaptable DDS Solution for Wireless Sensor Networks
sDDS: An Adaptable DDS Solution for Wireless Sensor NetworkssDDS: An Adaptable DDS Solution for Wireless Sensor Networks
sDDS: An Adaptable DDS Solution for Wireless Sensor Networks
 
Approaches for Mitigating Discovery Problems in Larger Systems
Approaches for Mitigating Discovery Problems in Larger SystemsApproaches for Mitigating Discovery Problems in Larger Systems
Approaches for Mitigating Discovery Problems in Larger Systems
 
DDS Over Low Bandwidth Data Links
DDS Over Low Bandwidth Data LinksDDS Over Low Bandwidth Data Links
DDS Over Low Bandwidth Data Links
 
Application of DDS on modular Hardware-in-the-loop test benches at Audi
Application of DDS on modular Hardware-in-the-loop test benches at AudiApplication of DDS on modular Hardware-in-the-loop test benches at Audi
Application of DDS on modular Hardware-in-the-loop test benches at Audi
 
Experiencing the Live IIoT
Experiencing the Live IIoTExperiencing the Live IIoT
Experiencing the Live IIoT
 
The Industrial Internet of Things and RTI
The Industrial Internet of Things and RTIThe Industrial Internet of Things and RTI
The Industrial Internet of Things and RTI
 

Similar to Component Based DDS with C++11 and R2DDS

Interoperable DDS Strategies
Interoperable DDS StrategiesInteroperable DDS Strategies
Interoperable DDS Strategies
Twin Oaks Computing, Inc.
 
Company Presentation RemedyIT
Company Presentation RemedyITCompany Presentation RemedyIT
Company Presentation RemedyIT
Remedy IT
 

Similar to Component Based DDS with C++11 and R2DDS (20)

Integrating DDS into AXCIOMA, the component approach
Integrating DDS into AXCIOMA, the component approachIntegrating DDS into AXCIOMA, the component approach
Integrating DDS into AXCIOMA, the component approach
 
Integrating DDS into AXCIOMA - The Component Approach
Integrating DDS into AXCIOMA - The Component ApproachIntegrating DDS into AXCIOMA - The Component Approach
Integrating DDS into AXCIOMA - The Component Approach
 
Integrating DDS into AXCIOMA, the component approach
Integrating DDS into AXCIOMA, the component approachIntegrating DDS into AXCIOMA, the component approach
Integrating DDS into AXCIOMA, the component approach
 
Model Driven, Component Based Development for CBDDS and IDL to C++11
Model Driven, Component Based Development for CBDDS and IDL to C++11Model Driven, Component Based Development for CBDDS and IDL to C++11
Model Driven, Component Based Development for CBDDS and IDL to C++11
 
What Can DDS Do For You?
What Can DDS Do For You?What Can DDS Do For You?
What Can DDS Do For You?
 
Android and DDS
Android and DDSAndroid and DDS
Android and DDS
 
AXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systemsAXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systems
 
AXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systemsAXCIOMA, the component framework for distributed, real-time and embedded systems
AXCIOMA, the component framework for distributed, real-time and embedded systems
 
Interoperable DDS Strategies
Interoperable DDS StrategiesInteroperable DDS Strategies
Interoperable DDS Strategies
 
DDS Programming with IDL to C++11 tutorial
DDS Programming with IDL to C++11 tutorialDDS Programming with IDL to C++11 tutorial
DDS Programming with IDL to C++11 tutorial
 
Twin Oaks Computing Introduction
Twin Oaks Computing IntroductionTwin Oaks Computing Introduction
Twin Oaks Computing Introduction
 
Distributing computing.pptx
Distributing computing.pptxDistributing computing.pptx
Distributing computing.pptx
 
AXCIOMA, the internals, the component framework for distributed, real-time, a...
AXCIOMA, the internals, the component framework for distributed, real-time, a...AXCIOMA, the internals, the component framework for distributed, real-time, a...
AXCIOMA, the internals, the component framework for distributed, real-time, a...
 
AXCIOMA, the internals, the component framework for distributed, real-time, a...
AXCIOMA, the internals, the component framework for distributed, real-time, a...AXCIOMA, the internals, the component framework for distributed, real-time, a...
AXCIOMA, the internals, the component framework for distributed, real-time, a...
 
Developing Mission-Critical Avionics and Defense Systems with Ada and DDS
Developing Mission-Critical Avionics and Defense Systems with Ada and DDSDeveloping Mission-Critical Avionics and Defense Systems with Ada and DDS
Developing Mission-Critical Avionics and Defense Systems with Ada and DDS
 
Modernizing SCA through new Object Management Group (OMG) standards
Modernizing SCA through new Object Management Group (OMG) standardsModernizing SCA through new Object Management Group (OMG) standards
Modernizing SCA through new Object Management Group (OMG) standards
 
Component Based Model Driven Development of Mission Critical Defense Applicat...
Component Based Model Driven Development of Mission Critical Defense Applicat...Component Based Model Driven Development of Mission Critical Defense Applicat...
Component Based Model Driven Development of Mission Critical Defense Applicat...
 
Remedy IT Company presentation
Remedy IT Company presentationRemedy IT Company presentation
Remedy IT Company presentation
 
Company Presentation RemedyIT
Company Presentation RemedyITCompany Presentation RemedyIT
Company Presentation RemedyIT
 
dds.pptx
dds.pptxdds.pptx
dds.pptx
 

More from Remedy IT

F6COM: A Case Study in Extending Container Services through Connectors
F6COM: A Case Study in Extending Container Services through ConnectorsF6COM: A Case Study in Extending Container Services through Connectors
F6COM: A Case Study in Extending Container Services through Connectors
Remedy IT
 
Test What Matters Most
Test What Matters MostTest What Matters Most
Test What Matters Most
Remedy IT
 

More from Remedy IT (19)

CORBA Programming with TAOX11/C++11 tutorial
CORBA Programming with TAOX11/C++11 tutorialCORBA Programming with TAOX11/C++11 tutorial
CORBA Programming with TAOX11/C++11 tutorial
 
Comparing IDL to C++ with IDL to C++11
Comparing IDL to C++ with IDL to C++11Comparing IDL to C++ with IDL to C++11
Comparing IDL to C++ with IDL to C++11
 
Modernizing SCA through new Object Management Group (OMG) standards
Modernizing SCA through new Object Management Group (OMG) standardsModernizing SCA through new Object Management Group (OMG) standards
Modernizing SCA through new Object Management Group (OMG) standards
 
ACE/TAO/CIAO/DAnCE Maintenance overview
ACE/TAO/CIAO/DAnCE Maintenance overviewACE/TAO/CIAO/DAnCE Maintenance overview
ACE/TAO/CIAO/DAnCE Maintenance overview
 
Remedy IT Revised Submission Presentation for the Unified Component Model (UC...
Remedy IT Revised Submission Presentation for the Unified Component Model (UC...Remedy IT Revised Submission Presentation for the Unified Component Model (UC...
Remedy IT Revised Submission Presentation for the Unified Component Model (UC...
 
Revised submission for Unified Component Model (UCM) for Distributed, Real-Ti...
Revised submission for Unified Component Model (UCM) for Distributed, Real-Ti...Revised submission for Unified Component Model (UCM) for Distributed, Real-Ti...
Revised submission for Unified Component Model (UCM) for Distributed, Real-Ti...
 
Component Technologies for Fractionated Satellites
Component Technologies for Fractionated SatellitesComponent Technologies for Fractionated Satellites
Component Technologies for Fractionated Satellites
 
UCM Initial Submission presentation
UCM Initial Submission presentationUCM Initial Submission presentation
UCM Initial Submission presentation
 
Remedy IT Initial Submission for the Unified Component Model (UCM) for Distri...
Remedy IT Initial Submission for the Unified Component Model (UCM) for Distri...Remedy IT Initial Submission for the Unified Component Model (UCM) for Distri...
Remedy IT Initial Submission for the Unified Component Model (UCM) for Distri...
 
Unified Component Model for Distributed, Real- Time and Embedded Systems Requ...
Unified Component Model for Distributed, Real- Time and Embedded Systems Requ...Unified Component Model for Distributed, Real- Time and Embedded Systems Requ...
Unified Component Model for Distributed, Real- Time and Embedded Systems Requ...
 
Request For Proposal Unified Component Model for Distributed, Real-Time and E...
Request For Proposal Unified Component Model for Distributed, Real-Time and E...Request For Proposal Unified Component Model for Distributed, Real-Time and E...
Request For Proposal Unified Component Model for Distributed, Real-Time and E...
 
Test What Matters Most
Test What Matters MostTest What Matters Most
Test What Matters Most
 
IDL to C++03 RFC
IDL to C++03 RFCIDL to C++03 RFC
IDL to C++03 RFC
 
F6COM: A Case Study in Extending Container Services through Connectors
F6COM: A Case Study in Extending Container Services through ConnectorsF6COM: A Case Study in Extending Container Services through Connectors
F6COM: A Case Study in Extending Container Services through Connectors
 
AMI4CCM, custom DDS connectors, and IDL to C++11
AMI4CCM, custom DDS connectors, and IDL to C++11AMI4CCM, custom DDS connectors, and IDL to C++11
AMI4CCM, custom DDS connectors, and IDL to C++11
 
Draft Request For Proposal Unified Component Model for Distributed, Real-Time...
Draft Request For Proposal Unified Component Model for Distributed, Real-Time...Draft Request For Proposal Unified Component Model for Distributed, Real-Time...
Draft Request For Proposal Unified Component Model for Distributed, Real-Time...
 
Test What Matters Most
Test What Matters MostTest What Matters Most
Test What Matters Most
 
Comparing IDL to C++ with IDL to C++11
Comparing IDL to C++ with IDL to C++11Comparing IDL to C++ with IDL to C++11
Comparing IDL to C++ with IDL to C++11
 
Remedy IT Flyer_introduction
Remedy IT Flyer_introductionRemedy IT Flyer_introduction
Remedy IT Flyer_introduction
 

Recently uploaded

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 

Recently uploaded (20)

Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 

Component Based DDS with C++11 and R2DDS

  • 1. Component Based DDS using C++11 R2DDS (Ruby to DDS) RTI London Connext Conference 2014 Johnny Willemsen CTO Remedy IT jwillemsen@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, leading several OMG open 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 Develop implementations of OMG open standards • Open source; TAO, CIAO, R2CORBA • Commercial; TAOX11, AXCIOMA Deliver services related to OMG standards including CORBA, CCM, DDS Deliver services for specific implementations, including RTI Connext DDS Develop open standards as part of the OMG Copyright © Remedy IT3
  • 4. Component Based DDS DDS is a great technology but • It provides a messaging protocol, not a complete architecture • Provides a lot of freedom to the developer which can lead to misuse • Lots of things are left to the application like deployment and threading model design • Vendor portability can be a challenge • No vendor support for the IDL to C++11 language mapping Copyright © Remedy IT4
  • 5. CBDDS Standards CBDDS combines eleven OMG standards into a comprehensive software suite • IDL4, IDL2C++11 • CORBA • DDS, DDS X-Types, DDS Security, RPC4DDS • LwCCM, DDS4CCM, AMI4CCM • D&C Copyright © Remedy IT5
  • 6. CBDDS Principles Interoperable Open Architecture (IOA) Component Based Architecture (CBA) Service Oriented Architecture (SOA) Event Driven Architecture (EDA) Model Driven Architecture (MDA) Copyright © Remedy IT6
  • 7. What is a Component? Independent revisable unit of software with well defined interfaces called “ports” Able to be packaged as an independent deployable set of files Smallest decomposable unit that defines standard ports is a “monolithic component” A “component assembly” is an aggregation of monolithic components or other component assemblies Copyright © Remedy IT7
  • 8. Why Component Based Development? Modularity Reuse Interoperability Extensibility Scalability Reduced Complexity Faster and Cheaper Development Quality and Reliability Deployability Copyright © Remedy IT8
  • 9. Interaction Patterns CBDDS uses so called interaction patterns to define the interaction between user components CBDDS defines request/reply, state, and event interaction patterns An interaction pattern is realized at deployment time using a specific communication middleware, legacy system, or hardware Copyright © 20139
  • 10. Request/Reply Interaction Pattern Support for synchronous and asynchronous invocations Delivered with a function style API Defined in IDL using operations with arguments and an optional return value The application code that uses this interaction pattern is unaware of how the interaction pattern is realized Copyright © 201310
  • 11. Event Interaction Pattern The event interaction pattern defines extended ports for the following roles • Basic many-to-many publish subscribe messaging • Event distribution with optional user defined data Copyright © 201311
  • 12. State Interaction Pattern The state interaction pattern defines extended ports for the following roles • Distributed state management and access • Distributed database functionality with eventual consistency Copyright © 201312
  • 13. Deployment CBDDS also includes deployment tooling Supports single process, single node, and distributed deployments Applications can be deployed using a deployment plan Which DDS QoS is used is a deployment decision, not hardcoded into the business logic Various options to define a deployment plan Copyright © Remedy IT13
  • 14. IDL to C++11 IDL to C++11 is a formal OMG standard that greatly simplifies the development of IDL based applications Reuse as much as possible from the C++11 standard • Standard basic types • Uses STL containers like std::string, std::vector, std::array • Uses C++11 move semantics to provide a safe and fast API Standardized IDL::traits<T> to simplify template programming Automatic reference counting by using std::shared_ptr and std::weak_ptr semantics No new/delete and no plain C++ pointers! Copyright © Remedy IT14
  • 15. The Technical Side CBDDS with C++11 is implemented as part of our AXCIOMA product Component related glue code is generated by our Ruby based IDL compiler • No dependency on remote CORBA support, all local interfaces C++11 representation of the user defined types, including all types that are used for DDS communication But, no DDS vendor supports the IDL to C++11 language mapping out of the box Copyright © Remedy IT15
  • 16. C++11 to C++ Conversion Framework Based on the user defined IDL types, an implied IDL definition is generated by RIDLC • This implied IDL definition is passed to rtiddsgen RIDLC generates a set of conversion traits to convert between the RTI Connext DDS C++ type definition and the C++11 type definition • By using C++11 move semantics this is in most cases just a move of memory, no copy! C++11 representation of the DDS entities uses the RTI Connext DDS C++ representation and the conversion traits At the moment RTI supports IDL to C++11 the conversion traits will expand to nothing! Copyright © Remedy IT16
  • 17. Some Code! Copyright © Remedy IT17 Sender ReceiverDDS // Sender component class which publishes one sample to DDS class Sender_i : public IDL::traits<Sender>::base_type { public: // Register an instance to DDS virtual void configuration_complete () override { IDL::traits<Shapes::ShapeType_conn::Writer>::ref_type writer = context_->get_connection_info_write_data(); instance_handle_ = writer->register_instance (square_); } // Write one sample to DDS virtual void ccm_activate () override { IDL::traits<Shapes::ShapeType_conn::Writer>::ref_type writer = context_->get_connection_info_write_data(); writer->write_one (square_, instance_handle_); } private: DDS::InstanceHandle_t instance_handle_; // Use C++11 uniform initialization to initialize the member ShapeType square {“GREEN”, 10, 10, 1}; };
  • 18. Receiver Code (1) Copyright © Remedy IT18 // Receiver component which receives the samples from DDS class Receiver_i : public IDL::traits<Receiver>::base_type { public: virtual void configuration_complete () override {} // We want sample by sample virtual void ccm_activate () override { IDL::traits<CCM_DDS::DataListenerControl>::ref_type lc = context_->get_connection_info_data_control(); lc->mode (CCM_DDS::ListenerMode::ONE_BY_ONE); } private: IDL::traits<Shapes::CCM_Sender_Context>::ref_type context_; IDL::traits<Shapes::ShapeType_conn::CCM_Listener>::ref_type data_listener_; };
  • 19. Receiver Code (2) Copyright © Remedy IT19 // Receive the sample from DDS and just dump it to the console class info_out_i: public IDL::traits<Shapes::ShapeType_conn::CCM_Listener>::base_type { public: // Sample has been received by DDS virtual void on_one_data (const ShapeType& shape, CCM_DDS::ReadInfo&) override { std::cout << “Received ” << shape << std::endl; } private: IDL::traits<Shapes::CCM_Sender_Context>::ref_type context_; };
  • 20. Ruby to DDS Copyright © Remedy IT20
  • 21. Ruby to DDS Ruby is a powerful scripting language Integrated part of the Ruby on Rails framework for developing web based applications R2CORBA makes it possible to use and provide CORBA functionality using Ruby R2DDS is a prototype developed by Remedy IT to use DDS from Ruby Push data from DDS to the web browser using Ruby on Rails Currently generates C++ code based on the IDL type definition, could potentially use Dynamic Data in the future Copyright © Remedy IT21
  • 22. Some Ruby DDS Code Copyright © Remedy IT22 // Create all needed DDS entities (without QoS for simplicity) dfp = DDS.DomainParticipantFactory_init() dp = dfp.create_participant() topic = dp.create_topic() pub = dp.create_publisher() sub = dp.create_subscriber() dw = pub.create_datawriter(topic) dr = sub.create_datareader(topic, listener) // Create an ORANGE shape and publish it 10 times with increasing // size and position shape = ShapeType.new("ORANGE", 10, 10, 10) $i = 1 while $i <= 10 do dw.write(shape) shape.shapesize = $i * 10 shape.x = $i * 10 shape.y = $i * 10 $i=$i+1 sleep(1) end
  • 23. Ruby DDS listener Code Copyright © Remedy IT23 // Define a new Listener that prints the received shape to the // console class ShapeListener < DDS::DataReaderListener def initialize() end def on_data_available(reader) shape = ShapeType.new() reader.read (shape); puts "Read sample #{shape.color()} #{shape.x()} #{shape.y()} #{shape.shapesize()}"; end end // Create an instance and create a new DDS datareader with this // listener listener = ShapeListener.new() dr = sub.create_datareader(topic, listener)
  • 25. Want to know more? Let us meet here at the RTI London Connext Conference 2014! See our website at http://www.remedy.nl Check our slideshare presentations at http://www.slideshare.net/RemedyIT Email me at jwillemsen@remedy.nl Call us at +31-10-5220139 Follow us on Twitter @RemedyIT Copyright © Remedy IT25
  • 26. Contact 26 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 IT