Release Notes for OCI's Distribution of TAO 1.5a
Copyright 2009 by Object Computing, Inc.

NOTE:   These release notes can be found in the distribution at ACE_wrappers/OCIReleaseNotes.html.

Table of Contents

  1. General Notes

  2. New Features Since TAO 1.4a

  3. Porting Applications from TAO 1.4a to TAO 1.5a

  4. Platforms that this release was tested on:

  5. OCI recommended build flags

General Notes

  1. Heritage -- Relationship to DOC Releases

    TAO 1.5a derives from the DOC TAO 1.5.6 beta kit with bugfix-related patches selectively applied to enhance stability. A record of applied patches can be found in OCIChangeLog files installed with the distribution.

  2. Platforms

    As the initial release of this stable series, the platform set was limited to those described below. Support for additional platforms will be added in subsequent patch levels.

  3. Tests

    The great majority of ACE/TAO tests are passing on the current set of platforms. We will report more detailed test results for the individual platforms in subsequent patch releases.

  4. Make Project Creator

    All of ACE/TAO was built using MakeProjectCreator (MPC). This tool is included with this distribution and may be used for your own projects as well. MPC will generate GNU make files, Windows project files for both VC++ 7.1 and 8, Borland make files, and others. It can be extended to other make systems as well. MPC documentation is available in the distribution at MPC/docs/README or in OCI's TAO Developer's Guide, Version 1.5a, which will be available separately. This chapter can be viewed from in html or downloaded in PDF form.

  5. GNU Make on Unix

    With the exception of Windows operating systems, ACE and TAO were built with GNU Make. While one can use other tools to build applications using ACE & TAO, using GNU Make permits the leveraging of the existing build system distributed with ACE & TAO. Use gmake version 3.80 (or better), as previous versions have caused build problems on Mac OS and AIX.

  6. Compiler restrictions

    Version 1.5a of ACE/TAO, being based on DOC TAO 1.5.6, requires that the compiler be able to support namespace, at least minimally. Any compiler that does not support namespace cannot be used with this version, for example, Sun's 4.2 compiler and Tornado 2.0.

  7. Explicit template instantiation

    Explicit template instantiation is no longer supported by TAO.


New Features

Many important new features and bug fixes have been introduced in TAO 1.5a. They are described briefly here. These and many other features of TAO 1.5a are detailed in OCI's TAO Developer's Guide, Version 1.5a, which will be available separately.

