The release notes provide information about an Ice-E release, including descriptions of significant new features and changes, instructions for upgrading from an earlier release, and important platform-specific details.

On this page:

New Features in Ice-E 1.3

This section describes the significant new features in Ice-E 1.3.

Thread pool concurrency model

Ice-E now supports the same thread pool concurrency model as Ice. The communicator creates two thread pools:

Ice-E does not support per-object adapter thread pools. Thread pools are configured with the same properties as Ice thread pools. For more information on thread pools, please refer to The Ice Threading Model.

Non-blocking AMI

Ice-E now supports asynchronous message invocation with the same semantics as Ice 3.3. In particular, Ice-E guarantees that the calling thread will never block when issuing an asynchronous invocation. The non-blocking nature of AMI requests is especially useful for a graphical application.

AMI in Ice-E supports both oneway and twoway requests and it also supports the same API as Ice to enable an application to implement its own flow control logic.

Please refer to Asynchronous Programming for more information on the AMI semantics.

Real-time support

Ice-E supports new real-time features.

A new start method in IceUtil::Thread allows you to start a thread with a given priority. On POSIX systems, real-time threads use the SCHED_RR scheduling policy.

Ice-E mutexes can also be configured to use the priority inheritance protocol on POSIX systems. This protocol is useful to avoid thread priority inversion. The mutex protocol used by default is specified by the DEFAULT_MUTEX_PROTOCOL macro defined in the cppe/config/Make.rules file.

Please refer to the README file for more information on Ice-E real-time features.

Default servants

This Ice-E release introduces a new default servant API. When combined with dispatch interceptors, default servants can be used as a replacement for servant locators, which are not supported in Ice-E.

Default servants dispatch requests for Ice objects that are not registered with the object adapter's Active Servant Map (ASM). A default servant is registered with an object adapter for a given category.

Objects by value

It's now possible to pass Slice classes by value. Ice-E supports transmitting abstract and concrete Slice classes (with and without operations, respectively). As in Ice, you're responsible for registering an object factory with the communicator to be able to receive a Slice class that has operations.

Ice-E does not support garbage collection of Slice class instances. If your Slice classes contain cyclic dependencies, you will get memory leaks if you fail to break the dependencies between objects.

Dynamic network interfaces

Ice-E server endpoints that are configured to listen on all local interfaces now listen on INADDR_ANY/0.0.0.0 rather than listening separately on each of the interfaces that were found at the time the server started. This means that if a new interface becomes available while the server is running, Ice-E will be able to receive and process requests using that interface.

Note that, if an interface change occurs, an object adapter does not automatically refresh the list of endpoints that it embeds in newly-created proxies. Rather, an application must instruct the object adapter to refresh its endpoint list using the new operation refreshPublishedEndpoints.

Dispatch interceptors

A dispatch interceptor is a server-side mechanism that allows you to intercept incoming client requests before they are given to a servant. The interceptor can examine the incoming request; in particular, it can examine the Current information for the request (which provides access to the operation name, object identity, and so on).

A dispatch interceptor can dispatch a request to a servant and check whether the dispatch was successful; if not, the interceptor can choose to retry the dispatch. This functionality is useful to automatically retry requests that have failed due to a recoverable error condition.

Platform notes for Ice-E 1.3

This section lists the platforms supported by Ice-E, including those platforms that were added or removed in the 1.3 release.

Supported platforms

The following operating systems are supported for Ice-E:

The following C++ compilers are supported:

Desupported platforms

Ice-E no longer supports the following operating systems:

Fixes and improvements in Ice-E 1.3

Below is an abbreviated list of changes included in this release that were not already discussed above. For a complete list of changes, please refer to the CHANGES file included in your Ice-E distribution.

Desupported components in Ice-E 1.3

This section describes Ice-E features and components that are no longer supported.

Thread-per-connection concurrency model

The new thread pool concurrency model, together with the addition of the non-blocking AMI feature, have made the thread-per-connection concurrency model unecessary and it has therefore been removed from this release. See below for additional information.

Blocking concurrency model

The blocking concurrency model has been removed from this release. The blocking concurrency model was only useful for performance purposes. With the addition of AMI and the thread pool concurrency model, supporting this concurrency model would have been too complex.

Java language mapping

Ice-E no longer support the Java mapping. Only the C++ mapping is supported.

Upgrading your application to Ice-E 1.3

Removed APIs

This section describes features and APIs that are no longer available in this release.

Thread-per-connection concurrency model

One useful feature of this concurrency model was serializing the requests received over a connection. This was helpful when the application needed to ensure that requests are dispatched in the order they are received, or when the application did not want to implement the synchronization that might be required by using the thread pool concurrency model.

The ability to serialize requests is now provided by the thread pool and enabled via the configuration property <threadpool>.Serialize.

Blocking concurrency model

This concurrency model is no longer supported. As a result, the Ice.Blocking configuration property should be removed from your configuration files.