SlideShare a Scribd company logo
1 of 45
Download to read offline
CORBA Programming
with
TAOX11
The C++11 CORBA Implementation
TAOX11: the CORBA
Implementation by Remedy IT
TAOX11 simplifies development of CORBA based
applications
IDL to C++11 language mapping is easy to use
Greatly reduces the CORBA learning curve
Reduces common user mistakes
Improves application stability and reliability
Significant improvement of run-time performance
CORBA AMI support
Extended suite of unit tests and examples
Copyright © Remedy IT2
TAOX11
Commercial CORBA implementation by Remedy IT
Compliant with the OMG IDL to C++11 language
mapping
IDL compiler with front end supporting IDL2, IDL3,
and IDL3+
Free evaluation versions available from our software
support portal !
More details on http://taox11.remedy.nl
3 Copyright © Remedy IT
Tutorial overview
This tutorial gives an overview of the IDL to C++11
language mapping
Introduces TAOX11, the C++11 CORBA
implementation by Remedy IT
It assumes basic understanding of IDL and CORBA
4 Copyright © Remedy IT
Introduction
5 Copyright © Remedy IT
Problems with IDL to C++
The IDL to C++ language mapping is from the 90’s
IDL to C++ could not depend on various C++ features
as
• C++ namespace
• C++ exceptions
• Standard Template Library
As a result the IDL to C++ language mapping
• Is hard to use correctly
• Uses its own constructs for everything
6 Copyright © Remedy IT
Why a new language mapping?
IDL to C++ language mapping is impossible to
change because
• Multiple implementations are on the market (open
source and commercial)
• A huge amount of applications have been developed
An updated IDL to C++ language mapping would
force all vendors and users to update their products
The standardization of a new C++ revision in 2011
(ISO/IEC 14882:2011, called C++11) gives the
opportunity to define a new language mapping
• C++11 features are not backward compatible with
C++03 or C++99
• A new C++11 mapping leaves the existing mapping
intact
7 Copyright © Remedy IT
Goals of IDL to C++11
Simplify mapping for C++
Make use of the new C++11 features to
• Reduce amount of application code
• Reduce amount of possible errors made
• Gain runtime performance
• Speedup development and testing
Faster time to market
Reduced costs
Reduced training time
8 Copyright © Remedy IT
OMG Specification
IDL to C++11 v1.2 available from the OMG website
as formal/2015-08-01
Revision Task Force (RTF) is active to work on
issues reported
9 Copyright © Remedy IT
IDL Constructs
10 Copyright © Remedy IT
Modules
An IDL module maps to a C++ namespace with the
same name
module M
{
// definitions
};
module A
{
module B
{
// definitions
};
};
IDL C++11
namespace M
{
// definitions
};
namespace A
{
namespace B
{
// definitions
};
};
11 Copyright © Remedy IT
Basic Types
IDL C++11 Default value
short int16_t 0
long int32_t 0
long long int64_t 0
unsigned short uint16_t 0
unsigned long uint32_t 0
unsigned long long uint64_t 0
float float 0.0
double double 0.0
long double long double 0.0
char char 0
wchar wchar_t 0
boolean bool false
octet uint8_t 0
12 Copyright © Remedy IT
Constants
IDL constants are mapped to C++11 constants
using constexpr when possible
const string name = "testing";
interface A
{
const float value = 6.23;
};
IDL C++11
const std::string name {"testing"};
class A
{
public:
static constexpr float value {6.23F};
};
13 Copyright © Remedy IT
String Types
No need to introduce an IDL specific type
mapping but leverage STL
string name;
wstring w_name;
IDL C++11
std::string name {“Hello”};
std::wstring w_name;
std::cout << name << std::endl;
14 Copyright © Remedy IT
Enumerations
IDL enums map to C++11 strongly typed enums
enum Color
{
red,
green,
blue
};
IDL C++11
enum class Color : uint32_t
{
red,
green,
blue
};
Color mycolor {Color::red};
if (mycolor == Color::red)
{
std::cout << “Correct color”;
}
else
{
std::cerr << “Incorrect color “ <<
mycolor << std::endl;
}
15 Copyright © Remedy IT
Sequence
IDL unbounded sequence maps to std::vector
typedef sequence<long> LongSeq;
typedef sequence<LongSeq, 3> LongSeqSeq;
IDL C++11
typedef std::vector <int32_t> LongSeq;
typedef std::vector <LongSeq> LongSeqSeq;
LongSeq mysequence;
// Add an element to the vector
mysequence.push_back (5);
// Dump using C++11 range based for loop
for (const int32_t& e : mysequence)
{
std::cout << e << “;” << std::end;
}
16 Copyright © Remedy IT
Struct (1)
IDL struct maps to a C++ class with copy and move
constructors/assignment operators and accessors
struct Variable {
string name;
};
IDL C++11
class Variable
{
public:
Variable ();
~Variable ();
Variable (const Variable&);
Variable (Variable&&);
Variable& operator= (const Variable& x);
Variable& operator= (Variable&& x);
explicit Variable (std::string name);
void name (const std::string& _name);
void name (std::string&& _name);
const std::string& name () const;
std::string& name ();
};
namespace std
{
template <>
void swap (Variable& m1, Variable& m2);
};
17 Copyright © Remedy IT
Struct (2)
IDL struct maps to a C++ class with copy and move
constructors/assignment operators and accessors
struct Variable {
string name;
};
IDL C++11
Variable v;
Variable v2 (“Hello”);
std::string myname {“Hello”};
// Set a struct member
v.name (myname);
// Get a struct member
std::cout << “name” << v.name () <<
std::endl;
if (v != v2)
{
std::cerr << “names are different”
<<std::endl;
}
18 Copyright © Remedy IT
Array
IDL array map to C++11 std::array
typedef long L[10];
typedef string V[10];
typedef string M[1][2][3];
IDL C++11
typedef std::array <int32_t, 10> L;
typedef std::array <std::string, 10> V;
typedef std::array <std::array <std::array
<std::string, 3>, 2>, 1> M;
// Initialize the array
F f = { {1, 2, 3, 4, 5} }
// Check the size of an array
if (f.size () != 5)
19 Copyright © Remedy IT
Reference Types (1)
An IDL interface maps to so called reference types
Reference types are reference counted, for example
given type A
• Strong reference type behaves like
std::shared_ptr and is available as
IDL::traits<A>::ref_type
• Weak reference type behaves like std::weak_ptr
and is available as
IDL::traits<A>::weak_ref_type
A nil reference type is represented as nullptr
Invoking an operation on a nil reference results in a
INV_OBJREF exception
20 Copyright © Remedy IT
Reference Types (2)
Given IDL type A the mapping delivers
IDL::traits<A> with type traits
interface A
{
// definitions
};
IDL C++11
// Obtain a reference
IDL::traits<A>::ref_type a = // .. obtain a
// reference
// Obtain a weak reference
IDL::traits<A>::weak_ref_type w =
a.weak_reference();
// Obtain a strong reference from a weak one
IDL::traits<A>::ref_type p = w.lock ();
if (a == nullptr) // Legal comparisons
if (a != nullptr ) // legal comparison
if (a) // legal usage, true if a != nullptr
if (!a) // legal usage, true if a == nullptr
if (a == 0) // illegal, results in a compile
// error
delete a; // illegal, results in a compile error
21 Copyright © Remedy IT
Reference Types (3)
Reference types can only be constructed using
CORBA::make_reference
interface A
{
// definitions
};
IDL C++11
// Servant implementation class
class A_impl final : public
CORBA::servant_traits<A>::base_type
{
}
// Create a servant reference using
// make_reference
CORBA::servant_traits<A>::ref_type a_ref =
CORBA::make_reference<A_impl> ();
// We could use new, but the resulting
// pointer can’t be used for making any
// CORBA call because the pointer can’t be
// used to construct a reference type which
// is the only thing the API accepts
A_impl* p = new ACE_impl ();
// Or we can obtain a reference from another
// method
IDL::traits<A>::ref_type = foo->get_a ();
22 Copyright © Remedy IT
Reference Types (4)
Widening and narrowing references
interface A
{
// definitions
};
interface B : A
{
// definitions
};
IDL C++11
IDL::traits<B>::ref_type bp = ...
// Implicit widening
IDL::traits<A>::ref_type ap = bp;
// Implicit widening
IDL::traits<Object>::ref_type objp = bp;
// Implicit widening
objp = ap;
// Explicit narrowing
bp = IDL::traits<B>::narrow (ap)
23 Copyright © Remedy IT
Argument Passing
Simplified rules for argument passing compared to
IDL to C++
No need for new/delete when passing arguments
The C++11 move semantics can be used to prevent
copying of data
Given an argument of A of type P:
• In: for all primitive types, enums, and reference
types, the argument is passed as P. For all other
types, the argument is passed as const P&
• Inout: passed as P&
• Out: passed as P&
• Return type: returned as P
24 Copyright © Remedy IT
IDL Traits
For each IDL type a IDL::traits<> specialization
will be provided
The IDL traits contain a set of members with meta
information for the specific IDL type
The IDL traits are especially useful for template meta
programming
Copyright © Remedy IT25
Implement Interfaces
Given a local interface A the implementation has to
be derived from IDL::traits<A>::base_type
Given a regular interface A the CORBA servant
implementation has to be derived from
CORBA::servant_traits<A>::base_type
In both cases a client reference is available as
IDL::traits<A>::ref_type
Copyright © Remedy IT26
CORBA AMI
TAOX11 has support for the callback CORBA AMI
support
The TAO AMI implementation has the disadvantage
that when AMI is enabled for an IDL file all users
have to include the TAO Messaging library
TAOX11 separates CORBA AMI into a new set of
source files, a client not needing AMI doesn’t have to
link any CORBA Messaging support!
All sendc_ operations are member of a derived
CORBA AMI stub, not part of the regular
synchronous stub
Copyright © Remedy IT27
CORBA AMI Traits
Instead of remembering some specific naming rules
a new CORBA::amic_traits<> trait has been
defined
Contains the concrete types as members
• replyhandler_base_type: the base type for
implementing the reply handler servant
• replyhandler_servant_ref_type: the type for
a reference to the servant of the reply handler
• ref_type: the client reference to the stub with all
synchronous operations
Copyright © Remedy IT28
CORBA AMI Example
// Obtain a regular object reference from somewhere, Test::A has one method called foo
IDL::traits<Test::A>::ref_type stub = …;
// Narrow the regular object reference to the CORBA AMI stub (assuming this has been
// enabled during code generation
CORBA::amic_traits<Test::A>::ref_type async_stub =
CORBA::amic_traits<Test::A>::narrow (stub);
// Assume we have a Handler class as reply handler implemented, create it and
// register this as CORBA servant
CORBA::amic_traits<Test::A>::replyhandler_servant_ref_type h =
CORBA::make_reference<Handler> ();
PortableServer::ObjectId id =
root_poa->activate_object (h);
IDL::traits<CORBA::Object>::ref_type handler_ref =
root_poa->id_to_reference (id);
CORBA::amic_traits<Test::A>::replyhandler_ref_type test_handler =
CORBA::amic_traits<Test::A>::replyhandler_traits:::narrow (handler_ref);
// Invoke an asynchronous operation, can only be done on async_stub, not on stub
async_stub->sendc_foo (test_handler, 12);
// But we can also invoke a synchronous call
async_stub->foo (12);
Copyright © Remedy IT29
Valuetypes
Valuetypes are mapped to a set of classes which are
accessible through the IDL::traits<>
• IDL::traits<>::base_type provides the
abstract base class from which the valuetype
implementation could be derived from
• IDL::traits<>::obv_type provides the object
by value class that implements already all state
accessors and from which the valuetype
implementation can be derived from
• IDL::traits<>::factory_type provides base
class for the valuetype factory implementation
Copyright © Remedy IT30
Example CORBA application
31 Copyright © Remedy IT
CORBA Hello world
interface Hello
{
/// Return a simple string
string get_string ();
/// A method to shutdown the server
oneway void shutdown ();
};
IDL
32 Copyright © Remedy IT
CORBA client
int main(int argc, char* argv[])
{
try
{
// Obtain the ORB
IDL::traits<CORBA::ORB>::ref_type orb = CORBA::ORB_init (argc, argv);
// Create the object reference
IDL::traits<CORBA::Object>::ref_type obj = orb->string_to_object ("file://test.ior");
// Narrow it to the needed type
IDL::traits<Test::Hello>::ref_type hello = IDL::traits<Test::Hello>::narrow (obj);
// Invoke a method, invoking on a nil reference will result in an exception
std::cout << "hello->get_string () returned " << hello->get_string () << std::endl;
// Shutdown the server
hello->shutdown ();
// Cleanup our ORB
orb->destroy ();
}
catch (const std::exception& e)
{
// All exceptions are derived from std::exception
std::cerr << "exception caught: " << e.what () << std::endl;
}
return 0;
}
33 Copyright © Remedy IT
CORBA servant
C++11 CORBA servant for type T must be derived
from CORBA::servant_traits<T>::base_type
class Hello final : public CORBA::servant_traits<Test::Hello>::base_type
{
public:
// Constructor
Hello (IDL::traits<CORBA::ORB>::ref_type orb) : orb_ (orb) {}
// Destructor
virtual ~Hello () {}
// Implement pure virtual methods from the base_type
virtual std::string get_string () override
{
return “Hello!”;
}
virtual void shutdown () override
{
this->orb_->shutdown (false);
}
private:
// Use an ORB reference to shutdown the application.
IDL::traits<CORBA::ORB>::ref_type orb_;
};
34 Copyright © Remedy IT
CORBA server (1)
int main(int argc, char* argv[])
{
try
{
// Obtain our ORB
IDL::traits<CORBA::ORB>::ref_type orb = CORBA::ORB_init (argc, argv);
// Obtain our POA and POAManager
IDL::traits<CORBA::Object>::ref_type obj = orb->resolve_initial_references ("RootPOA");
IDL::traits<PortableServer::POA>::ref_type root_poa =
IDL::traits<PortableServer::POA>::narrow (obj);
IDL::traits<PortableServer::POAManager>::ref_type poaman = root_poa->the_POAManager ();
// Create the servant
CORBA::servant_traits<Test::Hello>::ref_type hello_impl =
CORBA::make_reference<Hello> (orb);
// Activate the servant as CORBA object
PortableServer::ObjectId id = root_poa->activate_object (hello_impl);
IDL::traits<CORBA::Object>::ref_type hello_obj = root_poa->id_to_reference (id);
IDL::traits<Test::Hello>::ref_type hello =
IDL::traits<Test::Hello>::narrow (hello_obj);
// Put the IOR on disk
std::string ior = orb->object_to_string (hello);
std::ofstream fos("test.ior");
fos << ior;
fos.close ();
35 Copyright © Remedy IT
CORBA server (2)
// Activate our POA
poaman->activate ();
// And run the ORB, this method will return at the moment the ORB has been shutdown
orb->run ();
// Cleanup our resources
root_poa->destroy (true, true);
orb->destroy ();
}
catch (const std::exception& e)
{
// Any exception will be caught here
std::cerr << "exception caught: " << e.what () << std::endl;
}
return 0;
}
36 Copyright © Remedy IT
Auto specifier
C++11 has support for auto as new type specifier
The compiler will deduce the type of a variable
automatically from its initializers
Will simplify the CORBA example further
Copyright © Remedy IT37
CORBA client
int main(int argc, char* argv[])
{
try
{
// Obtain the ORB
auto orb = CORBA::ORB_init (argc, argv);
// Create the object reference
auto obj = orb->string_to_object ("file://test.ior");
// Narrow it to the needed type
auto hello = IDL::traits<Test::Hello>::narrow (obj);
// Invoke a method, invoking on a nil reference will result in an exception
std::cout << "hello->get_string () returned " << hello->get_string () << std::endl;
// Shutdown the server
hello->shutdown ();
// Cleanup our ORB
orb->destroy ();
}
catch (const std::exception& e)
{
// All exceptions are derived from std::exception
std::cerr << "exception caught: " << e.what () << std::endl;
}
return 0;
}
38 Copyright © Remedy IT
CORBA servant
C++11 CORBA servant for type T must be derived
from CORBA::servant_traits<T>::base_type
class Hello final : public CORBA::servant_traits<Test::Hello>::base_type
{
public:
// Constructor
Hello (IDL::traits<CORBA::ORB>::ref_type orb) : orb_ (orb) {}
// Destructor
virtual ~Hello () {}
// Implement pure virtual methods from the base_type
virtual std::string get_string () override
{
return “Hello!”;
}
virtual void shutdown () override
{
this->orb_->shutdown (false);
}
private:
// Use an ORB reference to shutdown the application.
IDL::traits<CORBA::ORB>::ref_type orb_;
};
39 Copyright © Remedy IT
CORBA server (1)
int main(int argc, char* argv[])
{
try
{
// Obtain our ORB
auto _orb = CORBA::ORB_init (argc, argv);
// Obtain our POA and POAManager
auto obj = _orb->resolve_initial_references ("RootPOA");
auto root_poa = IDL::traits<PortableServer::POA>::narrow (obj);
auto poaman = root_poa->the_POAManager ();
// Create the servant
auto hello_impl = CORBA::make_reference<Hello> (orb);
// Activate the servant as CORBA object
auto id = root_poa->activate_object (hello_impl);
auto hello_obj = root_poa->id_to_reference (id);
auto hello = IDL::traits<Test::Hello>::narrow (hello_obj);
// Put the IOR on disk
auto ior = orb->object_to_string (hello);
std::ofstream fos("test.ior");
fos << ior;
fos.close ();
40 Copyright © Remedy IT
CORBA server (2)
// Activate our POA
poaman->activate ();
// And run the ORB, this method will return at the moment the ORB has been shutdown
orb->run ();
// Cleanup our resources
root_poa->destroy (true, true);
orb->destroy ();
}
catch (const std::exception& e)
{
// Any exception will be caught here
std::cerr << "exception caught: " << e.what () << std::endl;
}
return 0;
}
41 Copyright © Remedy IT
Tips & Tricks
Don’t use new/delete
Use pass by value together with C++11 move
semantics
42 Copyright © Remedy IT
Conclusion
C++11 simplifies CORBA programming
The combination of reference counting and C++11
move semantics make the code much safer and
secure
Application code is much smaller and easier to read
43 Copyright © Remedy IT
Want to know more?
Look at the TAOX11 website at
http://taox11.remedy.nl
Check the Remedy IT provided examples at
https://github.com/RemedyIT/idl2cpp11
Request your free-of-charge evaluation license, see
http://swsupport.remedy.nl
Contact us, see http://www.remedy.nl
44 Copyright © Remedy IT
Contact
Copyright © Remedy IT45
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