For a detailed description of the motivation for and implementation of a particular change, see the appropriate OCIChangeLog or ChangeLog file in the TAO 1.5a source code distribution, such as ACE_wrappers/OCIChangeLog, ACE_wrappers/TAO/OCIChangeLog, ACE_wrappers/TAO/CIAO/OCIChangeLog, or ACE_wrappers/TAO/DevGuideExamples/ChangeLog. Some ChangeLog entries may include a "ticket" number (e.g., [RT 1234]), to help customers track specific changes they have sponsored.

  1. Features added and bugs/fixes in TAO 1.5a_p15

    • Various fixes to Mac OS X and VxWorks platforms.
    • Various updates to MPC including enhanced gnuace support.
    • Updated support for the Sun Studio 12 Update 1 compiler.
    • -ORBUseSharedProfile now defaults to true.
    • Merged fix for bug #3695 from TAO 1.6a.
    • Merged -ORBUseSharedProfile fixes from TAO 1.6a.
    • Corrected TAO_IDL wchar code generation behavior.
  2. Features added and bugs/fixes in TAO 1.5a_p14

    • Fixed bug #3704 [RT 13148] which could cause a thread to loop with high CPU usage when the Blocking flusing strategy is used with a server-side ORB.
    • Fixed Bugzilla #3688 that TAO_Notify_Constraint_Interpreter::build_tree() ignored the filter constraint expression when event type is defined.
    • Added feature to forward request just once upon OBJECT_NOT_EXIST,COMM_FAILURE, TRANSIENT and INV_OBJREF exceptions. (RT12994)
    • Fixed case where the notification service would fail to enqueue without printing a warning.
    • Added support for Sun Studio 12 Update 1 compiler.
  3. Features added and bugs/fixes in TAO 1.5a_p13

    • Merged in coverity fixes from DOC repository.
    • Made the ServerId be part of ServerInfo in IMR to help identify server process. Added -UnregisterIfAddressReused option to IMR to enable the address reuse checking upon server registering. The servers that address is reused are unregistered from IMR. These changes support the capability of client automatically reconnects servers within same port range upon server restart. (RT 12912)
    • Added -ORBForwardInvocationOnObjectNotExist option to forward request to next available profile upon receiving OBJECT_NOT_EXIST exception reply. This is to support the capability of client automatically reconnects servers within same port range upon server restart. (RT 12912)
  4. Features added and bugs/fixes in TAO 1.5a_p12

    • Fixed two bugs in the TAO transport: 1) Multiple followers can now wait on the same connection event. 2) Added locking for the transport's output CDR.
    • Fixed Bugzilla 1884 - Notification Service: reconstruct the constraint expression with event type and the expression provided by user so the event types of a constraint are evaluated as well.
  5. Features added and bugs/fixes in TAO 1.5a_p11

    • Corrected problem in ACE's auto-determination of endian-ness on Itanium (IA64) platform, addressing RT 12823.
    • Added log file size limiting and rotation capability to Notification Service.
    • Fixed filter persistent issue in Notification Service.
    • Added stale proxy cleanup feature in Notification Service.
    • Fixed default ConsumerAdmin and SupplierAdmin accessor based on spec. (bugzilla 3078)
  6. Features added and bugs/fixes in TAO 1.5a_p10

    • Fixed Notify service filtering to allow filterable header and body sequences to be length-checked like ordinary sequences.
    • Notify service default consumer or supplier admin object's filter combining operation configurable via svc.conf. Default is still OR.
    • Fixed Notify service crash upon consumer shutdown [RT 12574].
    • Fixed Bug 3277, which incorrectly mark non-permanent forwarding as permanent. This solved stub crash due to accessing nil forward_profiles_ pointer in a client's special use case.
    • Added support for the upcoming OpenDDS 1.3 release.
    • Fixed DOC bugs 3393 and 3480.
    • Fixed DOC bug 3430.
    • Fixed a bug where a crash could occur while demarshaling a typecode.
    • Fixed nsadd/nsdel/nslist to work correctly with --max command line option [RT 12529].
    • Integrated fix for DOC bug 3165 from DOC repo, correcting memory leaks in SSLIOP.
    • Updated keys and certificates for Bidirectional security test until approximately Oct 2009.
  7. Features added and bugs/fixes in TAO 1.5a_p9

    • Added Windows CE version 6 as a supported platform.
    • Added an option to the ACE_Process_Options class to use a wchar_t environment buffer on Windows.
    • Added support for Solaris Nevada (5.11).
    • Added a -m option to the ImplRepo (ImR, Implementation Repository) Activator, which specifies the maximum number of environment variables which will be passed to the child process. The default (and previous behavior) is 512.
    • Fixed Bug 3163, which impacts sending large reply messages with -ORBFlushingStrategy blocking.
    • Added code to support LynxOS-se.
    • Incorporated a fix to an improperly checked POSIX fla g.
    • Fixed problem in the Notification Service where a properly shutdown channel to a subscriber that was restarted on the same port would fail. This fixes bugzilla 3387.
    • Added global less than operator for TAO::String_Manager. This is required by OpenDDS to support string type DCPS_DATA_KEY.
    • Changed TAO_IDL idl_parse_line_and_file() function to compare the full path to avoid not matched path problem when one uses full path and the other uses relative path.
    • Made changes in TAO_IIOP_Acceptor to allow TAO work on hosts with only IPv4 when TAO is built with ACE_HAS_IPV6 and ACE_USES_IPV4_IPV6_MIGRATION both set.
  8. Features added and bugs/fixes in TAO 1.5a_p8

    • Fixed IFR issues related to the use of and browsing of declared but undefined structs. This solved some crashing problems in the IFR Service as well as strange behavior from the client's perspective.
    • Added a new ORB parameter, -ORBAcceptErrorDelay, that controls the amount of time to wait before attempting to accept new connections when a possibly transient error occurs during accepting a new connection.
    • Extended the Notification Monitor Control by adding the ability to remove consumer and supplier proxies and consumer and suplier admins.
    • Fixed a bug in the AV Streams core that caused problems with multi-stage communications.
    • Fixed an issue where invocations on servants with the TAO::SYNC_DELAYED_BUFFERING policy enabled that caused a new connection would have delayed sending of data. Now, data is sent directly after the connection completes.
    • An experimental API, ACE_Stack_Trace, has been added to allow users to obtain a stack trace within their application. It is not supported on all plaforms at the moment, but will be refined and possibly extended to more platforms for the next patch release.
    • Generated GNU makefiles for statically linked executables will no longer be generated with both -lfoo and libfoo.a in the link line.
  9. Features added and bugs/fixes in TAO 1.5a_p7

    • Notification Service Monitor and Control will not report queue sizes for empty queues.
    • Notification Service Monitor and Control: Statistics will be captured for each Consumer Admin that can be used to calculate average, standard deviation, maximum, and most recent queue depth. These statistics may be viewed individually, or combined to produce statistics for the entire channel containing the Consumer Admins.
    • Notification Service Monitor and Control: A new control function has been added to allow individual consumers or suppliers to be forcibly disconnected.
    • Improved support for VxWorks 6.2 and added initial support for VxWorks 6.5-6.6.
  10. Features added and bugs/fixes in TAO 1.5a_p6

    • Fixed send side logic (both synchronous and asynchronous) to honor timeouts. An RTT enabled two-way or one-way invocation could earlier hang indefinately if tcp buffers were flooded.
    • Notification service Monitor and Control will now return zero for oldest event wait time if no events are queued. Formerly it returned ACE_Time_Value::max converted to a double which is hard to work with.
  11. Features added and bugs/fixes in TAO 1.5a_p5

    • Added list() iterator functionality for the Naming Service when using the -u persistence option.
    • Added -T option to tao_ifr to allow duplicate typedefs in IDL files.
    • Fixed recursion of IDL structs and unions in the IFR.
    • Fixed a low-probability race condition when initializing static instances of classes that use static ACE_Atomic_Op instances.
    • Fixed a bug where the Custom Servant Dispatching Thread Pool Strategy would fail to re-initialize if the ORB was destroyed and then re-created.
  12. Features added and bugs/fixes in TAO 1.5a_p4

    • NotifyExt named proxy associations now get automatically cleaned upon client 'disconnect'.
    • Added support for VxWorks 6.4
  13. Features added and bugs/fixes in TAO 1.5a_p3

    • Modified the definiton of ACE_DEFAULT_THREAD_KEYS on Windows so it is based on the version of the OS as defined by Microsoft in this web page
      This fixes bugzilla #2753
    • Symlinks in $ACE_ROOT/lib are now relative by default. The earlier style of having absolute symlinks made it hard to relocate the build tree.
    • The refactored TAO Transport Cache has improved normal-path performance. This also fixed at least one known fatal race condition. in the invocation pathway.
  14. Features added and bugs/fixes in TAO 1.5a_p2

    • Fixed a hanging issue in persistent Notify Service during disconnection.
    • Added a new interface that allows monitoring of activities within the Notification Service. Completely configurable through the Service Configurator, the monitoring capabilities are only in effect when chosen by the user. When the monitoring capabilities are enabled, an outside user can connect to a service that allows querying statistics gathered by the Notification Service.
    • Modified the Transport_Cache to eliminate a problem in which too many connections were opened to the same endpoint -- thereby wasting file handles.
    • Fixed problems with the -ORBMuxedConnectionMax n option that could cause hangs or crashes when this option was used.
    • Fixed a bug in the Notify Service where events sent (to a persistence enabled Notify Service) by a supplier after a consumer "crashed" would not be resent upon consumer reconnect.
    • Fixed a bug in Collocated_Invocation that rethrows a user exception that is not in the signature list. See bug bugzilla 2064 for more information.
    • Fixed an access violation in the transport object in TAO_Connector after wait_for_transport() has error. Made wait_for_transport() have return code and corrected the transport reference counter based on the return code.
    • Fixed bugzilla 2839, when an union is created by default and the discriminator is for a value that is allocated from the heap, allocate a value or else we will get a crash when marshaling the default union.
    • Fixed a bug that the typecode for recursive valuetypes does not generate correctly as recursive. See bug 2776 for more information.
  15. Features added and bugs/fixes in TAO 1.5a_p1

    • Changed the Notify Event Channel POA to be persistent to allow restarting the Notify_Service on the same host and port to have the same IOR as a previous run.
    • Enhanced TAO_IDL's support for OpenDDS. This version of TAO is compatible with OpenDDS 1.0. See for details.
    • The TAO_IORManip library now has a filter class that allows users to create new object references based on existing multi-profile object references by filtering out profiles using user defined criteria. The use of -ORBUseSharedProfile 0 is required for this to function.
    • Fixed a bug in the logic of transport connectors and transport cache management in which a client could create "too many" connections to a given server endpoint in multi-threaded and nested-upcall situations. Several connection attempts might be tried before the first one had a chance to complete. Now, subsequent requests can wait for the first connection to be completed. Also, fixed the implementation of the -ORBMuxedConnectionMax option to avoid deadlocks when the maximum number of allowed connections to a server is reached. See DOC Group Bugs 2934 and 2935 and the new TAO/tests/ThreeTier/ for more information.

    Pending bugs/fixes in TAO 1.5a

    • Rename README to be DOC-README, and add a prefix directing support requests to OCI rather than to the DOC Group.

    • Add an OCI specific README file.

  16. Features added to TAO 1.5a since TAO 1.5.6

    • Fixed a memory crash problem when using ETCL IN operator with Notify Service filter.
  17. Features added since TAO 1.4a as part of TAO 1.5.6

    • Better handling of partial and fragmented GIOP messages.
    • SHMIOP now supports dotted decimal addresses.
    • Enhancements to the TAO IDL compiler.
    • Support for visibility attributes of GCC.
    • Many TAO core and orbsvcs libraries have been refactored.
    • The ACE exception macros have been deprecated.
    • Versioned namespaces for ACE and TAO are supported.
    • Improved RTCORBA support.
    • TAO's sequence implementation has been rewritten.
    • The COIOP (Collocated Only IOP) pluggable protocol has been added.
    • The Transport::Current feature (providing transport statistics) has been added.
    • ORB-local configuration via Service Gestalt.
    • Parallel Connect Strategy.
    • Optimized Connection (OC) Endpoint Selector.
    • Support for the CORBA/e compact profile.
    • Support for POAManagerFactory.
    • Endpoint Policy (applied to POAManagerFactory) to constrain the endpoints placed in profiles in IORs (e.g., on multi-homed hosts).
  18. Important bug fixes since TAO 1.4a

    Many bugs have been fixed or work-arounds provided since TAO 1.4a. For more details, see the release announcements for the intervening DOC group beta kits (from 1.4.4 to 1.5.6), the ChangeLogs, and the DOC group Bugzilla bug database found at

    (Ported from the DOC group version 5.5.7):

    • In the ACE_Log_Record (ACE_Log_Priority, long, long) constructor, the second argument, long time_stamp, was changed to be of type time_t. This aligns the type with the expected value, a time stamp such as that returned from ACE_OS::time().
    • The ace/Time_Request_Reply.h and ace/Time_Request_Reply.cpp files were moved from $ACE_ROOT/ace to $ACE_ROOT/netsvcs/lib. The time arguments in the public API to ACE_Time_Request were changed from ACE_UINT32 to time_t and the portions of the on-wire protocol that contains time was changed from ACE_UINT32 to ACE_UINT64. Thus, code that uses the ACE_Time_Request class to transfer time information will not interoperate properly with prior ACE versions. This will affect uses of the netsvcs time clerk/server.
    • The portion of the ACE_Name_Request class that carries the on-wire seconds portion of a timeout value was changed from ACE_UINT32 to ACE_UINT64. This means that Name server/clients at ACE 5.5a and higher will not interoperate properly with previous ACE versions' name servers/clients.


