RTI Connext CORBA Compatibility Kit
Version 6.0.1
|
This document contains:
For additional information, please see the following PDF document:
Please do not hesitate to contact RTI with questions or comments about this release. We welcome any input on how to improve RTI Connext to suit your needs.
The RTI CORBA Compatibility Kit is an optional package that allows RTI Connext code generator, rtiddsgen, to output type-specific code that is compatible with OCI's distribution of TAO and the JacORB distribution.
By having compatible data types, your applications can use CORBA and RTI Connext APIs, with no type conversions required. For more information about RTI Connext, please refer to the documentation provided within its main installation package. For more information about OCI's distribution of TAO and JacORB, please refer to the documentation included with those distributions. Additional information can be found on OCI's TAO website, http://www.theaceorb.com and JacORB's website, http://www.jacorb.org. TAO and JacOrb distributions that are compatible with this version of RTI Connext are available from RTI's Self Support portal, accessible at http://www.rti.com.
A simple example is available.
C++ using TAO: See the example in <rti_workspace>/examples/corba/c++. Please read Instructions.pdf.
Java using JacORB: See the example in <rti_workspace>/examples/corba/java. Please read Instructions.pdf.
The RTI CORBA Compatibility Kit enables the RTI Connext IDL compiler, rtiddsgen, to produce type-specific code that is compatible with OCI's distribution of TAO for C++ and with JacORB for Java. When using rtiddsgen, specify the -corba option on the command line to generate compatible code. The -corba option enables the use of data structures for both CORBA and DDS API calls without requiring any translation: the IDL-to-language mapping is the same for both.
There are some trade-off's to consider:
While the -corba option provides the benefit of CORBA-compatible type-specific code, it does not provide support for bitfields, pointers and ValueTypes. For complex types such as sequences and strings, the memory management is different when the -corba option is used. When code is generated without the option, the memory needed for the type is pre-allocated at system initialization. When code is generated with the option, the memory is allocated when it is needed, so memory allocation system calls may occur while the system is in steady state.
Without the -corba option, access to data fields within types may be faster under some circumstances. CORBA-compatible types require the use of accessor methods. When -corba is not used, while the accessor methods are provided for convenience but they can be bypassed and the data can be accessed directly. This direct access is available to the user, as well as to RTI Connext's internal implementation code. As a result, depending on the complexity of the types used, overall system latency could be lower when using non-compatible types (that is, when -corba is not used).
To generate CORBA-compatible type-specific code, first run TAO's code generator, tao_idl, on the IDL file containing your data types. If you followed the TAO distribution compilation instructions contained in this documentation, the tao_idl compiler executable will be in the TAO install directory under <ACE_ROOT>/bin.
To generate CORBA support files for your data types, enter:
TAO 1.4: <ACE_ROOT>/bin/tao_idl <IDL file name>.idl TAO 1.6: <ACE_ROOT>/bin/tao_idl -GT <IDL file name>.idl
The generated file will have a name matching the pattern <IDL file name>C.h and will contain the type definitions. Pass this header file as a parameter to rtiddsgen to generate the DDS support code for the data types, by entering:
rtiddsgen -language C++ -corba <IDL file name>C.h [-orb <orb>] [-example <architecture>] <IDL file name>.idl
The optional -orb <orb> flag can have the values ACE_TAO1.4 or ACE_TAO1.6. The default value is ACE_TAO1.4.
The optional -example <architecture> flag will generate code for a DDS publisher and a DDS subscriber. It will also generate .mpc and .mwc files that can be used with TAO's Makefile, Project and Workspace Creator (MPC) to generate a makefile or a Visual Studio Project for your application. The generated files are meant to work out-of-the-box with the RTI Connext HelloWorld Publisher and Subscriber applications only – you will have to modify them to compile your custom application. Please refer to the DDS-CORBA C++ example for details on how to customize the generated files to fit your application (see <RTI_Data_Distribution_Service_INSTALL_ROOT>/example/CPP/corba/Instructions.pdf).
To generate Java CORBA-compatible type specific code, first run the JacORB code generator on the IDL file containing your data types:
<JacORB install dir>/bin/idl <IDL file name>.idl
After generating the CORBA code for the IDL types run rtiddsgen as follows:
rtiddsgen -language Java -corba -example <architecture> <IDL file name>.idl
The optional -example <architecture> flag will generate code for a DDS publisher and a DDS subscriber. It will also generate a makefile specific to your architecture that can be used to compile the example using the publisher and subscriber code generated. To form a complete code set, use the type class generated by the CORBA IDL compiler and the files generated by rtiddsgen.
IDL Construct | Support |
---|---|
Modules | Supported |
Interfaces | Ignored |
Constants | Supported |
Basic Data Types | Supported |
Enums | Supported |
String Types | Supported |
Wide String Types | Supported |
Struct Types | Supported. Inline nested structures, such as the following example, are not supported. struct Outer { short outer_short; struct Inner { char inner_char; short inner_short; } outer_nested_inner; }; |
Fixed Types | Ignored |
Union Types | Supported |
Sequence Types | Supported. Sequences of anonymous sequences are not supported. This kind of type will be banned in future revisions of CORBA. For example, the following is not supported: @code sequence<sequence<short,4>,4> MySequence; \endcode Instead, sequences of sequences can be supported using typedef definitions. For example, this is supported: @code typedef sequence<short,4> MyShortSequence; sequence<MyShortSequence,4> MySequence; \endcode </td> |
Array Types | Supported |
Typedefs | Supported |
Any | Not Supported. rtiddsgen does not ignore them. Do not use this construct in the IDL file. |
Value Types | Ignored |
Exception Types | Supported. With DDS, DDS type codes should be used. With CORBA, CORBA Type codes should be used. |