More Related Content

What's hot

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...Remedy IT
 
Rhapsody Software
Rhapsody SoftwareRhapsody Software
Rhapsody SoftwareBill Duncan
 
Model-Driven Development for Safety-Critical Software
Model-Driven Development for Safety-Critical SoftwareModel-Driven Development for Safety-Critical Software
Model-Driven Development for Safety-Critical Softwaregjuljo
 
IBM Rhapsody Code Generation Customization
IBM Rhapsody Code Generation CustomizationIBM Rhapsody Code Generation Customization
IBM Rhapsody Code Generation Customizationgjuljo
 
Component Object Model (COM, DCOM, COM+)
Component Object Model (COM, DCOM, COM+)Component Object Model (COM, DCOM, COM+)
Component Object Model (COM, DCOM, COM+)Peter R. Egli
 
IBM Rational Rhapsody and Qt Integration
IBM Rational Rhapsody and Qt IntegrationIBM Rational Rhapsody and Qt Integration
IBM Rational Rhapsody and Qt Integrationgjuljo
 
Iisrt arshiya hesarur
Iisrt arshiya hesarurIisrt arshiya hesarur
Iisrt arshiya hesarurIISRT
 
Rhapsody reverseengineering
Rhapsody reverseengineeringRhapsody reverseengineering
Rhapsody reverseengineeringScott Althouse
 
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...Maarten Balliauw
 
Compiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionCompiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionEelco Visser
 
05 rpc-case studies
05 rpc-case studies05 rpc-case studies
05 rpc-case studieshushu
 
Getting started with IBM Rational Rhapsody in Ada
Getting started with IBM Rational Rhapsody in AdaGetting started with IBM Rational Rhapsody in Ada
Getting started with IBM Rational Rhapsody in AdaFrank Braun
 
Performance Verification for ESL Design Methodology from AADL Models
Performance Verification for ESL Design Methodology from AADL ModelsPerformance Verification for ESL Design Methodology from AADL Models
Performance Verification for ESL Design Methodology from AADL ModelsSpace Codesign
 
Portlet Programming Using Jsr 168
Portlet Programming Using Jsr 168Portlet Programming Using Jsr 168
Portlet Programming Using Jsr 168Saikrishna Basetti
 

What's hot (20)

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...
 
Rhapsody Software
Rhapsody SoftwareRhapsody Software
Rhapsody Software
 
Model-Driven Development for Safety-Critical Software
Model-Driven Development for Safety-Critical SoftwareModel-Driven Development for Safety-Critical Software
Model-Driven Development for Safety-Critical Software
 
Prasad_CTP
Prasad_CTPPrasad_CTP
Prasad_CTP
 
IBM Rhapsody Code Generation Customization
IBM Rhapsody Code Generation CustomizationIBM Rhapsody Code Generation Customization
IBM Rhapsody Code Generation Customization
 