Porting Applications from TAO 1.4a to TAO 1.5a


  • "requires += exceptions" is no longer necessary. Exceptions are always required.
  • The minimum_corba base project was renamed to avoids_minimum_corba.
  • The rteventexe base project does not contain the server portion of the rtevent libraries. For the server library, inherit from rtevent_serv too.
  • Portable Interceptors have been moved into their own libraries. Use the pi base project for client side and pi_server for server side.


  • There is no longer an AMI_*ExceptionHolder for each type of user defined exception. Instead, Messaging::ExceptionHolder is used which has a raise_exception() method.
  • All code related to Any's and Typecode's has been moved into the AnyTypeCode directory under $TAO_ROOT/tao.
    • #include <tao/Typecode.h> should be replaced with #include <tao/AnyTypeCode/TypeCode.h>.
  • tao_idl option changes:
    • tao_idl no longer accepts the -Sc option. TIE classes are no longer generated by default (so their generation does not have to be suppressed). Instead, use the new -GT option to explicitly generate TIE classes.
    • tao_idl no longer accepts the -Ge 0 option. Since TAO 1.5a requires native C++ exception support, there is no longer a need for an option to control generation of CORBA::Environment parameters.
  • Portable Interceptors support has been split into separate client-/server-side header files:
    • Client-side interceptor support requires including <tao/PI/PI.h>.
    • Server-side interceptor support requires including <tao/PI_Server/PI_Server.h>.
  • Codecs have been moved into the CodecFactory directory under $TAO_ROOT/tao.
    • #include <tao/IOP_CodecC.h> should be replaced with #include <tao/CodecFactory/CodecFactory.h>.
  • The TAO_ORB_Manager class (previously defined in tao/PortableServer/ORB_Manager.h) has been moved to tao/Utils/ORB_Manager.h.


