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

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

Ice-E for Java is supported in two environments: Java Development
Kit (JDK) 1.1 or later, and Java2 Micro Edition (J2ME). For
installation information, see the files INSTALL.JDK and INSTALL.J2ME,
respectively.


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,
although it is still possible to use Slice classes in a local context.

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 MIDP specification does not include java.util.Map, therefore the
mapping for the Slice dictionary type has been changed to use
java.util.Hashtable instead.

Metadata to customize the mapping for sequences is ignored.

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

The properties Ice.StdErr and Ice.StdOut properties are not supported, 
since J2ME 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.
