Skip to content

Releases: OpenDDS/OpenDDS

OpenDDS 1.0

15 Jan 18:17
Compare
Choose a tag to compare

Release notes for 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 <Foo>ZCSeq to [Modlue::]<Foo>Seq.
    
    The default constructor for <Foo>Seq enables zero-copy reads.
    Constructing a <Foo>Seq(num) with num > 0 enables single-copy reads.
    
    1. Listeners will now inherit from DDS::Listner 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<DDS::DataReaderListener>
            {...};
    
    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<TAO::DCPS::DataReaderListener>
    and remove inheritance from PortableServer::RefCountServantBase
    
    1. Implemenation 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 discurraged it will still work.

    1. 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 unnesesary 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<Test::SimpleDataWriterImpl>
                        (foo_dw.in ());
    
            Also, a pointer to the servant is no longer needed for making
            calls on zero-copy read supporting overloaded methods.
    
    1. 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
    
    1. The --module option to dcps_ts.pl is no longer supported.
      The module is set as described in point #5 above.

    2. What did not change.
      You may use the following:
      _var, _ptr
      ::_narrrow() // 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.

Using the GitHub "releases" page

Download OpenDDS-1.0.zip (Windows) or OpenDDS-1.0.tar.gz (Linux/Solaris/MacOSX) instead of using the GitHub-generated "source code" links.