All of the AIX builds used the recommended OCI build flags OCI build flags in addition to the platform_macros.GNU and config.h files already set up for the AIX platform and compiler.

When using GNU Make that is part of AIX toolbox for Linux applications, it may be necessary to modify the file access permissions of the make executable to ensure the LIBPATH environment variable is propagated to make system properly. This can be done as follows:

chmod 755 /opt/freeware/bin/make

See this message for further information. Use version 3.80, or newer.

Files Used for AIX Builds
AIX 5.2 with VA C++ 6.0 platform_aix_ibm.GNU config-aix-5.x.h
AIX 5.3 with VA C++ 7.0 platform_aix_ibm.GNU with templates=manual config-aix-5.x.h



All of the HP-UX builds used the recommended OCI build flags in addition to the platform_macros.GNU and config.h files already set up for the HP-UX platform and compiler.

Files Used for HP-UX Builds

HP-UX 11.11 with aCC 3.70 platform_hpux_aCC.GNU config-hpux-11.00.h



All of the Linux builds used the recommended OCI build flags in addition to the platform_macros.GNU and config.h files already set up for the Linux platform and compiler.

Files Used for Red Hat Builds
Fedora Core 4 with g++ 4.0.1 platform_linux.GNU config-linux.h


Mac OS X

All of the Mac OS X builds used the recommended OCI build flags in addition to revised platform_macros.GNU and config.h files developed for the Mac OS X platform and compiler.