Component Object Model (COM, DCOM, COM+)
Component Object Model (COM, DCOM, COM+)Component Object Model (COM, DCOM, COM+)
Component Object Model (COM, DCOM, COM+)
 
IBM Rational Rhapsody and Qt Integration
IBM Rational Rhapsody and Qt IntegrationIBM Rational Rhapsody and Qt Integration
IBM Rational Rhapsody and Qt Integration
 
Iisrt arshiya hesarur
Iisrt arshiya hesarurIisrt arshiya hesarur
Iisrt arshiya hesarur
 
Rhapsody reverseengineering
Rhapsody reverseengineeringRhapsody reverseengineering
Rhapsody reverseengineering
 
COM
COMCOM
COM
 
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
 
Compiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionCompiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler Construction
 
Using Automation to Improve Software Services
Using Automation to Improve Software ServicesUsing Automation to Improve Software Services
Using Automation to Improve Software Services
 
05 rpc-case studies
05 rpc-case studies05 rpc-case studies
05 rpc-case studies
 
Getting started with IBM Rational Rhapsody in Ada
Getting started with IBM Rational Rhapsody in AdaGetting started with IBM Rational Rhapsody in Ada
Getting started with IBM Rational Rhapsody in Ada
 
COM+ & MSMQ
COM+ & MSMQCOM+ & MSMQ
COM+ & MSMQ
 
Performance Verification for ESL Design Methodology from AADL Models
Performance Verification for ESL Design Methodology from AADL ModelsPerformance Verification for ESL Design Methodology from AADL Models
Performance Verification for ESL Design Methodology from AADL Models
 
Presentation On Com Dcom
Presentation On Com DcomPresentation On Com Dcom
Presentation On Com Dcom
 
Portlet Programming Using Jsr 168
Portlet Programming Using Jsr 168Portlet Programming Using Jsr 168
Portlet Programming Using Jsr 168
 
.Net & c#
.Net & c#.Net & c#
.Net & c#
 

Viewers also liked

Evolution from LwCCM to UCM
Evolution from LwCCM to UCMEvolution from LwCCM to UCM
Evolution from LwCCM to UCMRemedy IT
 
UCM Initial Submission presentation
UCM Initial Submission presentationUCM Initial Submission presentation
UCM Initial Submission presentationRemedy IT
 
Corba introduction and simple example
Corba introduction and simple example Corba introduction and simple example
Corba introduction and simple example Alexia Wang
 
Siebel Enterprise Data Quality for Siebel
Siebel Enterprise Data Quality for SiebelSiebel Enterprise Data Quality for Siebel
Siebel Enterprise Data Quality for SiebelJeroen Burgers
 
Oracle Ucm General Presentation Linked In
Oracle Ucm General Presentation Linked InOracle Ucm General Presentation Linked In
Oracle Ucm General Presentation Linked InJan Echarlod
 
Corba concepts & corba architecture
Corba concepts & corba architectureCorba concepts & corba architecture
Corba concepts & corba architecturenupurmakhija1211
 

Viewers also liked (8)

Evolution from LwCCM to UCM
Evolution from LwCCM to UCMEvolution from LwCCM to UCM
Evolution from LwCCM to UCM
 
Chapter 17 corba
Chapter 17 corbaChapter 17 corba
Chapter 17 corba
 
UCM Initial Submission presentation
UCM Initial Submission presentationUCM Initial Submission presentation
UCM Initial Submission presentation
 
