The OpenFusion TAO 1.6 Release Notes cover the following topics:
Supported Platforms and Compilers
OpenFusion TAO Directory Organisation
Upgrading to OpenFusion TAO 1.6
Interoperability and Compatibility
PrismTech offers various builds:
See the table below for build availability.
| Platform / Architecture / Compiler | Standard | Inline | Debug |
|---|---|---|---|
| SunOS 5.10 Generic / SPARC / Sun Studio 11 C++ 5.8 - 32 bits | Yes | No | No |
| SunOS 5.10 Generic / SPARC / Sun Studio 9 C++ 5.6 - 64 bits / ipV6 | Yes | No | Yes |
| SunOS 5.10 Generic / SPARC / Sun Studio 9 C++ 5.6 - 32 bits / ipV6 | Yes | No | No |
| SunOS 5.10 Generic / SPARC / gcc version 3.4.4 | Yes | Yes | Yes |
| Red Hat Enterprise Linux Server release 5.3 (Tikanga) / x86 / gcc version 4.1.2 - 32 and 64 bits | Yes | Yes | Yes |
| Red Hat Enterprise Linux Server release 5.1 (Tikanga) / x86 / gcc version 4.1.2 | Yes | Yes | Yes |
| Red Hat Enterprise Linux Server release 5 (Tikanga) / x86 / gcc version 4.1.1 | Yes | Yes | Yes |
| Red Hat Enterprise Linux ES release 4 (Nahant Update 2) / x86 / gcc version 3.4.4 | Yes | Yes | Yes |
| Red Hat Enterprise Linux ES release 4 (Nahant Update 2) / x86 / gcc version 3.4.6 - ipV6 | Yes | No | No |
| Red Hat Enterprise Linux ES release 4 (Nahant Update 2) / x86 / gcc version 3.4.6 - 64 bits / ipV6 | Yes | No | No |
| Red Hat Enterprise Linux WS release 4 (Nahant Update 6) / Itanium ia64 / gcc version 3.4.6 - 64 bits | Yes | Yes | Yes |
| HP-UX 11.11 / PARISC / aCC version 3.67 | No | Yes | No |
| AIX 5.3 / POWER5 / xlc version 8.0 - 32 bit build on 64 bit OS | Yes | Yes | Yes |
| Microsoft Windows Vista / XP / 2003 server / Microsoft Visual C++ 8.0 - 32 bits | Yes | Yes | Yes |
| Microsoft Windows Vista / XP / 2003 server / Microsoft Visual C++ 8.0 (MFC) - 32 bits | No | Yes | No |
PrismTech supports a wide variety of platforms and compilers. For an up-to-date list, contact us via http://www.prismtechnologies.com/
Additional operating system / compiler combinations may be supported based on demand.
The OpenFusion TAO directory organisation is different from other TAO distributions.
The PrismTech distribution has a modified directory structure to make it more readable and usable.
The directory structure is as follows:
PrismTech's TAO distribution is by default built with the following options:
Key: The values in the Must Match column have the meanings defined below.
Y - the application must have the same value as the build
N - the application may use any value it chooses
E = the application can only use this option if it was set at
build time
B - this option is only effective at build time
The inline, debug and MFC flags are set according to the build. See the build availability list above.
| Option | Description | Must Match | Default Build Flags (Solaris, HP-UX, Linux, LynxOS) | Default Build Flags (Windows 2000, Windows NT, Windows XP) |
|---|---|---|---|---|
| exceptions | Enable native C++ exceptions | Y | 1 | 1 |
| Include_env | Enable ACE_TRY_ENV macro backward compatibility mode. | Y | 0 | 0 |
| rtti | Enable C++ RTTI | N | 1 | 0 |
| optimize | Turn on compiler optimiztion | N | 1 | 1 |
| repo | Use GNU template repository | N | 0 | 0 |
| fast | Use -fast compiler option (SunCC only) | N | 0 | 0 |
| threads | Enable threads (if OS supports) | Y | 1 | 1 |
| purify | Third party product support | N | 0 | 0 |
| quantify | Third party product support | N | 0 | 0 |
| shared_libs | Build shared libraries | E | 1 | 0 |
| static_libs | Build archive libraries | E | 0 | 0 |
| shared_libs_only | Build shared libraries only | E | 1 | 0 |
| static_libs_only | Build static libraries only | E | 0 | 0 |
| minimum_corba | Build with minimum CORBA support | B | 0 | 0 |
| probe | Enable ACE_Timeprobes | B | 0 | 0 |
| profile | Enable profiling | N | 0 | 0 |
| xt_reactor | Build with xt reactor | Y | 0* | 0 |
| fl_reactor | Build with fl reactor | Y | 0 | 0 |
| tk_reactor | Build with tk reactor | Y | 0 | 0 |
| qt-reactor | Build with Qt reactor | Y | 0 | 0 |
| ami | Enable Asynchronous Method Invocation (AMI) | Y | 1 | 1 |
| smart_proxies | Enable Smart Proxies | Y | 0 | 0 |
| corba_messaging | Enable CORBA Messaging | Y | 1 | 1 |
| rt_corba | Enable Real-time CORBA support | Y | 1 | 1 |
| Interface_repo | Enable Interface Repository support | N | 1 | 1 |
| interceptors | Enable portable interceptors | Y | 1 | 1 |
| fakesvcconf | Build in default Service Configurator options | B | 0 | 0 |
* The Sun ONE Studio 7, 8, 9 and 10 and HP ANSI C++ B3910B A.03.39 compiler builds have the xt_reactor flag set to 1.
The following libraries and executables are the TAO product deliverables:
CORBA applications report errors via catching thrown CORBA exceptions. (Note that TAO no longer provides CORBA defined/emulated exceptions, instead it relies on standard, native C++ exception-handling, using try and catch statements.) CORBA exceptions are split into two different forms: "System exceptions" which are thrown by the ORB itself and "User exceptions" that are defined by IDL statements declared by the ORB provided services or end-user applications.
Normally simply catching the specific CORBA exception is enough to indicate
the problem; but the CORBA standard allows the ORB vendor to supply
supplemental information with each exception in the form of its minor code
which is a numerical CORBA::ULong value (obtained from the
caught exception itself via the minor() accessor function). This
value is split up into several sub-fields; the upper most significant 20-bits
are reserved to indicate which ORB originated the minor code itself, while the
least significant 12-bits are used by that ORB as it sees fit (TAO splits these
12-bits into two sub-fields). Note that the actual ORB specific minor codes are
not meant to be portable between different CORBA ORBs; those provided by TAO
are listed below. In addition some simple minor codes are actually detailed in
the CORBA standard for specific circumstances; a minor code of 0x00000000u
for example, simply indicates no further details are available. All of these
CORBA defined codes have zero in the most significant 20-bits. These codes are
mainly used to enable support or debugging to determine why the exceptions are
being thrown in the first place. They will probably have little relevance to an
end user's application unless they are attempting to specialise the handling of
certain otherwise generic exceptions.
CORBA Exception Minor Code (CORBA::ULong): |
||
|---|---|---|
| 20-MSBits | 5-Bits | 7-LSBits |
Identifier 0x54410u << 12 (in ASCII "TA" and a zero nibble) |
Location Code | Error Code |
Full details of the TAO Location Codes can be found in the "Error Handling" chapter of the OCI "TAO Developer's Guide" book, but the best insight may be found by searching the TAO source code directly for the specific used #define Location Code identifiers shown in the table below.
| TAO (5-bit) Location Code | Description | Value |
|---|---|---|
| No specific location details indicated | (0x00u << 7) | |
| TAO_INVOCATION_LOCATION_FORWARD_MINOR_CODE | Location forward failed | (0x01u << 7) |
| TAO_INVOCATION_SEND_REQUEST_MINOR_CODE | Send request failed | (0x02u << 7) |
| TAO_POA_DISCARDING | POA in discarding state | (0x03u << 7) |
| TAO_POA_HOLDING | POA in holding state | (0x04u << 7) |
| TAO_UNHANDLED_SERVER_CXX_EXCEPTION | Unhandled C++ exception in server side | (0x05u << 7) |
| TAO_INVOCATION_RECV_REQUEST_MINOR_CODE | Failed to receive request response | (0x06u << 7) |
| TAO_CONNECTOR_REGISTRY_NO_USABLE_PROTOCOL | All protocols failed to parse the IOR | (0x07u << 7) |
| TAO_MPROFILE_CREATION_ERROR | Error during MProfile creation | (0x08u << 7) |
| TAO_TIMEOUT_CONNECT_MINOR_CODE | Timeout during connect | (0x09u << 7) |
| TAO_TIMEOUT_SEND_MINOR_CODE | Timeout during send | (0x0au << 7) |
| TAO_TIMEOUT_RECV_MINOR_CODE | Timeout during receive | (0x0bu << 7) |
| TAO_IMPLREPO_MINOR_CODE | Implrepo server exception | (0x0cu << 7) |
| TAO_ACCEPTOR_REGISTRY_OPEN_LOCATION_CODE | Endpoint initialization failure in Acceptor Registry | (0x0du << 7) |
| TAO_ORB_CORE_INIT_LOCATION_CODE | ORB core initialization failed | (0x0eu << 7) |
| TAO_POLICY_NARROW_CODE | Failure when narrowing a Policy | (0x0fu << 7) |
| TAO_GUARD_FAILURE | Failure when trying to acquire a guard/monitor | (0x10u << 7) |
| TAO_POA_BEING_DESTROYED | POA has been destroyed or is currently being destroyed | (0x11u << 7) |
| TAO_POA_INACTIVE | POA in inactive state | (0x12u << 7) |
| TAO_CONNECTOR_REGISTRY_INIT_LOCATION_CODE | Initialization failure in Connector Registry | (0x13u << 7) |
| TAO_AMH_REPLY_LOCATION_CODE | Failure when trying to send AHM reply | (0x14u << 7) |
| TAO_RTCORBA_THREAD_CREATION_LOCATION_CODE | Failure in thread creation for RTCORBA thread pool | (0x15u << 7) |
The table below lists the TAO Error Codes; these are based upon the posix standard C errno equivalent codes. These errno values may help determine what the real problem might have been, as they represent the underlying Operating System error that resulted in the exception being thrown (if any).
| TAO (7-bit) Error Code | Description | Value |
|---|---|---|
| TAO_UNSPECIFIED_MINOR_CODE | Unspecified minor code | 0x00u |
| TAO_ETIMEDOUT_MINOR_CODE | Connection timed out | 0x01u |
| TAO_ENFILE_MINOR_CODE | Too many files open in system | 0x02u |
| TAO_EMFILE_MINOR_CODE | Too many open files | 0x03u |
| TAO_EPIPE_MINOR_CODE | Broken pipe | 0x04u |
| TAO_ECONNREFUSED_MINOR_CODE | Connection refused | 0x05u |
| TAO_ENOENT_MINOR_CODE | No such file or directory | 0x06u |
| TAO_EBADF_MINOR_CODE | Bad file descriptor | 0x07u |
| TAO_ENOSYS_MINOR_CODE | Function not implemented | 0x08u |
| TAO_EPERM_MINOR_CODE | Operation not permitted | 0x09u |
| TAO_EAFNOSUPPORT_MINOR_CODE | Protocol family not supported | 0x0au |
| TAO_EAGAIN_MINOR_CODE | Resource temporarily not available | 0x0bu |
| TAO_ENOMEM_MINOR_CODE | Not enough space | 0x0cu |
| TAO_EACCES_MINOR_CODE | Permission denied | 0x0du |
| TAO_EFAULT_MINOR_CODE | Bad address | 0x0eu |
| TAO_EBUSY_MINOR_CODE | Device or resource busy | 0x0fu |
| TAO_EEXIST_MINOR_CODE | File exists | 0x10u |
| TAO_EINVAL_MINOR_CODE | Invalid argument | 0x11u |
| TAO_ECOMM_MINOR_CODE | Communication error on send | 0x12u |
| TAO_ECONNRESET_MINOR_CODE | Connection reset | 0x13u |
| TAO_ENOTSUP_MINOR_CODE | Operation not supported | 0x14u |
When using tao_ifr to add idl to the interface repository on Windows NT with Microsoft Visual C++, you need to have the following in your path:
<TAO Installation dir>\bin
<TAO Installation dir>\lib
<Microsoft Visual Studio dir>\vc98\bin
<Microsoft Visual Studio dir>\Common\MSDev98\bin
where <TAO Installation dir> is the path to the TAO installation directory and <Microsoft Visual Studio dir> is the path to the installation of Microsoft Developer Studio. This is necesary because tao_ifr makes use of the cl.exe C++ preprocessor which is in the <Microsoft Visual Studio dir>\vc98\bin directory, which in turn uses dlls which reside in the <Microsoft Visual Studio dir>\Common\MSDev98\bin directory.
Use of ORB::create_operation_list operation will require the TAO_IFR_Client library to be linked into a program. If the TAO_IFR_Client is not linked a NO_IMPLEMENT exception will be raised if ORB::create_operation_list is invoked.
The examples do not build for a Microsoft Visual C++ V6.0 debug distribution.
The gcc 3.2 compiler fails to compile generated code for IDL containing fixed size arrays. The gcc 3.2.1 compiler fixes this problem (except on MontaVista Linux release 3.0). This was identified during interoperability testing of OpenFusion TAO releases.
UTF-16 Wide Characters / Wide String Interoperability. (Bug ID 00RE)
Issue 1: UTF-16 strings are being marshalled and demarshalled incorrectly. On little endian platforms little endian encoding is employed without an appropriate byte order marker being used. Characters within incoming strings are assumed to be encoded as per the byte order of the encapsulating stream. These are both in contravention of section "15.3.1.6 Character Types" of the CORBA 3.0 specification.
Issue 2: No account is taken of the byte order of an input stream when decoding a wide character type. Wide character passing between platforms with differing endian setting results in corrupted data.
Table Key:
| Product | Direction | Product | Status |
|---|---|---|---|
| JacORB | -> | TAO-BF LE | wstring OK, wchar Broken |
| JacORB | <-> | TAO-BF BE | OK |
| TAO-BF LE | -> | JacORB | Broken |
| TAO-BF LE | <-> | TAO-BF BE | OK |
| TAO-BF LE | <-> | TAO-BF BE | wstring OK, wchar Broken |
| TAO-BF BE | <-> | TAO-BF BE | OK |
| Product | Direction | Product | Status |
|---|---|---|---|
| JacORB | -> | TAO-AF LE | OK |
| JacORB | <-> | TAO-AF BE | OK |
| TAO-AF LE | -> | JacORB | OK |
| TAO-AF LE | <-> | TAO-AF BE | OK |
| TAO-AF LE | <-> | TAO-AF BE | OK |
| TAO-AF BE | <-> | TAO-AF BE | OK |
| Product | Direction | Product | Status |
|---|---|---|---|
| TAO-AF LE | <-> | TAO-BF LE | Broken |
| TAO-AF BE | <-> | TAO-BF BE | OK |
| TAO-AF LE | -> | TAO-BF BE | Broken |
| TAO-AF BE | <- | TAO-BF LE | wstring OK, wchar Broken |
| TAO-AF LE | <- | TAO-BF BE | Broken |
| TAO-AF BE | -> | TAO-BF LE | wstring OK, wchar Broken |
Memory mapped IFR persistence doesn't work on RedHat Linux. (Internal issue TAO#453)
The memory mapped IFR persistence mechanism (-p service option) has been discovered to have incompatibilities with the RedHat Enterprise Server 4 kernel libraries. These consistently result in memory corruption and crashes of the service. There have also been reports of problems on Fedora Core systems and earlier versions of RedHat Enterprise Linux. The problem occurs outside of ACE / TAO. We strongly recommend that this persistence option is not use with this operating system. Please use the flat file persistence mechanism instead (-f option) as this mechanism is more stable.