Files Used for Mac OS X Builds
Build platform_macros.GNU config.h
Mac OS X 10.3.7 with g++ 3.3 platform_macosx_panther.GNU config-macosx-panther.h

In addition

The Apple Developer Kit Dec 2002 is required and two additional packages will have to be loaded from open source available on the net.

  • dlcompat is required for implementing dynamic library loading. It can be obtained directly from and built. Or a pre-built version may be loaded with fink ( If the fink version is used, you will need to add:

          #define ACE_NEEDS_DL_UNDERSCORE
    to your config.h file.
  • Certain parts of the TAO will not build with the version of gmake in the versions of Mac OS X 10.2 available as of this writing. You will need to download gmake version 3.80 (or better)



All of the Solaris builds used the recommended OCI build flags in addition to the platform_macros.GNU and config.h files already set up for the SunOS platform and compiler.

Files Used for SunOS Builds
Build platform_macros.GNU config.h
SunOS 5.10 with Sun C++ 5.8 Patch 121017-08 2006/12/06 platform_sunos5_sunc++.GNU config-sunos5.10.h

Sun C++ Notes

Due to the way that static construction works, it may be necessary to set the LD_BIND_NOW environment variable to a non-null value. If you are getting strange results during process startup, try setting this environment variable and running the process again.

Use the fast=1 instead of optimize=1 for optimizing with Sun compilers because it selects a combination of compilation options for optimum execution speed. Other optimization levels may reduce the footprint, but do not have a corresponding flag in ACE/TAO.

When using a Sun compiler greater than SunCC 5.5, that is, Sun Studio 9 or greater, on Sun OS 5.8, then certain OS patches are required. The patches and levels used at OCI are 109147-37 (-21 is probably adequate), 108434-18 and 108435-18 (earlier versions are not adequate).



All of the Windows builds used the recommended OCI build flags in a config.h file as shown below.

Files Used for Windows Builds
Build config.h
Windows XP sp1 with Visual Studio .NET 2003 config-win32.h
Windows 2003 Enterprise with Visual Studio 2005 config-win32.h

The following config.h file is used for all Windows nightly builds.

// contents of config.h
#include "config-win32.h"

The first line disables the popup of error windows when running the automated tests. It is not normally needed for ordinary user programs. It would only be used if an automated build was being done.

The platform_macros.GNU file is not used for Windows platforms.

Compile Notes

  • There are some warnings when compiling using Visual Studio 2005

  • If using MPC to generate build files, then by default qos and ssl, and any projects that depend on these libraries will not be generated. To enable these features, simply create a text file called ACE_wrappers\bin\MakeProjectCreator\config\default.features with the following contents.

    ssl = 1
    qos = 1
  • (VC 7.1 / .NET 2003 only) When building static libraries you may have to build twice. The first time will compile the IDL, and compile everything that didn't rely on IDL-generated files that don't exist. The second time will finish building files now that the IDL-generated files exist.



If you're doing your own build, you can have the following flags set which OCI uses in its own builds. For UNIX and UNIX-like platforms that use GNU Make, use platform_macros.GNU. For Windows/Visual C++ builds, use config.h. If an option is not listed below, let it default.

Turned on:




#define __ACE_INLINE__ (unless not supported by the compiler)


#define TAO_HAS_AMI 1


#define TAO_HAS_RT_CORBA 1






no equivalent (If you plan on using static libraries, use static_libs_only=1)

Turned off:






no equivalent

no equivalent


Variable--dependent on platform and other settings:



fast=1 (ONLY FOR SUN C++)