Corba introduction and simple example
Corba introduction and simple example Corba introduction and simple example
Corba introduction and simple example
 
Siebel Enterprise Data Quality for Siebel
Siebel Enterprise Data Quality for SiebelSiebel Enterprise Data Quality for Siebel
Siebel Enterprise Data Quality for Siebel
 
Oracle Ucm General Presentation Linked In
Oracle Ucm General Presentation Linked InOracle Ucm General Presentation Linked In
Oracle Ucm General Presentation Linked In
 
Corba concepts & corba architecture
Corba concepts & corba architectureCorba concepts & corba architecture
Corba concepts & corba architecture
 
Corba
CorbaCorba
Corba
 

Similar to 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++11Remedy IT
 
AMI4CCM_IDL2CPP
AMI4CCM_IDL2CPPAMI4CCM_IDL2CPP
AMI4CCM_IDL2CPPRemedy IT
 
IDL to C++11 revised submission presentation
IDL to C++11 revised submission presentationIDL to C++11 revised submission presentation
IDL to C++11 revised submission presentationRemedy IT
 
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 approachRemedy IT
 
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++11Remedy IT
 
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 ApproachReal-Time Innovations (RTI)
 
Common Object Request Broker Architecture - CORBA
Common Object Request Broker Architecture - CORBACommon Object Request Broker Architecture - CORBA
Common Object Request Broker Architecture - CORBAPeter R. Egli
 
IDL to C++11 OMG RTWS presentations
IDL to C++11 OMG RTWS presentationsIDL to C++11 OMG RTWS presentations
IDL to C++11 OMG RTWS presentationsRemedy IT
 
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++11Remedy IT
 
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) standardsRemedy IT
 
Component Based DDS with C++11 and R2DDS
Component Based DDS with C++11 and R2DDSComponent Based DDS with C++11 and R2DDS
Component Based DDS with C++11 and R2DDSRemedy IT
 
PLUG code generation tool
PLUG code generation toolPLUG code generation tool
PLUG code generation toolEmmanuel Fuchs
 
AmiBroker AFL to DLL Conversion
AmiBroker  AFL to DLL ConversionAmiBroker  AFL to DLL Conversion
AmiBroker AFL to DLL Conversionafl2dll
 
Ch07 Programming for Security Professionals
Ch07 Programming for Security ProfessionalsCh07 Programming for Security Professionals
Ch07 Programming for Security Professionalsphanleson
 
IDL to C++11 initial submission presentation
IDL to C++11 initial submission presentationIDL to C++11 initial submission presentation
IDL to C++11 initial submission presentationRemedy IT
 
Accelerated Mac OS X Core Dump Analysis training public slides
Accelerated Mac OS X Core Dump Analysis training public slidesAccelerated Mac OS X Core Dump Analysis training public slides
Accelerated Mac OS X Core Dump Analysis training public slidesDmitry Vostokov
 
Lecture-1&2.pdf Visual Programming C# .net framework
Lecture-1&2.pdf Visual Programming C# .net frameworkLecture-1&2.pdf Visual Programming C# .net framework
Lecture-1&2.pdf Visual Programming C# .net frameworkAbdullahNadeem78
 

Similar to CORBA Programming with TAOX11/C++11 tutorial (20)

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
 
AMI4CCM_IDL2CPP
AMI4CCM_IDL2CPPAMI4CCM_IDL2CPP
AMI4CCM_IDL2CPP
 
IDL to C++11 revised submission presentation
IDL to C++11 revised submission presentationIDL to C++11 revised submission presentation
IDL to C++11 revised submission presentation
 
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
 
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
 
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
 
Common Object Request Broker Architecture - CORBA
Common Object Request Broker Architecture - CORBACommon Object Request Broker Architecture - CORBA
Common Object Request Broker Architecture - CORBA
 
IDL to C++11 OMG RTWS presentations
IDL to C++11 OMG RTWS presentationsIDL to C++11 OMG RTWS presentations
IDL to C++11 OMG RTWS presentations
 
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
 
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 DDS with C++11 and R2DDS
Component Based DDS with C++11 and R2DDSComponent Based DDS with C++11 and R2DDS
Component Based DDS with C++11 and R2DDS
 
Introduction to C Programming
Introduction to C ProgrammingIntroduction to C Programming
Introduction to C Programming
 
PLUG code generation tool
PLUG code generation toolPLUG code generation tool
PLUG code generation tool
 
AmiBroker AFL to DLL Conversion
AmiBroker  AFL to DLL ConversionAmiBroker  AFL to DLL Conversion
AmiBroker AFL to DLL Conversion
 
Ch07 Programming for Security Professionals
Ch07 Programming for Security ProfessionalsCh07 Programming for Security Professionals
Ch07 Programming for Security Professionals
 
IDL to C++11 initial submission presentation
IDL to C++11 initial submission presentationIDL to C++11 initial submission presentation
IDL to C++11 initial submission presentation
 
Accelerated Mac OS X Core Dump Analysis training public slides
Accelerated Mac OS X Core Dump Analysis training public slidesAccelerated Mac OS X Core Dump Analysis training public slides
Accelerated Mac OS X Core Dump Analysis training public slides
 
C# in depth
C# in depthC# in depth
C# in depth
 
Lecture-1&2.pdf Visual Programming C# .net framework
Lecture-1&2.pdf Visual Programming C# .net frameworkLecture-1&2.pdf Visual Programming C# .net framework
Lecture-1&2.pdf Visual Programming C# .net framework
 
C++ Constructs.pptx
C++ Constructs.pptxC++ Constructs.pptx
C++ Constructs.pptx
 

More from Remedy IT

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 systemsRemedy IT
 
Remedy IT Company presentation
Remedy IT Company presentationRemedy IT Company presentation
Remedy IT Company presentationRemedy IT
 
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 tutorialRemedy IT
 
ACE/TAO/CIAO/DAnCE Maintenance overview
ACE/TAO/CIAO/DAnCE Maintenance overviewACE/TAO/CIAO/DAnCE Maintenance overview
ACE/TAO/CIAO/DAnCE Maintenance overviewRemedy IT
 
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...Remedy IT
 
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...Remedy IT
 
Component Technologies for Fractionated Satellites
Component Technologies for Fractionated SatellitesComponent Technologies for Fractionated Satellites
Component Technologies for Fractionated SatellitesRemedy IT
 
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...Remedy IT
 
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...Remedy IT
 
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...Remedy IT
 
