Introduction
============

Ice-E is a compact subset of Ice designed for embedded and resource
constrained environments while retaining many of the features that
have made Ice such a compelling alternative for distributed
applications.

Ice-E for Java runs on Java Standard Edition (SE) and several
Java Micro Edition (ME) configurations; see INSTALL for details.

Comparing Ice-E and Ice
=======================

In order to reduce the size of the Ice-E run time, several Ice
features have been removed. The differences are discussed in the
sections below.

Concurrency Models
------------------

Ice-E supports only the thread-per-connection server-side concurrency
model; the thread pool concurrency model is not supported.

Applications that make nested callbacks must be aware of the following
limitations of the thread-per-connection model:

* For bidirectional connections, the nested callback must be a oneway
  invocation.

* For regular (unidirectional) connections, the nested callback can
  be a twoway invocation.

* Only one level of nested callbacks is allowed.

For the client-side, Ice-E supports the thread-per-connection model as
well as a blocking concurrency model that can provide better
performance results. Set the configuration property Ice.Blocking=1 to
enable the blocking model. In addition to the limitations of the
thread-per-connection model described above, the blocking model also
disallows the use of bidirectional connections.

Transports
----------

Ice-E includes support for the TCP transport; UDP and SSL are not
supported. The built-in TCP transport can be replaced with one of your
own.

Objects by Value
----------------

Ice-E does not allow Slice classes to be transmitted by value.

Servant Locators
----------------

Ice-E does not support servant locators. Ice-E applications must
use the active servant map.

Collocation Optimization
------------------------

Support for collocation optimization has been removed. Note that
Ice-E applications are still able to make invocations on collocated
servants, but those invocations are not optimized and therefore will
be marshaled and sent over the built-in transport.

Mapping Changes
---------------

The CLDC specification does not include java.util.Map, therefore the
mapping for the Slice dictionary type has been changed to use
java.util.Hashtable instead.

Due to restrictions of the target Java platforms, metadata to 
customize the mapping for sequences is ignored.

Property Changes
----------------

The properties Ice.StdErr and Ice.StdOut properties are not supported,
since Java ME does not provide a mechanism for reassigning the
stderr and stdout streams.

Other Removed Features
----------------------

Ice-E has also eliminated the following features:

* Asynchronous invocation and dispatch
* Streaming APIs
* Active connection management
* Protocol compression
* Ice.Application class

Customization
-------------

If the current features do not meet your requirements, ZeroC can
customize Ice-E for commercial users. Please contact us at
info@zeroc.com for more information.
