Changes since 2.7.1

attlogo6876_dk.gif (2280 bytes)

sideHome.gif (2321 bytes) sideDownload.gif (2450 bytes) sideDocumentation.gif (2512 bytes) sideFAQ.gif (2344 bytes) sidePatch.gif (2543 bytes) sideSearch.gif (2403 bytes)
The last release was 2.7.1 (12th March 1999).

Source code and binary distributions are available from our Web pages .

NOTE!!! Please read the rest note about the incompatible changes in this release.

Changes since 2.7.1

CORBA compliant testing

This version has passed the Open Group CORBA 2.1 compliant testsuite. The CORBA brand from the Open Group has been awarded to omniORB2 with this version.

Updated to CORBA 2.3 mapping

Summary of changes:

  1. Reserved word is mapped to _cxx_<word> instead of _<word>. This can be overrided with the -c flag to the compiler.
  2. out types are defined for IDL primitive types, interface, enum, string and other constructed types.
  3. exception type now has a _raise() method. The _narrow() method is deprecated and is replaced by the _downcast() methods. All exception types, system exceptions included, can be inserted or extracted to and from an Any.
  4. T_var types contain new methods in(), inout(), out() and _retn()
  5. For an interface A, A::_ptr_type and A::_var_type are now defined.
  6. For an IDL struct, union or sequence type T, the T::_var_type is defined.
  7. For anonymous sequence used in a struct or union member, a typedef is defined.
              e.g. struct A {         // IDL
                     sequence<char> a;
                   };
                   
                   class A {
                   public:
                      typedef <omniORB2 sequence char type> _a_seq;
                      ...
                   };
          
  8. For IDL sequence types, new member functions, get_buffer(), replace() and release() are defined.
  9. Typecode interface contains new methods equivalent() and get_compact_typecode().
  10. Any interface contains new method void type(TypeCode_ptr). Any extraction operators now take const pointer as argument. The old non-const pointer operator is deprecated.
  11. The semantics of the extraction of string, object reference and typecode from an Any has changed. See 3) for details.

Incompatible changes to the extraction of values from an Any:

Since 2.8.0, omniORB2 has been updated to CORBA 2.3. In order to comply with the 2.3 specification, it is necessary to change the semantics of the extraction of string, object reference and typecode from an Any. The memory of the extracted values of these types now belong to the Any value. The storage is freed when the Any value is deallocated. Previously the extracted value is a copy and the application is responsible to release the storage. It is not possible to detect the old usage at compile time. In particular, unmodified code that uses the affected Any extraction operators would most certainly cause runtime errors to occur. To smooth the transition from the old usage to the new, an ORB configuration variable omniORB::omniORB_27_CompatibleAnyExtraction can be set to revert the any extraction operators to the old semantics.

For example:

An application written to the old usage looks like this:

       char* str;

       CORBA::Any v = ...;

       v >>= str;
       ...
       CORBA::string_free(str);    // Must free the returned string
    
The new usage looks like this:
       const char* str;

       CORBA::Any v = ...;

       v >>= str;

       // No need to free str as the storage is still owned by v.
    
The same applied to object reference and typecodes. However, the CORBA::Any::operator>>=(to_object) still returns a copy of the object reference and should be released by the application.

IDL stubs must be regenerated with the new IDL compiler to be compatible with the runtime library.

The current shared runtime library versions are:

On various unices:

  • libomniORB2.so ---> libomniORB2.so.8 --> libomniORB2.so.8.0
On IBM AIX
  • libomniORB28.a
  • libomniDynamic28.a
  • libomniLC2.a
On Windows NT/95, the omniORB2 runtime DLLs for this version are:
  • libomniORB280_rt.dll
  • libomniORB280_rt.lib
  • libomniDynamic280_rt.dll
  • libomniDynamic280_rt.lib
  • libomniLC30_rt.dll
  • libomniLC30_rt.lib
Make sure you update your Visual Studio to pick up the right library.

New command line options and ORB configuration variables:

  • -ORBhelp and -BOAhelp List all the available options.
  • -ORBverifyObjectExistsAndType <0 or 1> to disable object existence check using the GIOP LOCATE_REQUEST message.
  • -ORBlcdMode to enable the "lowest command denominator mode" to cope with deficiencies in other ORBs.
  • -ORBabortOnInternalError <0 or 1> to control runtime behaviour when an internal error is detected.
  • -BOAiiop_name_port to tells the BOA the hostname and optionally the port number to use.
  • -ORBinConScanPeriod
  • -ORBoutConScanPeriod
  • -ORBclientCallTimeOutPeriod
  • -ORBserverCallTimeOutPeriod
  • -ORBscanGranularity See "Connection management".

New omniidl2 options:

  • -Y to tell the compiler to use this preprocessor
  • -c to map C++ reserved words with prefix _, the default prefix is now _cxx_.

Interface Repository.

The client side support is included on all platforms. A new keyword "INTERFACE_REPOSITORY" can be used in omniORB.cfg to specify the IOR of the interface repository to use.

However, to use the client support, application code should define ENABLE_CLIENT_IR_SUPPORT so that the stub header is imported.

Connection management

Connection management has been extended to both scan for idle connections and stuck remote calls. It is now possible to define a maximum time a remote call is allowed to progress. When this period is exceeded, a COMM_FAILURE would be raised. This eliminates the possibility that a remote call is stuck indefinitely waiting for a reply to come from a tcp connection that is dead but has not been close down by the OS.

New omniORB APIs to control their behavior are:

  • omniORB::scanGranularity
  • omniORB::callTimeOutPeriod
  • omniORB::idleConnectionScanPeriod

New -ORB options to control from the command line:

  • -ORBinConScanPeriod
  • -ORBoutConScanPeriod
  • -ORBclientCallTimeOutPeriod
  • -ORBserverCallTimeOutPeriod
  • -ORBscanGranularity

Refer to omniORB.h for their usage.

New member function CORBA::ORB::NP_destroy() is provided.

This member should be called by the application to cleanup the ORB before exit.

In particular, applications written for Windows 95/98 or using the ORB runtime DLL with Visual Basic should call this function (as well as CORBA::BOA::destory()) to ensure all internal threads are cleaned up before the runtime DLL is unloaded. To summarise, the following call sequence should be used to exit:

    CORBA::ORB_ptr orb;
    CORBA::BOA_ptr boa;
       ....
    boa->destory();
    orb->NP_destory();
    

New platforms

The platform files for Irix 6.4 and 6.5 has been updated to perform program linkage in the right order.

Support for HPUX 11.00, SCO Unixware 7 and FreeBSD 3.2 have been added.

The omniORB2 user guide has been updated.

Bugs fixed.

The complete list of bugs reported and fixed can be found here.

All the bugs listed have been fixed.

Notable fixes are:

  • The allocbuf function for sequence of string and object reference now returns the correct buffer type. The T* data constructor for these sequence types now works correctly.
  • When omniORB::tcAliasExpand is set to 1, the expansion of recursive typecodes is now performed correctly. Marshalling of Any when the flag is set also works correctly.
  • A rare race condition in the connection management threads have been identified and fixed.
 

For comments, feedback, etc, please see the 'Keeping in touch' page.
Copyright 1999 - AT&T Laboratories Cambridge