Version 1.0 of OpenDDS.
New to this version are the following changes:
- This product has been renamed to OpenDDS from "TAO DDS"
Namespace and module names have been changed accordingly, except for a few
cases where we are counting on certain names being generated by the TAO_IDL
compiler.
- The default participant setting for BITs is now "on"
This change was actually part of 0.12 but the release notes were not updated
to include it. Please see the entry with the same title under the "Version
0.12" section below for more details.
- Simplified .mpc and .mpb files
Projects that use DDS no longer need to explicitly list "portableserver" as a
base project. It will be included by the "dcps*" base projects such as
"dcpsexe" and "dcpsexe_with_tcp". Also, an .mpb file is provided for each of
the transport libraries (dcps_tcp.mpb, dcps_unreliable_dgram.mpb,
dcps_reliable_multicast.mpb).
- Supported built-in sequences (the CORBA::*Seq sequences).
Implementation details:
DDS keeps copies of the $TAO_ROOT/tao/*Seq.pidl in
$DDS_ROOT/dds/CorbaSeq directory and renamed to *.idl files.
These idl files are compiled with a new IDL option -Gdcpsonly to
just generate the DDS specific code for built in sequences. The
DDS CORBA::*Seq generated code will include the TAO CORBA::*Seq
generated code so both TAO and DDS functions will be available.
When a DDS application contains an idl file that includes
$TAO_ROOT/tao/*Seq*.pidl, the generated code will include the DDS
specific built in sequences code(under $DDS_ROOT/dds/ directory)
instead of TAO specific built in sequences code(under
$TAO_ROOT/tao/ directory).
Notes:
- The idl files in $DDS_ROOT/dds/CorbaSeq directory are internally
used by DDS and CAN NOT be included in your idl files.
- Currently the CORBA::AnySeq is not supported since DDS does not
support serialization of Any type data.
- The DDS entities (e.g. DomainParticipant, FooDataReader) have changed from
*remote* IDL types to *local* IDL types and the data sequence and info
sequence types have changed from normal IDL sequences to types with extra
functionality required to support zero-copy reads.
*** This change requires changes to DDS user code. ***
--- impacts on user code ---
1) The ZCSeq and ::TAO::DCPS::SampleInfoZCSeq no longer exist.
The Seq and DDS::SampleInfoSeq have been changed
to support both single-copy reads (as before) and zero-copy reads
(like ZCSeq should have).
Change ::TAO::DCPS::SampleInfoZCSeq to ::DDS::SampleInfoSeq.
Change ZCSeq to [Module::]Seq.
The default constructor for Seq enables zero-copy reads.
Constructing a Seq(num) with num > 0 enables single-copy reads.
2) Listeners will now inherit from DDS::Listener instead of
POA_DDS:: or POA_TAO::DCPS::DataReader/WriterListener and
should inherit as a local object (not a servant). DDS provides a
helper template that adds reference counting. Use of this template
(as shown below) is highly recommended.
for example:
class DataReaderListenerImpl
: public virtual POA_DDS::DataReaderListener,
public virtual PortableServer::RefCountServantBase
{...};
will become:
class DataReaderListenerImpl
: public virtual TAO::DCPS::LocalObject
{...};
but the header and implementation should require no other changes.
NOTE: if you are implementing the TAO specific reconnection callbacks,
on*disconnected, on_*_reconnected, on_*_lost, on_connection_deleted
then you should change inheritance from
POA_TAO::DCPS::DataReaderListener
to
TAO::DCPS::LocalObject
and remove inheritance from PortableServer::RefCountServantBase
3) Implementation reference counting cleanup code is no longer used
For example:
SimpleTypeSupportImpl sts_servant = new SimpleTypeSupportImpl;
PortableServer::ServantBase_var safe_servant = sts_servant;
SimpleTypeSupport_var fts =
TAO::DCPS::servant_to_reference (sts_servant);
if (::DDS::RETCODE_OK != fts->register_type(dp.in (), MY_TYPE))
becomes:
SimpleTypeSupport_var fts = new SimpleTypeSupportImpl;
if (::DDS::RETCODE_OK != fts->register_type(dp.in (), MY_TYPE))
although the old style is discouraged it will still work.
4) Since the DCPS interfaces are now local, there is very little
performance gain to convert from _var to a servant pointer (using
reference_to_servant).
For example:
::DDS::DataWriter_var dw =
pub->create_datawriter(topic.in (),
dw_qos,
::DDS::DataWriterListener::_nil());
Test::SimpleDataWriter_var foo_dw
= Test::SimpleDataWriter::_narrow(dw.in ());
// This is unnecessary but will still work.
// Previously fast_dw was used to increase the
// performance of writing samples.
Test::SimpleDataWriterImpl* fast_dw =
TAO::DCPS::reference_to_servant
(foo_dw.in ());
Also, a pointer to the servant is no longer needed for making
calls on zero-copy read supporting overloaded methods.
5) If the user defined DDS type is in a module then the generated types will
also be in that same module.
Given a "Foo" DDS type defined in the module "Test":
old new
-------- ------------
type Test::Foo Test::Foo
sequence FooSeq Test::FooSeq
reader FooDataReader Test::FooDataReader
writer FooDataWriter Test::FooDataWriter
6) The --module option to dcps_ts.pl is no longer supported.
The module is set as described in point #5 above.
7) What did not change.
You may use the following:
_var, _ptr
::_narrow() // might use this for a listener
::_duplicate()
TAO::DCPS::servant_to_reference()
TAO::DCPS::reference_to_servant()
TAO::DCPS::deactivate() // now a no-op
Note: if you used
TAO::DCPS::servant_to_reference(),
TAO::DCPS::reference_to_servant(), or
TAO::DCPS::deactivate_object
for non-DDS interfaces then you may change to:
remote_reference_to_servant
servant_to_remote_reference
deactivate_remote_object
--- end of local interface impact to users ---
- Made the sub/pub repo id generated by DCPSInfoRepo to be unique
per DCPSInfoRepo instance instead of being unique per domain.
This would allow multiple domains in the same process(connect
to the same DCPSInfoRepo instance) share the same transport.
Release Notes from previous versions are in the DDS_ROOT/DDS_release_notes.txt file included with OpenDDS.