Test What Matters Most
Test What Matters MostTest What Matters Most
Test What Matters MostRemedy IT
 
IDL to C++03 RFC
IDL to C++03 RFCIDL to C++03 RFC
IDL to C++03 RFCRemedy 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 ConnectorsRemedy IT
 
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...Remedy IT
 
Test What Matters Most
Test What Matters MostTest What Matters Most
Test What Matters MostRemedy IT
 
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
 

More from Remedy IT (16)

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
 
Remedy IT Company presentation
Remedy IT Company presentationRemedy IT Company presentation
Remedy IT Company presentation
 
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
 
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
 
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
 
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
 
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...
 

Recently uploaded

A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 

Recently uploaded (20)

A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 

CORBA Programming with TAOX11/C++11 tutorial

  • 2. TAOX11: the CORBA Implementation by Remedy IT TAOX11 simplifies development of CORBA based applications IDL to C++11 language mapping is easy to use Greatly reduces the CORBA learning curve Reduces common user mistakes Improves application stability and reliability Significant improvement of run-time performance CORBA AMI support Extended suite of unit tests and examples Copyright © Remedy IT2
  • 3. TAOX11 Commercial CORBA implementation by Remedy IT Compliant with the OMG IDL to C++11 language mapping IDL compiler with front end supporting IDL2, IDL3, and IDL3+ Free evaluation versions available from our software support portal ! More details on http://taox11.remedy.nl 3 Copyright © Remedy IT
  • 4. Tutorial overview This tutorial gives an overview of the IDL to C++11 language mapping Introduces TAOX11, the C++11 CORBA implementation by Remedy IT It assumes basic understanding of IDL and CORBA 4 Copyright © Remedy IT
  • 6. Problems with IDL to C++ The IDL to C++ language mapping is from the 90’s IDL to C++ could not depend on various C++ features as • C++ namespace • C++ exceptions • Standard Template Library As a result the IDL to C++ language mapping • Is hard to use correctly • Uses its own constructs for everything 6 Copyright © Remedy IT
  • 7. Why a new language mapping? IDL to C++ language mapping is impossible to change because • Multiple implementations are on the market (open source and commercial) • A huge amount of applications have been developed An updated IDL to C++ language mapping would force all vendors and users to update their products The standardization of a new C++ revision in 2011 (ISO/IEC 14882:2011, called C++11) gives the opportunity to define a new language mapping • C++11 features are not backward compatible with C++03 or C++99 • A new C++11 mapping leaves the existing mapping intact 7 Copyright © Remedy IT
  • 8. Goals of IDL to C++11 Simplify mapping for C++ Make use of the new C++11 features to • Reduce amount of application code • Reduce amount of possible errors made • Gain runtime performance • Speedup development and testing Faster time to market Reduced costs Reduced training time 8 Copyright © Remedy IT
  • 9. OMG Specification IDL to C++11 v1.2 available from the OMG website as formal/2015-08-01 Revision Task Force (RTF) is active to work on issues reported 9 Copyright © Remedy IT
  • 11. Modules An IDL module maps to a C++ namespace with the same name module M { // definitions }; module A { module B { // definitions }; }; IDL C++11 namespace M { // definitions }; namespace A { namespace B { // definitions }; }; 11 Copyright © Remedy IT
  • 12. Basic Types IDL C++11 Default value short int16_t 0 long int32_t 0 long long int64_t 0 unsigned short uint16_t 0 unsigned long uint32_t 0 unsigned long long uint64_t 0 float float 0.0 double double 0.0 long double long double 0.0 char char 0 wchar wchar_t 0 boolean bool false octet uint8_t 0 12 Copyright © Remedy IT
  • 13. Constants IDL constants are mapped to C++11 constants using constexpr when possible const string name = "testing"; interface A { const float value = 6.23; }; IDL C++11 const std::string name {"testing"}; class A { public: static constexpr float value {6.23F}; }; 13 Copyright © Remedy IT
  • 14. String Types No need to introduce an IDL specific type mapping but leverage STL string name; wstring w_name; IDL C++11 std::string name {“Hello”}; std::wstring w_name; std::cout << name << std::endl; 14 Copyright © Remedy IT
  • 15. Enumerations IDL enums map to C++11 strongly typed enums enum Color { red, green, blue }; IDL C++11 enum class Color : uint32_t { red, green, blue }; Color mycolor {Color::red}; if (mycolor == Color::red) { std::cout << “Correct color”; } else { std::cerr << “Incorrect color “ << mycolor << std::endl; } 15 Copyright © Remedy IT
  • 16. Sequence IDL unbounded sequence maps to std::vector typedef sequence<long> LongSeq; typedef sequence<LongSeq, 3> LongSeqSeq; IDL C++11 typedef std::vector <int32_t> LongSeq; typedef std::vector <LongSeq> LongSeqSeq; LongSeq mysequence; // Add an element to the vector mysequence.push_back (5); // Dump using C++11 range based for loop for (const int32_t& e : mysequence) { std::cout << e << “;” << std::end; } 16 Copyright © Remedy IT
  • 17. Struct (1) IDL struct maps to a C++ class with copy and move constructors/assignment operators and accessors struct Variable { string name; }; IDL C++11 class Variable { public: Variable (); ~Variable (); Variable (const Variable&); Variable (Variable&&); Variable& operator= (const Variable& x); Variable& operator= (Variable&& x); explicit Variable (std::string name); void name (const std::string& _name); void name (std::string&& _name); const std::string& name () const; std::string& name (); }; namespace std { template <> void swap (Variable& m1, Variable& m2); }; 17 Copyright © Remedy IT
  • 18. Struct (2) IDL struct maps to a C++ class with copy and move constructors/assignment operators and accessors struct Variable { string name; }; IDL C++11 Variable v; Variable v2 (“Hello”); std::string myname {“Hello”}; // Set a struct member v.name (myname); // Get a struct member std::cout << “name” << v.name () << std::endl; if (v != v2) { std::cerr << “names are different” <<std::endl; } 18 Copyright © Remedy IT
  • 19. Array IDL array map to C++11 std::array typedef long L[10]; typedef string V[10]; typedef string M[1][2][3]; IDL C++11 typedef std::array <int32_t, 10> L; typedef std::array <std::string, 10> V; typedef std::array <std::array <std::array <std::string, 3>, 2>, 1> M; // Initialize the array F f = { {1, 2, 3, 4, 5} } // Check the size of an array if (f.size () != 5) 19 Copyright © Remedy IT
  • 20. Reference Types (1) An IDL interface maps to so called reference types Reference types are reference counted, for example given type A • Strong reference type behaves like std::shared_ptr and is available as IDL::traits<A>::ref_type • Weak reference type behaves like std::weak_ptr and is available as IDL::traits<A>::weak_ref_type A nil reference type is represented as nullptr Invoking an operation on a nil reference results in a INV_OBJREF exception 20 Copyright © Remedy IT
  • 21. Reference Types (2) Given IDL type A the mapping delivers IDL::traits<A> with type traits interface A { // definitions }; IDL C++11 // Obtain a reference IDL::traits<A>::ref_type a = // .. obtain a // reference // Obtain a weak reference IDL::traits<A>::weak_ref_type w = a.weak_reference(); // Obtain a strong reference from a weak one IDL::traits<A>::ref_type p = w.lock (); if (a == nullptr) // Legal comparisons if (a != nullptr ) // legal comparison if (a) // legal usage, true if a != nullptr if (!a) // legal usage, true if a == nullptr if (a == 0) // illegal, results in a compile // error delete a; // illegal, results in a compile error 21 Copyright © Remedy IT
  • 22. Reference Types (3) Reference types can only be constructed using CORBA::make_reference interface A { // definitions }; IDL C++11 // Servant implementation class class A_impl final : public CORBA::servant_traits<A>::base_type { } // Create a servant reference using // make_reference CORBA::servant_traits<A>::ref_type a_ref = CORBA::make_reference<A_impl> (); // We could use new, but the resulting // pointer can’t be used for making any // CORBA call because the pointer can’t be // used to construct a reference type which // is the only thing the API accepts A_impl* p = new ACE_impl (); // Or we can obtain a reference from another // method IDL::traits<A>::ref_type = foo->get_a (); 22 Copyright © Remedy IT
  • 23. Reference Types (4) Widening and narrowing references interface A { // definitions }; interface B : A { // definitions }; IDL C++11 IDL::traits<B>::ref_type bp = ... // Implicit widening IDL::traits<A>::ref_type ap = bp; // Implicit widening IDL::traits<Object>::ref_type objp = bp; // Implicit widening objp = ap; // Explicit narrowing bp = IDL::traits<B>::narrow (ap) 23 Copyright © Remedy IT
  • 24. Argument Passing Simplified rules for argument passing compared to IDL to C++ No need for new/delete when passing arguments The C++11 move semantics can be used to prevent copying of data Given an argument of A of type P: • In: for all primitive types, enums, and reference types, the argument is passed as P. For all other types, the argument is passed as const P& • Inout: passed as P& • Out: passed as P& • Return type: returned as P 24 Copyright © Remedy IT
  • 25. IDL Traits For each IDL type a IDL::traits<> specialization will be provided The IDL traits contain a set of members with meta information for the specific IDL type The IDL traits are especially useful for template meta programming Copyright © Remedy IT25
  • 26. Implement Interfaces Given a local interface A the implementation has to be derived from IDL::traits<A>::base_type Given a regular interface A the CORBA servant implementation has to be derived from CORBA::servant_traits<A>::base_type In both cases a client reference is available as IDL::traits<A>::ref_type Copyright © Remedy IT26
  • 27. CORBA AMI TAOX11 has support for the callback CORBA AMI support The TAO AMI implementation has the disadvantage that when AMI is enabled for an IDL file all users have to include the TAO Messaging library TAOX11 separates CORBA AMI into a new set of source files, a client not needing AMI doesn’t have to link any CORBA Messaging support! All sendc_ operations are member of a derived CORBA AMI stub, not part of the regular synchronous stub Copyright © Remedy IT27
  • 28. CORBA AMI Traits Instead of remembering some specific naming rules a new CORBA::amic_traits<> trait has been defined Contains the concrete types as members • replyhandler_base_type: the base type for implementing the reply handler servant • replyhandler_servant_ref_type: the type for a reference to the servant of the reply handler • ref_type: the client reference to the stub with all synchronous operations Copyright © Remedy IT28
  • 29. CORBA AMI Example // Obtain a regular object reference from somewhere, Test::A has one method called foo IDL::traits<Test::A>::ref_type stub = …; // Narrow the regular object reference to the CORBA AMI stub (assuming this has been // enabled during code generation CORBA::amic_traits<Test::A>::ref_type async_stub = CORBA::amic_traits<Test::A>::narrow (stub); // Assume we have a Handler class as reply handler implemented, create it and // register this as CORBA servant CORBA::amic_traits<Test::A>::replyhandler_servant_ref_type h = CORBA::make_reference<Handler> (); PortableServer::ObjectId id = root_poa->activate_object (h); IDL::traits<CORBA::Object>::ref_type handler_ref = root_poa->id_to_reference (id); CORBA::amic_traits<Test::A>::replyhandler_ref_type test_handler = CORBA::amic_traits<Test::A>::replyhandler_traits:::narrow (handler_ref); // Invoke an asynchronous operation, can only be done on async_stub, not on stub async_stub->sendc_foo (test_handler, 12); // But we can also invoke a synchronous call async_stub->foo (12); Copyright © Remedy IT29
  • 30. Valuetypes Valuetypes are mapped to a set of classes which are accessible through the IDL::traits<> • IDL::traits<>::base_type provides the abstract base class from which the valuetype implementation could be derived from • IDL::traits<>::obv_type provides the object by value class that implements already all state accessors and from which the valuetype implementation can be derived from • IDL::traits<>::factory_type provides base class for the valuetype factory implementation Copyright © Remedy IT30
  • 31. Example CORBA application 31 Copyright © Remedy IT
  • 32. CORBA Hello world interface Hello { /// Return a simple string string get_string (); /// A method to shutdown the server oneway void shutdown (); }; IDL 32 Copyright © Remedy IT
  • 33. CORBA client int main(int argc, char* argv[]) { try { // Obtain the ORB IDL::traits<CORBA::ORB>::ref_type orb = CORBA::ORB_init (argc, argv); // Create the object reference IDL::traits<CORBA::Object>::ref_type obj = orb->string_to_object ("file://test.ior"); // Narrow it to the needed type IDL::traits<Test::Hello>::ref_type hello = IDL::traits<Test::Hello>::narrow (obj); // Invoke a method, invoking on a nil reference will result in an exception std::cout << "hello->get_string () returned " << hello->get_string () << std::endl; // Shutdown the server hello->shutdown (); // Cleanup our ORB orb->destroy (); } catch (const std::exception& e) { // All exceptions are derived from std::exception std::cerr << "exception caught: " << e.what () << std::endl; } return 0; } 33 Copyright © Remedy IT
  • 34. CORBA servant C++11 CORBA servant for type T must be derived from CORBA::servant_traits<T>::base_type class Hello final : public CORBA::servant_traits<Test::Hello>::base_type { public: // Constructor Hello (IDL::traits<CORBA::ORB>::ref_type orb) : orb_ (orb) {} // Destructor virtual ~Hello () {} // Implement pure virtual methods from the base_type virtual std::string get_string () override { return “Hello!”; } virtual void shutdown () override { this->orb_->shutdown (false); } private: // Use an ORB reference to shutdown the application. IDL::traits<CORBA::ORB>::ref_type orb_; }; 34 Copyright © Remedy IT
  • 35. CORBA server (1) int main(int argc, char* argv[]) { try { // Obtain our ORB IDL::traits<CORBA::ORB>::ref_type orb = CORBA::ORB_init (argc, argv); // Obtain our POA and POAManager IDL::traits<CORBA::Object>::ref_type obj = orb->resolve_initial_references ("RootPOA"); IDL::traits<PortableServer::POA>::ref_type root_poa = IDL::traits<PortableServer::POA>::narrow (obj); IDL::traits<PortableServer::POAManager>::ref_type poaman = root_poa->the_POAManager (); // Create the servant CORBA::servant_traits<Test::Hello>::ref_type hello_impl = CORBA::make_reference<Hello> (orb); // Activate the servant as CORBA object PortableServer::ObjectId id = root_poa->activate_object (hello_impl); IDL::traits<CORBA::Object>::ref_type hello_obj = root_poa->id_to_reference (id); IDL::traits<Test::Hello>::ref_type hello = IDL::traits<Test::Hello>::narrow (hello_obj); // Put the IOR on disk std::string ior = orb->object_to_string (hello); std::ofstream fos("test.ior"); fos << ior; fos.close (); 35 Copyright © Remedy IT
  • 36. CORBA server (2) // Activate our POA poaman->activate (); // And run the ORB, this method will return at the moment the ORB has been shutdown orb->run (); // Cleanup our resources root_poa->destroy (true, true); orb->destroy (); } catch (const std::exception& e) { // Any exception will be caught here std::cerr << "exception caught: " << e.what () << std::endl; } return 0; } 36 Copyright © Remedy IT
  • 37. Auto specifier C++11 has support for auto as new type specifier The compiler will deduce the type of a variable automatically from its initializers Will simplify the CORBA example further Copyright © Remedy IT37
  • 38. CORBA client int main(int argc, char* argv[]) { try { // Obtain the ORB auto orb = CORBA::ORB_init (argc, argv); // Create the object reference auto obj = orb->string_to_object ("file://test.ior"); // Narrow it to the needed type auto hello = IDL::traits<Test::Hello>::narrow (obj); // Invoke a method, invoking on a nil reference will result in an exception std::cout << "hello->get_string () returned " << hello->get_string () << std::endl; // Shutdown the server hello->shutdown (); // Cleanup our ORB orb->destroy (); } catch (const std::exception& e) { // All exceptions are derived from std::exception std::cerr << "exception caught: " << e.what () << std::endl; } return 0; } 38 Copyright © Remedy IT
  • 39. CORBA servant C++11 CORBA servant for type T must be derived from CORBA::servant_traits<T>::base_type class Hello final : public CORBA::servant_traits<Test::Hello>::base_type { public: // Constructor Hello (IDL::traits<CORBA::ORB>::ref_type orb) : orb_ (orb) {} // Destructor virtual ~Hello () {} // Implement pure virtual methods from the base_type virtual std::string get_string () override { return “Hello!”; } virtual void shutdown () override { this->orb_->shutdown (false); } private: // Use an ORB reference to shutdown the application. IDL::traits<CORBA::ORB>::ref_type orb_; }; 39 Copyright © Remedy IT
  • 40. CORBA server (1) int main(int argc, char* argv[]) { try { // Obtain our ORB auto _orb = CORBA::ORB_init (argc, argv); // Obtain our POA and POAManager auto obj = _orb->resolve_initial_references ("RootPOA"); auto root_poa = IDL::traits<PortableServer::POA>::narrow (obj); auto poaman = root_poa->the_POAManager (); // Create the servant auto hello_impl = CORBA::make_reference<Hello> (orb); // Activate the servant as CORBA object auto id = root_poa->activate_object (hello_impl); auto hello_obj = root_poa->id_to_reference (id); auto hello = IDL::traits<Test::Hello>::narrow (hello_obj); // Put the IOR on disk auto ior = orb->object_to_string (hello); std::ofstream fos("test.ior"); fos << ior; fos.close (); 40 Copyright © Remedy IT
  • 41. CORBA server (2) // Activate our POA poaman->activate (); // And run the ORB, this method will return at the moment the ORB has been shutdown orb->run (); // Cleanup our resources root_poa->destroy (true, true); orb->destroy (); } catch (const std::exception& e) { // Any exception will be caught here std::cerr << "exception caught: " << e.what () << std::endl; } return 0; } 41 Copyright © Remedy IT
  • 42. Tips & Tricks Don’t use new/delete Use pass by value together with C++11 move semantics 42 Copyright © Remedy IT
  • 43. Conclusion C++11 simplifies CORBA programming The combination of reference counting and C++11 move semantics make the code much safer and secure Application code is much smaller and easier to read 43 Copyright © Remedy IT
  • 44. Want to know more? Look at the TAOX11 website at http://taox11.remedy.nl Check the Remedy IT provided examples at https://github.com/RemedyIT/idl2cpp11 Request your free-of-charge evaluation license, see http://swsupport.remedy.nl Contact us, see http://www.remedy.nl 44 Copyright © Remedy IT
  • 45. Contact Copyright © Remedy IT45 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