Sophie

Sophie

distrib > Mageia > 5 > x86_64 > media > core-release > by-pkgid > 24f6438f7c4c53b72e8330c54c8c5f62 > files > 19

ice-3.5.1-8.mga5.x86_64.rpm

======================================================================
CHANGES for Ice 3.5
======================================================================

The entries below contain brief descriptions of the changes in a
release, in no particular order. Some of the entries reflect
significant new additions, while others represent minor corrections.
Although this list is not a comprehensive report of every change we
made in a release, it does provide details on the changes we feel
Ice users might need to be aware of.

We recommend that you use the release notes included in your Ice
distribution as a guide for migrating your applications to this
release, and the Ice manual for complete details on a particular
aspect of Ice.

Note that this file only includes changes since Ice 3.2.1. For the
change history of prior releases, refer to the CHANGES file in the
subdirectory of each language mapping (e.g., cpp/CHANGES).


======================================================================
Changes since version 3.5.0
======================================================================


General Changes
===============

- Moved instructions for building a source distribution to the Ice
  manual. See the section "Building Ice from Source" in the Release
  Notes.

- It's now possible to install an instrumentation observer with the
  communicator initialization data structure and still have the
  metrics administrative facet enabled. Previously, installing an
  observer would disable the metrics facet.

- IceGrid database replication now keeps track of a serial number to
  compare the slave and master databases on startup. A slave database
  with a more recent serial number than the master database will no
  longer be overwritten when the slave connects and synchronizes its
  database with the master. Instead, an error message will be printed
  on both the master and slave consoles and the slave connection will
  be rejected by the master.

  Upon getting this error, the IceGrid administrator can decide which
  database to keep and either initialize the master database with the
  slave database or vice-versa. A new --initdb-from-replica=<replica>
  command-line option has been added to allow initializing a registry
  database from another replica.

  This change is backward compatible with Ice 3.5.0. If a 3.5.0 slave
  connects to an Ice 3.5.1 master, or vice-versa, no check is
  performed and the previous behavior applies (the slave database
  always gets overwritten by the master database when the slave
  connects to the master).

- Improved IceGrid algorithm to find registry replicas on node or
  slave startup.

- Fixed bug in IceGrid::Query::findAllReplicas implementation that
  could cause a crash when trying to find the proxies of an empty
  replica group.

- Added support for SOCKSv4 proxies to the Ice core in C++, C# and
  Java. This allows outgoing TCP & SSL connections using IPv4 to be
  mediated by a network proxy service.

- Fixed bug that could cause an unexpected exception or error on
  connection closure when the connection is closed shortly before
  sending pending messages.

- Fixed the graphical IceGrid administrative tool to run and build
  in JVMs without JavaFX support.
  
- IceGrid node now initializes the process supplementary groups.

- Added man pages for Ice executable tools and commands.

- Added ability to list IceStorm topic subscribers.

- Fixed a bug in the graphical IceGrid administrative tool that caused
  the "Save" and "Save to File" commands to produce an empty file 
  without reporting any errors.

- The Visual Studio Add-in now supports configuration-specific
  compiler options.
  

C++ Changes
===========

- Reading an optional with the Ice::InputStream::read method should
  now clear the optional if the optional isn't marshaled on the input
  stream.

- Fixed file descriptor leak that would occur if an object adapter
  listened on a UDP endpoint (one descriptor leaked per UDP endpoint).

- Fixed a bug that could cause an unexpected exception to be thrown on
  plug-in loading when a plug-in property specified both a path and
  version.

- Fixed a bug in slice2cpp that generated invalid C++ code for C++11
  asynchronous invocations.
  
- Fixed a bug in slice2cpp that generated invalid C++ code when using
  "cpp:virtual" metadata.
  
- Fixed a bug in slice2cpp that generated invalid C++ code when a
  Slice operation has more than ten output parameters.


Java Changes
============

- Fixed an SSL issue with anonymous ciphers on SLES 11 SP3 when using
  the IBM JDK.

- To simplify the use of optional values with the stream API, an
  optionalFormat() method is now generated in Helper classes when
  the --stream option is enabled.

- Fixed an assertion that would occur if a memory limit exception was
  raised while marshaling the response of an AMD callback.


C# Changes
==========

- To simplify the use of optional values with the stream API, an
  optionalFormat() method is now generated in Helper classes when
  the --stream option is enabled.

- Fixed an assertion that would occur if a memory limit exception was
  raised while marshaling the response of an AMD callback.

- Fixed a bug in slice2cs that caused incorrect code to be generated
  for a Slice structure that declares default values for its members.


PHP Changes
===========

- Fixed PHP namespace builds.


======================================================================
Changes since version 3.5b
======================================================================


General Changes
===============

- Fixed a bug where the CtrlCHandler destruction would cause a
  segfault on some recent Linux distributions with GCC 4.7.

- IPv6 is now enabled by default. A server listening on an endpoint
  with the wildcard address will therefore now accept connections from
  both IPv4 and IPv6 clients. It will also publish endpoints with IPv6
  addresses if some network interfaces are configured with IPv6
  addresses.

  Ice will still prefer IPv4 addresses when resolving hostnames from
  endpoints and the result includes both types of addresses. This
  behavior can be changed by setting Ice.PreferIPv6Address to 1. In
  this case, Ice prefers the IPv6 address over the IPv4 address if the
  hostname resolves to both IPv4 and IPv6 addresses.

  IPv6 can be disabled by setting Ice.IPv6 to 0.

- Fixed a bug where an erroneous connection warning could be printed
  on the server side if the client closed the connection before
  receiving the connection validation message.

- Fixed a Freeze map issue where the clear method could throw an
  exception if active cursors were still opened.

- Added support for wrapInputStream function. Unlike the
  createInputStream function, the returned input stream wraps the
  provided encoded data rather than copying it. While it avoids
  copying the data, care must be taken to not modify the data while
  the input stream is being used.

- The IceBox server no longer configures a service's logger if the
  service defines Ice.LogFile or Ice.UseSyslog.

- IceGrid should now interoperate with IceGrid node versions >= 3.2.

- Fixed issue where defining an IceUtil::Handle for a specialization
  of a generated Slice class would fail to compile because the Slice
  class privately inherited from IceInternal::GCShared.

- Fixed client side checks for encoding version. An invocation on a
  proxy with a compatible encoding (same major version) will now
  succeed even if the encoding minor version is not supported. In this
  case, the Ice run time uses the greatest supported encoding.

- Fixed bug where the retry of an AMI invocation could trigger an
  assertion.

- Improved the dispatch and remote invocation metrics classes to
  support additional size and replySize data members.

- Improved the 1.1 encoding to further reduce the size of encoded
  objects. Objects are no longer encoded at the end of the
  encapsulation. Instead, an object is encoded as soon as it's written
  and it has not already been encoded within the encapsulation.

  IMPORTANT: This change implies that the 1.1 class encoding from Ice
  3.5.0 is incompatible with the encoding from the 3.5 beta version.

- Added support for Slice class compact IDs. A compact ID is defined
  as a numeric value in the Slice class definition. For example:

  // Slice
  class Compact(1)
  {
      string v;
  };

  When using the 1.1 encoding, Ice will marshal this numeric value
  instead of the string type ID of the class.

- Fixed bugs in the Slice parser related to optional values:

  * The parser was too strict when validating tags of optional data
    members. It is legal to reuse the tag of an inherited data member
    but the parser treated it as an error.

  * The parser did not detect duplicate tags among the optional
    parameters in an operation.

- The properties IcePatch2.ChunkSize, IcePatch2.Directory,
  IcePatch2.Remove and IcePatch2.Thorough have been deprecated for
  IcePatch2 clients. The replacements are IcePatch2Client.ChunkSize,
  IcePatch2Client.Directory, IcePatch2Client.Remove and
  IcePatch2Client.Thorough, respectively.


C++ Changes
===========

- operator== and operator< are now only generated by default for Slice
  structures that can be used as dictionary keys. For other structures
  you will need to add the metadata ["cpp:comparable"] if you need
  these operators. For example:

  ["cpp:comparable"]
  struct MyStruct {
      Ice::StringSeq ids;
  };

- Added support for a zero-copy Ice::OutputStream::finished() method.
  If supported by the stream implementation, the memory returned by
  this method points to the output stream's internal buffer. Special
  care must be taken to ensure the memory is not accessed after the
  de-allocation of the output stream object.

- Added support for zero-copy on x86_64 processors when using the
  sequence C++ array mapping.


Java Changes
============

- Added support for the Ice.UseApplicationClassLoader configuration
  property. When set to 1, the Ice core will set the thread context
  class loader to the class loader of the servant or AMI callback
  before dispatching the call.


Python Changes
==============

- Fixed a bug in the Glacier2.Application class where the code was
  using the old asynchronous API.

- Added "self" to the Slice compiler's list of Python keywords.


PHP Changes
===========

- SLES 11 RPMs now require PHP 5.3.


======================================================================
Changes since version 3.4.2
======================================================================


General Changes
===============

- The Ice::ConnectionInfo class supports an additional connectionId
  field. This ID matches the connection ID set on a proxy with the
  ice_connectionId proxy method.

- The Ice::UDPEndpointInfo class no longer supports encoding and
  protocol version members. These members have been deprecated with
  the 1.1 encoding.

- Added support for TLS 1.1 and TLS 1.2 in IceSSL for C++ and Java.

- IceGrid now supports a new proxy-options attribute on the <adapter>
  <replica-group>, <object> and <allocatable> XML descriptor
  elements. This attribute allows to specify the proxy options to use
  for well-known objects or allocatable objects. For adapters, it also
  generates the object adapter ProxyOptions property in the server or
  service configuration file. This change requires a IceGrid database
  upgrade.

- Improved Glacier2 permission verifiers to permit throwing
  Glacier2::PermissionDeniedException exceptions. Glacier2 now
  forwards permission denied exceptions to the client.

- The Slice compilers now define the ICE_VERSION preprocessor macro
  so that you can use the Ice version to conditionally compile your
  Slice definitions.

- Fixed bug where the UDP client endpoint --interface option would be
  ignored on some platforms (Windows and OS X).

- IceGrid now enables active connection management for its object
  adapters to allow client connections to be closed automatically when
  inactive.

- Improved Ice.Trace.Network tracing for transport acceptors. The
  tracing now shows when the object adapter starts listening for
  incoming connections and when it starts accepting them.

- Improved IceStorm batch subscriber sending to wait for the batch to
  be sent before sending another batch.

- Added a new "compact" encoding for Slice classes and exceptions.
  This format significantly reduces the "on-the-wire" size of class
  and exception instances, but sacrifices the ability for the receiver
  to "slice" an unknown derived type to a known type. The compact
  format is now the default encoding. Applications can selectively
  enable the traditional "sliced" format using metadata and the
  property Ice.Default.SlicedFormat.

- When using the "sliced" format for Slice classes and exceptions,
  Ice now has the ability to preserve the slices of unknown derived
  types and forward the original value intact. This allows an
  intermediary without knowledge of all derived types to forward a
  value while retaining the slices of unknown types. Types must be
  annotated with the "preserve-slice" metadata to support this
  feature.

- Added support for optional data members in classes and exceptions,
  and optional parameters in operations.

- The changes necessary to support the compact encoding, preserved
  slices, and optional members and parameters required a revision
  to the Ice encoding. The default encoding version is now 1.1. Ice
  remains fully backward-compatible with existing applications that
  use version 1.0 of the Ice encoding, however these new features
  cannot be used in mixed environments.

- Slice enumerators can now be assigned arbitrary values:

  // Slice
  enum Color
  {
      red = 1,
      green,    // Value is 2
      blue = 9
  };

- IceGrid and the IceGrid administrative clients have been enhanced to
  support updating server configuration properties at run time without
  requiring the servers to be restarted.

- Added support for updating Ice properties at run time using the Ice
  administrative "Properties" facet. The facet also allows user code
  to register a callback to be notified of the updates.

- Fixed a bug where batched requests could cause invalid
  Ice::UnmarshalOutOfBoundsException exceptions if a request from the
  batch failed because no servants could be found to dispatch the
  request.

- Fixed issue where IceGrid round-robin load balancing policy returned
  the same adapter endpoints multiple times if some IceGrid nodes were
  down.

- Fixed a bug where, under certain circumstances, Ice could assert
  when a connection was being closed.

- Improved server disable to prevent the IceGrid locator from
  returning endpoints of disabled servers.

- Fixed a per-session memory leak in Glacier2 that occurred when
  request buffering was enabled.

- Fixed IceStorm bug that could cause a crash when using the Freeze
  database backend and multiple threads were trying to write to the
  database.

- Fixed minor performance issue with bi-directional proxies.

- Added support for replica and node name verification when securing
  the IceGrid node and registries. The names are matched against the
  certificate common name. The connection is rejected if the
  certificate CN does not match the replica or node name. The
  properties IceGrid.Registry.RequireNodeCertCN and
  IceGrid.Registry.RequireReplicaCertCN must be set to 1 to enable
  this verification.

- Fixed IceGrid bug where the server deactivation timeout would be
  ignored if the server was not deactivated using the IceGrid
  administrative facility.

- Fixed IceSSL bug in all language mappings that could cause a server
  to crash if a failure occurred during connection establishment and
  network tracing was enabled.


C++ Changes
===========

- Added support for WinRT.

- Added new AMI mapping with support for C++11 lambda functions. This
  mapping is only available on platforms supporting the new C++11
  features.

- Fixed a Windows bug where a connection failure would be reported
  with Ice::SocketException instead of Ice:ConnectFailedException.

- Added the property IceSSL.InitOpenSSL, which allows an application
  to disable the OpenSSL startup and shutdown activities in the IceSSL
  plug-in.

- Fixed a bug that could cause an assertion failure when flushing
  batch requests.

- Added support for clang compiler on OS X.

- Fixed issue where a connection to a remote address would always fail
  with an assertion on Windows 8.

- Declaring ice_print for local exceptions is now optional. This
  method is not declared by default, but you can use the metadata tag
  "cpp:ice_print" to enable the method declaration.

- The slice2cpp --depend option now includes the generated header file
  in Makefile dependencies.

- Deprecated ice_getHash. Users should create their own hash
  implementations when needed.


Visual Studio Add-in Changes
============================

- Fixed a bug with C++ projects that build static libraries.

- Fixed a bug that could cause Visual Studio to hang while opening or
  building solutions containing a large number of projects.

- Fixed a bug during project cleaning in which an exception was thrown
  when trying to remove generated files and the user is not authorized
  to remove the files.

- Fixed a bug with solutions that contain unloaded projects.


C# Changes
==========

- Fixed potential leak which could eventually result in an
  OutOfMemoryException for applications creating proxies on a regular
  basis.

- Added the properties IceSSL.KeySet and IceSSL.PersistKeySet to
  control how and where to import private keys of X.509 certificates.

- Changed the marshaling code for sequences of user-defined types that
  are mapped to System.Collections.Generic.Stack<T>. In previous
  releases the elements were marshaled in bottom-to-top order; now
  they are marshaled in top-to-bottom order. Stacks of primitive types
  have always been marshaled in top-to-bottom order.

- Fixed a bug that could cause an infinite loop while visiting all
  referenced assemblies of an executable.

- The generated constructors for an abstract Slice class now use
  protected visibility instead of public visibility.

- Fixed a bug in Ice.Application for Mono that could cause the VM to
  crash when a signal occurred.

- Minor marshaling/un-marshaling performance improvement (removed
  virtual specifier from streaming class).

- Added missing throwLocalException method to Ice.AsyncResult
  interface.

- Struct types that contains default values are mapped to a class.


Java Changes
============

- Fixed a Freeze map index marshaling bug. The encoding of the key
  would write an additional byte if the map value used classes. This
  bug fix requires that you recreate your indices if your Freeze map
  value uses classes.

- Fixed a bug in IceSSL that could cause delays due to DNS lookups.

- Fixed a bug in the generated code for a Slice exception with no
  data members: constructors are now generated correctly.

- Fixed an IceSSL bug in which the IceSSL.Alias property was not
  working correctly.

- The mapping for Slice classes, exceptions and structures now defines a
  serialVersionUID member. You can override the default UID using the
  metadata [java:serialVersionUID:<value>].

- Ice services are now built in separate JAR files.


Python Changes
==============

- Added support for Python 3.

- Fixed a bug in the checkedCast operation when using a non-existent
  facet. In previous releases this operation raised a
  FacetNotExistException; now it returns a nil proxy as in other
  language mappings.

- Fixed a bug that caused IceGrid activation of a Python server to
  hang when tracing was enabled for the server.


PHP Changes
===========

- Added compatibility with PHP 5.4.

- Fixed a bug in the checkedCast operation when using a non-existent
  facet. In previous releases this operation raised a
  FacetNotExistException; now it returns a nil proxy as in other
  language mappings.

- Fixed a bug in Ice_initialize: if an array was passed representing
  the command-line arguments, the function was not updating that array
  to remove Ice-specific options.

- It is no longer necessary to use call-time reference arguments when
  passing the command-line argument array to Ice_initialize and
  Ice_createProperties, as these functions now force their arguments
  to be passed by reference. For example, where you used to call a
  function like this:

  $communicator = Ice_initialize(&$argv);

  you can now use this:

  $communicator = Ice_initialize($argv);


Ruby Changes
============

- Fixed a bug in the checkedCast operation when using a non-existent
  facet. In previous releases this operation raised a
  FacetNotExistException; now it returns a nil proxy as in other
  language mappings.


======================================================================
Changes since version 3.4.1
======================================================================


General Changes
===============

- The operation mode sent over the wire for the Object operations
  ice_ping, ice_isA, ice_ids, and ice_id should be Nonmutating, but
  the language mappings were inconsistent in this respect. All
  language mappings now send the correct mode.

- Fixed a bug where under certain circumstances, Ice would
  indefinitely re-try to add a proxy to the Glacier2 routing table.

- Improved queuing of Glacier2 requests to the client to not invoke
  requests if the client connection already has requests pending for
  send. Instead, Glacier2 waits for the pending requests to be
  sent. This allow request overriding to occur more often when the
  client connection is slow.

- Fixed bug where an IceGrid node or registry could hang for a long
  time on startup if some IceGrid registry replicas weren't reachable.

- Added throwLocalException method to the Ice AsyncResult class. If
  the request fails with a local exception, this method throws the
  local exception.

- Fixed a bug that caused a crash if a timeout occurs while sending
  an AMI request and if automatic retry is enabled (the default).

- It is now possible to use a constant as the default value for a data
  member. For example:

  // Slice
  const int MIN = 1;

  struct Info
  {
      int size = MIN;
  };

  It is also possible for a constant to refer to another constant:

  // Slice
  const int MAXIMUM_SIZE = 100;
  const int DEFAULT_SIZE = MAXIMUM_SIZE;


C++ Changes
===========

- Fixed a bug in the Linux epoll selector implementation that could
  cause hangs when using the thread pool serialization mode.

- Fixed a memory leak in IceSSL on Windows.

- Fixed a bug in the generated code for a Slice structure containing
  at least one data member that declares a default value. The
  constructors were not being exported correctly in this case.

- Fixed a bug where the IceUtil::Timer thread could die in case very
  large delays were specified.

- Removed extra include/IceGrid/Perf.h file.


Java Changes
============

- Added support for Android.

- Added overloaded constructors for user and system exceptions that
  accept a Throwable argument.

- Added an ice_staticId method to generated PrxHelper classes.

- Fixed a bug in slice2java in which a floating point default value
  could cause a compile error.

- Fixed a bug where Ice.ServerIdleTime wouldn't consistently shutdown
  servers after the given period of inactivity.


C# Changes
==========

- Added support for the .NET Compact Framework.

- Added demo/Ice/compact, which is a simple graphical client that uses
  Ice for .NET Compact Framework.

- Fixed bugs in the generated code that caused naming conflicts when
  using a Slice module named 'System'.

- Added an ice_staticId method to generated PrxHelper classes.

- Fixed a bug in the generated code when a Slice class uses the
  property mapping and declares default values for its members.


Python Changes
==============

- Fixed bug where None was not recognized as a keyword.


Ruby Changes
============

- Fixed a bug in the Ice extension that would cause an ArgumentError
  to be raised when attempting to print a byte sequence whose value is
  a string that contains null bytes.


PHP Changes
===========

- Fixed a bug that caused 'undefined symbol IcePHP__t_XXX' errors when
  Ice.php or a generated file is included from a non-global scope.

- slice2php now generates 'require_once' statements corresponding to
  Slice #include directives, replacing the 'require' statements used
  in previous releases.

- Fixed a bug in the Ice extension that caused Ice-related INI
  settings to be ignored.


Visual Studio Add-in Changes
============================

- Fixed a bug that prevented the Add-in from automatically compiling
  Slice files when using a non-English version of Visual Studio.

- Improved the layout and wording of the Ice Configuration dialogs.

- Added $(IceHome) macro to VS 2008 project configurations.

- Changed C++ project configurations to use $(IceHome) macro in
  configuration settings.

- Removed Ice Home field from "Ice Configuration" dialog. Projects
  now always use the Ice installation corresponding to the location
  of the add-in DLL.

- Fixed issues that prevented the use of solution folders in Ice
  projects.

- Fixed an issue that caused the add-in to not work when using
  Visual Studio 2010 and "Solution Navigator".

- Added a check to prevent incorrect Runtime library usage in C++
  projects.

- Added support for .NET Smart Device project types used by the .NET
  Compact Framework.

- Improved add-in output messages.

- Fixed an issue that produced a deadlock in Visual Studio when
  Slice compiler output was large enough to fill the output buffer.

- Fixed support for parallel builds. The Slice compiler was run
  several times, once for each parallel build. Now the Slice
  compiler is run only once, before all parallel builds begin.

- Fixed an issue that could cause errors with Visual Studio if a
  Slice file was saved while the project was building.

- Fixed the add-in to work properly when --header-ext and
  --source-ext are present in Extra Compiler Options.

- Fixed the add-in to support building Freeze demos without the need
  to set environment variables.

- Fixed the add-in to always open generated files as read only;
  previously the generated files were not opened read only until the
  first project build.

- Added support for setting the output directory for generated files,
  making the add-in more VCS friendly.

- Added support for .NET DEVPATH.

- Added support for canceling changes in configuration dialogs. All
  the configuration dialogs now have OK, Cancel, Apply buttons with
  the standard semantics.

- Added warnings to prevent incorrect options from being entered in
  Extra Compiler Options.

- Added a timestamp to Slice build output, which is only printed when
  the trace level is Debug.

- The add-in now supports command-line builds.

- The add-in now avoids making extraneous changes to projects that
  could result in merge issues when projects are in a shared
  development.

- The add-in no longer overrides the debug environment setting for
  PATH, but rather appends appropriately.

- On the loss of focus when adding an include directory in the Slice
  Include Path, the addition is now saved rather than lost.

- Fixed an issue where moving a Slice-generated file to a filter so
  that it would be ignored by source control did not always work
  because the generated files could be moved back into the regular
  Source Files list by a build.

- Improved the tracing output generated by the add-in and changed
  the tracing options.


======================================================================
Changes since version 3.4.0
======================================================================


General Changes
===============

- Added the new property Freeze.DbEnv.<db>.LockFile and changed the
  dumpdb and transformdb utilities so that they can be run safely on
  a database environment that is currently open in another process.

- Changed the Glacier2 helper classes to cache the client category.

- Added the ability to use underscores in Slice identifiers. See the
  release notes for important information on this change.

- Added the setConnectContext method to Glacier2.SessionFactoryHelper,
  which allows an application to provide a request context to be used
  when creating a Glacier2 session. (Java and C#)

- Fixed IceGrid bug where node observers would not be notified when a
  server is re-enabled after it has been updated and if the server was
  disabled following an activation failure.

- Fixed a bug in the Glacier2.SessionFactoryHelper class (Java/C#) in
  which the getPort() method would return an incorrect default port if
  no port was configured.


C++ Changes
===========

- Fixed a bug in slice2cpp in which streaming code was not generated
  properly for types in nested modules.

- slice2cpp now generates a "one-shot" constructor for a Slice
  structure if at least one of its members has a default value.

- Fixed a bug in slice2cpp so that asynchronous "end_op" methods are
  now exported properly.

- Fixed a bug in slice2cpp that would generate invalid code for a
  Slice exception when the --stream option was not used.

- Fixed compatibility issues with OpenSSL 1.0.

- Fixed a bug in slice2cpp that would cause invalid code to be
  generated for a nested Slice definition when the --stream option was
  used.

- Fixed a bug in Freeze that disabled automatic log deletion.


Java Changes
============

- Fixed an issue in which intensive use of Freeze or the stream API
  could cause an OutOfMemoryError. Note that Freeze maps must be
  regenerated with slice2freezej to incorporate this fix.

- Fixed a bug in the Slice2Java ant task in which duplicate Slice
  files could be passed to slice2java. Also fixed a bug in slice2java
  that caused the translator to fail if a duplicate file was passed
  on the command line.

- Fixed race condition which could cause the thread pool selector
  thread to go away (causing the thread pool to not dispatch further
  incoming messages).

- Deprecated Ice.AsyncCallback. To use the generic asynchronous
  callback facility, applications should derive their classes from
  Ice.Callback.

- The size method on a Freeze.Map and on the value of an indexed
  submap now use the current transaction associated with the
  connection, if any.


C# Changes
==========

- Fixed a bug in the generated code that prevented sequences from
  being marshaled using the stream API if the sequences used generic
  collection types.

- Fixed a bug in the IceSSL plug-in that could incorrectly report a
  certificate verification failure when the IceSSL.CheckCertName
  property is enabled.


Python Changes
==============

- Fixed a bug in which destroyed Communicator instances were not being
  garbage collected.

- Fixed a bug in Ice.Application in which the exit status was not
  properly returned from main().


======================================================================
Changes since version 3.4b
======================================================================


General Changes
===============

- Added ability to define default values for Slice data members. For
  example, you can write:

  // Slice
  class C
  {
      int i = 2;
      string name = "John";
  };

- Fixed IceGrid bug where the IceGrid node would disconnect from the
  registry if the clock was moved backward.

- Fixed hang in slice2cs and slice2py that would occur if a comment
  contained a '<' with no closing '>'.

- Fixed a bug in the Java and C# stream classes where readString() and
  readBlob() were not checking the size before allocating memory.

- Fixed source files to have consistent end of line terminators.

- Fixed the Ice.initialize(), Ice.initialize(Ice.InitializationData)
  and Ice.createProperties() overloads in Python, Ruby and PHP to
  match the C++, .NET and Java behavior. These overloads no longer
  read the ICE_CONFIG environment variable.

- Fixed IceGrid bug where updating an application could cause a
  temporary hang if a server deactivation hanged during the update.


C++ Changes
===========

- Renamed the createIceStringConverter function back to
  createStringConverter for compatibility with previous releases.


Python Changes
==============

- Fixed a code generation bug that could lead to undefined Slice
  types, depending on the order in which the generated code was
  imported.

- Changed the Python mapping for long integer constants so that 64-bit
  values are no longer generated as strings.


Ruby Changes
============

- Fixed a compilation error when using Ruby 1.8.7 (patch level >=
  248).


======================================================================
Changes since version 3.3.1
======================================================================


General Changes
===============

These entries apply to all relevant language mappings unless otherwise
noted.

- Added a new asynchronous method invocation (AMI) facility for C++,
  C#, Java, and Python. The previous API is now deprecated.

- Added the ability to invoke flushBatchRequests asynchronously on a
  communicator or connection.

- The Ice extension for Visual Studio is now included in the Ice
  distribution. The source code for the extension can be found in the
  vsplugin subdirectory of the source distribution. Note that the
  extension no longer supports Visual Studio 2005.

- Added a cloneWithPrefix operation to the Logger interface.

- Added a removeServantLocator operation to the ObjectAdapter
  interface.

- The translators now include a comment at the beginning of each
  generated file to indicate that the file is machine-generated.
  This is particularly useful for tools such as StyleCop.

- The IceGrid graphical administration tool now allows you to filter
  the live deployment for a particular application.

- Added the ability to query an IceGrid node to determine the number
  of CPU sockets on its host machine. Currently this only works for
  Windows Vista (or later) and native (non-VM) Linux. You can also
  manually configure the number of CPU sockets.

- Freeze now uses file locks to prevent multiple processes from
  opening the same database environment.

- Added new utility classes to simplify the use of Glacier2. The
  Glacier2::Application class extends Ice::Application to add support
  for keeping a Glacier2 session alive and automatically restarting it
  when necessary. For Java and C#, helper classes are also provided
  for use in graphical programs. See the Ice manual for more
  information.

- Added new InputStream::readAndCheckSeqSize method to read and check
  the size of a sequence. The check ensures the sequence size is
  consistent with the stream buffer size. This is useful to prevent
  over-allocating memory for the sequence if the input stream data
  cannot be trusted.

- When using the system logger (enabled when Ice.UseSyslog is set), it
  is now possible to set the facility via the Ice.SyslogFacility
  property. The default value is LOG_USER.

- It is now legal to pass an empty name to createObjectAdapterWithRouter
  and createObjectAdapterWithEndpoints. If so, a UUID will be used for
  the object adapter's name.

- Added support for dispatching servant invocations and AMI callbacks
  in application-specific threads (e.g., in a GUI-safe thread). The
  application needs to implement the Ice::Dispatcher interface and
  initialize the communicator appropriately to use this dispatcher
  implementation. See the Ice manual for more information.

- icegridadmin now clears the user-supplied password after use.

- icegridadmin now correctly handles EOF when reading username and
  password.

- The Connection::createProxy method will now create a secure
  proxy if the connection is secure and a datagram proxy if the
  connection is a datagram connection.

- Added Communicator::proxyToProperty which converts a proxy to a
  property set.

- Calling Glacier2::Router::destroySession() no longer raises an
  Ice::ConnectionLostException exception. Glacier2 no longer
  forcefully closes the connection of a destroyed session but instead
  allows active connection management (ACM) for client connections to
  close it (see below).

- Glacier2 has been changed to support the use of active connection
  management. Active connection management is enabled by default for
  Glacier2 client connections if Glacier2.SessionTimeout is set.
  The ACM timeout is set to twice the value of the session timeout. If
  the session timeout is disabled, ACM is also disabled for client
  connections.

- Added support for a per-object adapter ACM timeout configured via
  the <adapter>.ACM property. If not set, the property defaults to
  value of Ice.ACM.Server set for the adapter's communicator.

- Improved the Ice run time's invocation retry facility to always
  retry at least once on Ice::CloseConnectionException failures even
  if the retry limit has been reached. If retries are disabled, this
  ensures that an invocation is retried if it fails with an
  Ice::CloseConnectionException.

- Added Glacier2.AddConnectionContext property to enable forwarding
  connection information into the context of routed invocations. See
  the manual for more information. Glacier2.AddSSLContext has been
  deprecated, this new property should be used instead.

- Added Ice.Override.CloseTimeout property. This property overrides
  timeout settings used to close connections.

- Ice connections are now forcefully closed after sending a close
  connection message and once the connection timeout
  expires. Previously, the connection would only be closed when the
  object adapter or communicator was destroyed.

- The new Ice::ThreadHookPlugin class allows you to install thread
  notification hooks during communicator initialization via plug-ins.

- Added Glacier2::Router::refreshSession, which keeps the client's
  Glacier2 session alive. This is useful in the case that the
  application architecture does not use a Glacier2 session
  manager. Modified demo/Glacier2/callback to demonstrate the use of
  this method.

- Fixed bug in icegridadmin where invalid XML could cause a crash.

- Fixed a bug where calling the object adapter waitForHold() method
  would cause other calls on the object adapter to hang until the
  waitForHold() method returned.

- Improved connection establishment scalability. Creating or accepting
  a new connection should now be done in constant time regardless of
  the number of connections already established or accepted.

- Fixed Glacier2 router bug which would cause the getCategoryForClient
  method to throw Ice::NullHandleException if the server endpoints
  were not set; instead it now returns an empty string.

- Ice.NegativeSizeException has been removed. The run time now throws
  MarshalException or UnmarshalOutOfBoundsException instead.

- The Ice thread pool now supports receiving and sending data over Ice
  connections using multiple threads. Allowing multiple connections to
  concurrently send and receive data improves CPU usage on machines
  with multiple cores. The maximum number of threads allowed to
  concurrently send/receive data is capped by the number of available
  cores.

- The Ice run time now uses Windows completion ports and overlapped IO
  to accept, connect, and receive and send data over connections. This
  improves scalability of server applications handling many
  connections on Windows.

- Ice connections now support read timeouts. A connection will now
  eventually timeout once the connection timeout is reached if no more
  data is available for reading after the message header was received.
  ACM no longer closes a connection for which a message is being
  received.

- The IceSSL.TrustOnly properties support a new syntax that allows you
  to reject a peer whose distinguished name matches certain criteria.

- IceSSL now compares the host name or IP address in a proxy endpoint
  (if any) against the common name of the server's certificate when
  the property IceSSL.CheckCertName is enabled. This is in addition to
  the existing behavior that compared the host name or IP address
  against the DNS names and IP addresses in the server certificate's
  subject alternative name extension.

- slice2docbook is no longer supported and has been removed from
  the distribution.

- slice2html comments now use a syntax that matches the javadoc
  syntax. Instead of

      module::interface::operation

  slice2html now expects

      module.interface#operation

  Similarly, the link syntax now follows the javadoc syntax. Instead
  of

      [module::interface::operation]

  slice2html now expects

      {@link module.interface#operation}

  The old syntax is still supported; slice2html prints a warning for
  each source file in which it encounters the old syntax.

- A batch invocation now only throws if the connection associated
  with the proxy failed and there were batch requests queued at the
  time of the failure. If there were no batch requests queued, the
  batch invocation does not throw but instead tries to obtain a new
  connection.

- Added the ability to read properties from the Windows registry. This
  is done by setting the Ice.Config property to a value such as the
  following:

    HKLM\Software\MyCompany\IceProperties

  This will read all the string values from the specified key in
  HKEY_LOCAL_MACHINE and set them as Ice properties.

- iceserviceinstall, the Windows service installation utility, now
  supports reading its configuration settings from HKLM in the Windows
  registry.

- Added ability to get information from endpoints such as host and
  port without having to parse the stringified endpoint.

- Added ability to get addressing information from a connection.

- The IceSSL::ConnectionInfo type is now generated from a local Slice
  definition. You can downcast this type to NativeConnectionInfo if
  you require access to native certificates.

- Slice files are now allowed to be in UTF-8 format and include UTF-8
  BOM at start of file and include UTF-8 characters in comments.

- Fixed bug in Slice compilers that would cause a crash if a Slice
  file had double slashes in its path.

- The following properties were deprecated in Ice 3.2 and have been
  removed:

  Glacier2.AddUserToAllowCategories
  Glacier2.AllowCategories
  Ice.UseEventLog

- The following APIs were deprecated in Ice 3.2 and have been removed:

  Communicator::setDefaultContext
  Communicator::getDefaultContext
  ObjectPrx:ice_defaultContext

- Support for the deprecated Slice keyword 'nonmutating' has been
  removed. As a result the following property has also been removed:

  Freeze.UseNonmutating

- HP-UX is no longer a supported platform for Ice.

- Added extra network tracing to show the list of local interfaces
  currently available when an endpoint is using a wildcard host, as
  well as the published endpoints for an object adapter. Both of these
  traces will be shown when Ice.Trace.Network >= 1.

- Added new property, Ice.Trace.ThreadPool, that when set >= 1 enables
  tracing of thread pool creation as dynamic thread pools grow and
  shrink.

- Changed the format of the default logger output. Traces are now
  prepended by '--', warnings by '-!' and errors by '!!'.

- The value of the thread pool SizeWarn property is now 0 by default
  rather than 80% of Size. This means that by default warnings about
  thread pool growth will now be disabled.

- Added example demo/Ice/plugin to show how to write a simple Ice
  plug-in as well as a Logger plug-in.

- Added getPlugins method to PluginManager which returns a list of the
  names of all installed plug-ins.

- The reason member of MemoryLimitException now contains the size of
  the request that caused the exception as well as the value of the
  maximum message size.

- The Ice::Application helper classes now use the process logger to
  emit errors rather than just writing directly to stderr.

- A Slice class that implements an interface but does not define or
  inherit any operations is now mapped to a concrete class. This
  change affects the Java, C#, Python, and Ruby language mappings.

- It is now possible to use an UNC path as an include directive for
  the Slice compilers.

- Fixed a bug in slice2html that caused incorrect hyperlinks to be
  generated for the summary of the index sections of a module page.

- Added a new property, Ice.LogFile, which causes the default Ice
  logger to write to a file rather than stderr. The file name is the
  property's value.

- Added the following operations to the ObjectAdapter API:

   - addDefaultServant
   - removeDefaultServant
   - findDefaultServant

  These methods provide a simpler way of using default servants in
  Ice. Please refer to the manual for more information.

- Using the --depend option with Slice compilers that support it no
  longer outputs dependency info even if the Slice file itself
  contains errors.


C++ Changes
===========

- Added a new demo named "interleaved" that shows how to use
  asynchronous invocation and dispatch to achieve maximum throughput
  with Ice.

- Fixed a bug that prevented an application from using Unicode path
  names for Freeze databases on Windows.

- Enhanced the portable streaming API to provide better support for
  template programming.

- The C++ class generated for a derived Slice class no longer uses
  virtual inheritance by default. The metadata "cpp:virtual" can be
  defined for a Slice class to force the translator to use virtual
  inheritance when necessary.

- The following functions have new overloaded versions on Windows that
  accept a Unicode argument vector:

  Ice::Application::main
  Ice::Service::main
  Ice::argsToStringSeq

- Added support for specifying the priority of threads in a thread
  pool. See the Ice manual for more information.

- Added new demo book/map_filesystem.

- IceUtil:: Shared now uses the native atomic functions provided by gcc
  4.1 and later on supported platforms. For details see
  http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html

- Fixed a bug in slice2cpp that could cause incorrect includes to be
  generated if a Slice file was included that was a symbolic link.

- On Windows it is now possible to build the Ice DLLs with unique names
  for each supported compiler. See UNIQUE_DLL_NAMES setting in
  cpp/config/Make.rules.mak.

- The Ice DLLs no longer all use the default base load address.

- Changed the signature of the Ice::Service start method.

- Added new static methods to initialize an IceUtil::Time class from
  a double:

  IceUtil::Time::secondsDouble(double)
  IceUtil::Time::milliSecondsDouble(double)
  IceUtil::Time::microSecondsDouble(double)

- Added the ability to use alternative database storage for IceStorm
  and IceGrid other than Freeze. The following SQL databases are
  supported: SQLite and PostgreSQL. Please see the manual for more
  information.

- Fixed a bug where globally-scoped garbage collected class pointers
  could cause a crash on application termination.

- Fixed a bug where an SSL connection was rejected because of a
  certificate validation failure even if IceSSL.VerifyPeer=0.

- Added ice_stackTrace() method to Exception classes, which returns
  the exception stack trace on platforms/compilers that support it.
  Currently this is only supported with the GCC compiler.

- Added new property, Ice.PrintStackTraces, which controls whether the
  Ice logger utility classes (Ice::Trace, Ice::Warning, etc) print the
  stack trace for Ice exceptions. By default it is enabled for debug
  builds and disabled for release builds.

- Removed AMD_Array_Object_ice_invoke class and instead added an
  ice_response method to AMD_Object_ice_invoke that uses the array
  type.

- The system logger (enabled when Ice.UseSyslog is set) now uses the
  value of Ice.ProgramName as the log identifier prefix.

- Fixed crash if Application::main() or Service::main() were called
  with argc == 0.


Java Changes
============

- The Freeze map API now uses Java5 generic type conventions.

- Ice now tests for the presence of the Bzip2 classes only if an
  application attempts to use compression.

- Added new demo book/map_filesystem.

- Changed IceSSL to use the keystore as the truststore if no
  truststore is explicitly defined.

- Added new ice_dispatch method to Object that does not take a
  DispatchInterceptorAsyncCallback parameter to be used for
  synchronous dispatch only.

- Added support for using direct buffers in the transport layer to
  minimize copying. The semantics of the Ice.CacheMessageBuffers
  property have been extended as follows:

  0 = no buffer caching
  1 = buffer caching using non-direct buffers
  2 = buffer caching using direct buffers

  If this property is not defined, the new default value is 2.

- The Ice run time now re-throws exceptions using fillInStackTrace to
  ensure the exception stack trace includes the calling point.

- Added the "classLoader" member to Ice.InitializationData, which
  allows you to supply a custom class loader that Ice uses to load
  plug-ins, user exceptions, concrete Slice classes, etc.

- Fixed a bug in the implementation of ice_invoke_async.

- The Freeze classes are now stored in a separate JAR file named
  Freeze.jar.

- The translator no longer generates one-shot constructors for class,
  struct and exception types if doing so would exceed Java's limit of
  255 parameters for a method.

- Fixed a bug where an outgoing SSL connection was allowed even though
  certificate validation failed.

- A holder class generated for a Slice class or interface now extends
  the generic base class Ice.ObjectHolderBase and implements the
  streaming interface Ice.ReadObjectCallback.

- slice2java no longer generates a <name>OperationsNC interface for
  local interfaces and classes. This makes the code easier to browse
  with IDEs.

- slice2java now preserves javadoc comments that appear in the Slice
  source and writes them through to the corresponding APIs in the
  generated code.

- Ice.jar and Freeze.jar now include source files. This allows IDEs
  such as Eclipse to browse the Ice source code and to display javadoc
  comments.

- Fixed a bug that caused UnmarshalOutOfBoundsException during an
  attempt to unmarshal an exception or class if Ice.jar is installed
  in the JVM's extension directory.

- The following APIs are deprecated and will be removed in a future
  release.

  Ice.Object.ice_hash()
  Ice.ObjectPrx.ice_getHash()
  Ice.ObjectPrx.ice_toString()

- The StackSize thread pool configuration property is now used.

- The generated classes for Slice structs are no longer declared final.

- Ice.Util.generateUUID has been deprecated. Use
  java.util.UUID.randomUUID().toString() instead.

- Ice now supports the ability to load a configuration file as a class
  path resource. For a path name specified in the ICE_CONFIG
  environment variable, in the --Ice.Config command-line option, or
  passed to Properties::load(), Ice first attempts to open the file as
  a class path resource and, if that fails, tries to open it as a file
  in the local file system. See the manual for more information.

- Removed the Java2 mapping. The release notes contain instructions
  for migrating an application to the Java5 mapping.

- Changed the Slice compiler to emit @SuppressWarning annotations only
  when necessary.

- Fixed a discrepancy between the documented behavior of the property
  IceSSL.CheckCertName and its actual behavior. The documented
  behavior states that IceSSL compares the host name as it appears in
  the proxy's endpoint against the server certificate's alternative
  subject names. The actual behavior in Ice 3.3 differed slightly in
  that the host name may have undergone a translation that could
  result in IceSSL using a different host name than that of the proxy.
  For example, the proxy may have contained "127.0.0.1" but IceSSL
  used "localhost". This could cause the SSL connection attempt to
  fail if IceSSL.CheckCertName is enabled. IceSSL now uses the host
  name from the proxy for this validation step.


C# Changes
==========

- The Ice DLLs no longer all use the default base load address.

- Both Ice Plugin and IceBox Service configuration now allow you to
  enter a full path as the assembly DLL name.

- Added new ice_dispatch method to Object that does not take a
  DispatchInterceptorAsyncCallback parameter to be used for
  synchronous dispatch only.

- IceSSL's behavior with respect to the IceSSL.CheckCertName property
  is now consistent with that of C++ and Java. Specifically, IceSSL
  compares the host name or IP address in a proxy endpoint (if any)
  against the common name and subject alternative names of the
  server's certificate. In prior releases, IceSSL relied on .NET to
  perform the validation of the common name but no comparison was made
  with the subject alternative names.

- Fixed bug where random endpoint selection would only work for
  proxies with more than two endpoints.

- Fixed thread safety issue in random endpoint selection.

- slice2cs no longer generates a <name>OperationsNC interface for
  local interfaces and classes. This makes the code easier to browse
  with IDEs.

- slice2cs now converts javadoc comments in Slice files into Visual C#
  XML documentation comments. This allows you to generate
  an <assembly>.xml file from the documentation comments by passing
  the /doc option to Visual C#. The comments in the <assembly>.xml
  file are shown as Visual C# tooltips if the <assembly>.xml file is
  installed in the same directory as the <assembly>.dll file.

  The build for Ice now generates the <assembly>.xml file for each
  assembly and installs it, so Visual C# displays tooltips for Ice
  APIs.

- The generated types for Slice classes, interfaces, structs and
  exceptions are now declared as partial.

- The following APIs are deprecated and will be removed in a future
  release.

  Ice.Object.ice_hash()
  Ice.ObjectPrx.ice_getHash()
  Ice.ObjectPrx.ice_toString()

- The StackSize thread pool configuration property is now used.

- The default Ice logger now uses System.Diagnostics.Trace to
  output messages. Please see manual and Trace documentation for
  more information.

- Ice.Util.generateUUID has been deprecated. Use
  System.Guid.NewGuid.ToString() instead.


Python Changes
==============

- The extension now restores the pre-existing dlopen flags.

- The __cmp__ method generated for slice structures and enumerations
  has been replaced by the rich operators __lt__, __le__, __eq__,
  __ne__, __gt__, __ge__.

- Slice comments are now converted into Python docstrings in the
  generated code.

- Added the administrative facet API.

- Integer values are now accepted where floating point values are
  expected.

- Objects that support the number protocol are now accepted as legal
  values for Slice integer and floating-point types.

- 64-bit integers are now supported in buffer types.


Ruby Changes
============

- The following API as been deprecated and will be removed in a
  future release.

  Ice::ObjectPrx::ice_getHash()


PHP Changes
===========

- Enumerations are now supported as dictionary key types.

- Integer values are now accepted where floating point values are
  expected.

- Added slice2php and removed dynamic Slice translation.

- Added support for PHP namespaces (requires PHP 5.3 or later).

- Added ability to create and destroy communicators. Use the function
  Ice_initialize (\Ice\initialize) to create a communicator. By
  default, all communicators created during a page request are
  destroyed automatically at the end of the request.

- Added ability to register a communicator for use in a subsequent
  page request. Three new functions are provided:

  * Ice_register   (\Ice\register)
  * Ice_unregister (\Ice\unregister)
  * Ice_find       (\Ice\find)

- Added a demo (in Glacier2/hello) that shows how to register and
  use the same communicator instance for multiple page requests in a
  PHP session.

- Added support for all Slice local exceptions.

- The INI settings are now used to configure property sets that a
  script can use to initialize a communicator. The ice.slice directive
  is no longer supported.

- Added the function Ice_createProperties().

- Now generating minimal proxy classes to simplify downcasting.

- Removed the "$ICE" global variable.

- Removed the following methods:

  $ICE->setProperty()
  $ICE->getProperty()

- Removed the following functions:

  Ice_stringToIdentity()
  Ice_identityToString()
  Ice_loadProfile()
  Ice_loadProfileWithArgs()
  Ice_dumpProfile()


Visual Studio Plugin Changes
============================

- Added support for Visual Basic projects. For Visual Basic projects
  the plug-in only takes care of managing Ice references and not slice
  compilation.

- It is now possible to install the plug-in when "My Documents" is
  linked to a network drive.

- The plug-in will no longer modify projects for which it is not
  enabled.

- The plug-in will now compile slice files for C++ projects even if
  the project does not have "C++ Options".


======================================================================
Changes since version 3.3.0
======================================================================


General Changes
===============

These entries apply to all relevant language mappings unless otherwise
noted.

- Fixed a bug where ice_getCachedConnection could throw if called
  shortly after connection establishment failed.

- Fixed an IceGrid bug where an application update could trigger the
  deactivation of all session-activated servers even if these servers
  were not updated.

- The frequency at which Ice checks for connections that can be reaped
  by active connection management (ACM) is now set by default to 10%
  of the smallest, non-zero ACM setting (Ice.ACM.Client and
  Ice.ACM.Server), with a minimum value of 5 seconds and a maximum
  value of 5 minutes. This default can be overridden by setting
  Ice.MonitorConnections, which is no longer deprecated, and whose
  value is the check frequency in seconds.

- Fixed a bug in IceBox where services using the shared communicator
  would be passed the wrong communicator if re-started with the IceBox
  service manager interface.

- Improved Glacier2 to automatically destroy the client session if the
  forwarding of a request from a back-end server to the client fails
  with an unrecoverable error. This is particularly useful for clients
  that receive requests from back-end servers on a regular basis and
  disable the Glacier2 session timeout. If for some reason the client
  becomes unreachable, Glacier2 will eventually destroy the client
  session (assuming timeouts are properly configured on the Glacier2
  client endpoints).

- Added support for updating locator cache endpoints in the background
  if the new Ice.BackgroundLocatorCacheUpdates property is set to 1.

  Locator cache updates are triggered if the proxy locator cache
  timeout is configured and the cached endpoints are older than the
  configured timeout.

  By default, locator cache updates are performed before making an
  invocation, delaying the invocation until the new endpoints are
  retrieved from the locator. With this feature enabled, the locator
  cache updates are performed in the background and the invocation
  that triggered the update uses the previously cached endpoints.

- Optimized the Ice client run time to minimize locator requests when
  multiple concurrent or AMI requests need to resolve the endpoints of
  the same well-known object, object adapter, or replica group.

- Fixed a bug in IceGrid that would cause it to generate incorrect
  configuration files for servers whose ice-version was set to a
  version previous to Ice 3.3.0.

- Fixed a bug in the Slice translators that prevented them from being
  run from a directory without write permissions, even if no output
  files were being written to the directory.

- Fixed a bug where retried AMI calls could cause the timer thread to
  print an error message if the retry failed and if Ice.RetryIntervals
  was configured with non-zero time intervals.

- All error output from the Slice compilers now goes to stderr.

- Made unmarshaling code robust against messages containing invalid
  indexes for class instances.

- Fixed IcePatch2 to handle non-ASCII file names properly.

- Fixed a bug in IceGrid that could cause the registry to fail with an
  assertion if an application is synchronized concurrently by multiple
  administrative clients (or by nodes started with the --deploy
  option).

- IceGrid locator implementation changes:

  * Fixed a bug where the registry could crash when resolving the
    endpoints of a replica group if some servers were activating
    concurrently.

  * Fixed a bug where the registry could hang when resolving the
    endpoints of a round-robin replica group if a member of the
    replica group was removed concurrently.

  * Improved the scalability of the locator implementation to better
    handle a high volume of concurrent requests. The registry now
    limits the number of invocations to the IceGrid nodes to get the
    object adapter endpoints.

- A Slice compiler now removes any files it has generated during the
  current execution if it fails or is interrupted.

- The Slice compilers that support the --depend option now use an exit
  status of 1 if a failure occurs while generating dependencies. In
  previous releases the compilers used an exit status of 0.

- Fixed a bug in the iceca script that prevented the command "init
  --overwrite" from working properly on Windows.

- Fixed a bug where the IceBox shared communicator ignored Ice
  communicator properties specified in an IceBox service configuration
  file.

- Fixed a bug where Ice plug-ins could be destroyed more than once.

- Fixed several issues in the IceGrid GUI.


C++ Changes
===========

- Fixed a bug in IceSSL plug-in which could cause a crash on
  communicator destruction.

- Changed the thread pool to ensure that references to AMI callback
  objects are released as soon as possible.

- Fixed bug in slice2cpp that caused bad code to be generated for
  classes and modules whose name was a C++ keyword.

- Fixed a bug in IceSSL where the IceSSL.CheckCertName property did
  not have any effect.

- Fixed icegridadmin `service list' command crash.

- Fixed a bug where slice2cpp and slice2freeze would generate absolute
  include paths if the command line option "-I." was used.

- Fixed a Freeze transactional evictor bug that could cause the
  transaction of an asynchronous method dispatch to be rolled back if
  rollback on user exception was enabled.

- Fixed a bug that could cause the first invocation on a proxy to
  incorrectly be sent compressed or not compressed.

- Fixed a bug on Windows that could cause an interrupted application
  to spin for a while before terminating.


Java Changes
============

- Slice types now implement java.io.Serializable.

- If a servant raises OutOfMemoryError while dispatching an operation,
  the Ice run time now traps it and treats it as a hard error, meaning
  Ice logs an error message and closes the connection on which the
  request was received.

- Added object serialization that allows native Java objects to be
  sent as operation parameters. See the Slice chapter and the Java
  language mapping chapter in the manual for more information.

- Fixed bug in slice2java that caused bad code to be generated for a
  class whose name was a Java keyword if the class contained data
  members.

- The path names specified by the IceSSL.Keystore, IceSSL.Truststore,
  and IceSSL.Random properties can now refer to class path resources.

- Added methods to the IceSSL plug-in to allow keystores, truststores,
  and RNG seeds to be specified using input streams.

- Fixed the IceSSL.ConnectionInfo type so that the "incoming" and
  "adapterName" members are public.

- Added support for using Ice in an applet, along with a new demo.


C# Changes
==========

- Added object serialization that allows native C# objects to be sent
  as operation parameters. See the Slice chapter and the C# language
  mapping chapter in the manual for more information.

- Changed the Ice run time to no longer rely on .NET worker threads
  to start asynchronous I/O operations.

- Fixed a bug in slice2cs that caused a core dump if a dictionary had
  a value type of Object.

- Fixed a bug in slice2cs that caused incorrect code to be generated
  if an operation had a parameter named "ex".

- Fixed a bug in slice2cs that caused incorrect code to be generated
  if a Slice class used the property mapping and also applied
  a ["cs:attribute:..."] metadata directive to a data member.

- Fixed an issue that could cause an application to fail to start if
  Ice was unable to load an assembly that was referenced (but not
  required) by the program and not present on the system.

- Fixed a bug in marshaling code that caused a trailing zero byte
  to be marshaled for user exceptions without class data members.

- Fixed a bug in slice2cs that caused incorrect code to be generated
  for a dictionary that used a structure as the key type.

- Fixed a bug in slice2cs that caused incorrect code to be generated
  for a sequence whose element type is a structure that uses the
  class mapping.


Python Changes
==============

- Implemented the Ice.Trace.Slicing property for user exceptions.

- It is now possible to pass a sequence of 64-bit integer values
  using an object that supports the buffer protocol.

- Fixed a bug in the constructors of user-defined types that have
  structures as data members. Consider this example:

  // Slice
  struct Point {
      int x;
      int y;
  };
  struct Event {
      Point location;
      ...
  };

  The Event constructor supplied a default instance of the Point
  member if the caller did not supply one. However, this default
  instance was unintentionally shared by all Event objects that
  omitted a value for the Point member during construction. The
  generated code now ensures that each instance of Event assigns a
  new instance of Point.

- Fixed bugs in getImplicitContext related to using it when an
  implicit context had not been set.

- Fixed bugs in stringToProxy and propertyToProxy related to null
  proxies.

- Ice.getSliceDir() now only searches for the "slice" directory in a
  standard Ice installation.

- Improved the way the build system locates the Python framework on
  Mac OS X.


Ruby Changes
============

- The translator now generates an eql? method for Slice structures.

- Implemented the Ice.Trace.Slicing property for user exceptions.

- Added helper Ice.getSliceDir, which locates the "slice" directory in
  a standard Ice installation.


PHP Changes
===========

- It is now possible to specify multiple Slice files in your profile
  configuration that have common include files. For example, if A.ice
  and B.ice both include Common.ice, you can now do the following:

  ice.slice=-I. A.ice B.ice

  In previous releases this would have caused a redefinition error,
  which you could work around by creating a single Slice file that
  included both A.ice and B.ice. This workaround is no longer
  necessary.

- Fixed bugs in the ice_router and ice_locator proxy methods.


======================================================================
Changes since version 3.2.1
======================================================================


General Changes
===============

These entries apply to all relevant language mappings unless otherwise
noted.

- It is now possible to use UNC paths on Windows in the configuration
  of Ice services, such as in the value of the IceGrid.Node.Data
  property for an IceGrid node.

- Fixed bug in slice2html that caused incorrect hyperlinks to be
  generated if nested modules were used.

- Added support for non-blocking AMI and batch requests. Activities
  such as DNS lookups, endpoint resolution, connection establishment,
  and sending the request are now performed in the background if
  necessary.

- AMI requests now return a boolean to indicate if the request is
  sent synchronously. If not sent synchronously and the AMI callback
  implements the Ice::AMISentCallback interface, the Ice run time
  calls the ice_sent() method once the request is sent.

- AMI timeouts are no longer triggered by the connection monitor
  thread at regular time intervals. Instead, timeouts are now
  triggered on time just like synchronous invocations. As a result,
  the setting of the Ice.MonitorConnections is no longer useful and
  this property has been deprecated.

- Added the proxy methods ice_flushBatchRequests() and
  ice_flushBatchRequests_async() to flush the batch requests of the
  connection associated with the proxy. Like AMI requests, the
  ice_flushBatchRequests_async() method is guaranteed to not block.

- Added support for oneway AMI requests. The ice_response() method of
  the AMI callback is never called for oneway requests sent with AMI.
  Unlike regular oneway requests which might block until the request
  is passed to the TCP/IP stack, oneway AMI requests can't block.

- Removed the thread-per-connection (TPC) concurrency model.
  Applications that were using TPC for its ordering guarantees can use
  the new thread pool serialization feature.

- The Ice thread pool now supports a new serialization mode that
  serializes the processing of messages received over a connection.
  For example, this is useful when you want to ensure the orderly
  dispatching of oneway requests from a client even if the thread pool
  has multiple threads. Serialization is enabled by setting the thread
  pool's Serialize property to 1.

- An Ice server will now abort() if there are no more file descriptors
  available to accept incoming connections. Note that this behavior is
  subject to change in the final release.

- An IceGrid node is more conservative when removing the directory of
  a server. The node only removes the directory when the server is
  explicitly removed from a deployed application or if the directory
  contains only files and directories that were created by the node.

- IceGrid's round-robin load balancing policy better handles servers
  that are unreachable.

- Fixed an IceGrid bug where patching servers deployed with the
  attribute `application-distrib' set to false wouldn't work.

- Added an object adapter to the IceGrid registry. The adapter is
  named `IceGrid.Registry.AdminSessionManager' and is responsible for
  Glacier2 administrative sessions.

- When resolving the endpoints of a replica group, the IceGrid locator
  no longer waits for an object adapter to complete its activation if
  another adapter is already active.

- Fixed an IceGrid descriptor bug where re-opening an unnamed property
  set would cause multiple property definitions.

- Added a fix to prevent the IceGrid node from printing an annoying
  thread pool size warning on startup.

- Fixed IceGrid bug where updates to IceBox services were not
  correctly sent to the IceGrid GUI or to IceGrid registry slaves.

- The IceGrid node now unblocks the SIGHUP, SIGINT and SIGTERM signals
  from forked servers.

- The IceGrid node now prints a warning if it can't reach the IceGrid
  registry when it starts. This warning can be disabled with --nowarn.

- An IceBox service can now recursively start and stop other IceBox
  services from within its start and stop methods. The level of
  recursion is limited to the threads in the administrative object
  adapter's thread pool.

- Configuration properties for IceBox services can now be defined on
  the command line.

- IceBox services that share a communicator now use a dedicated
  communicator instance that is not used by the IceBox server. This
  dedicated communicator only inherits properties from the server's
  communicator if IceBox.InheritProperties is set to a non-zero value.

- It is no longer necessary to define a value for the property
  IceBox.ServiceManager.Endpoints. If this property is not defined,
  the ServiceManager interface is not available.

- Changes related to Highly-Available IceStorm

  - IceStorm now supports master/slave replication with automatic
    failover.

  - IceStorm also supports a transient mode that uses no databases.
    This mode is enabled using the new property <service>.Transient.
    Replication is not supported in this mode.

  - Subscriptions are now persistent (except in transient mode).

  - Added a new Quality of Service (QoS) parameter, retryCount, to
    control when subscribers are removed. IceStorm automatically
    removes a subscriber after the specified number of unsuccessful
    event deliveries. The default value of retryCount is 0, meaning
    the subscriber is removed immediately upon any failure. A
    subscriber is always removed on a hard failure, which is defined
    as the occurrence of ObjectNotExistException or
    NotRegisteredException.

  - The IceStorm database format has changed. Use the utility
    icestormmigrate to migrate from the database formats of Ice 3.1.1
    and Ice 3.2.1. The old migration script (updateicestorm.py) has
    been removed.

  - Added the new C++ example demo/IceStorm/replication2, which
    demonstrates how to manually configure IceStorm replication.

  - Added the "replica" command to icestormadmin to get debugging
    information on IceStorm replication.

  - The TopicManager object adapter now uses its own thread pool in
    the replicated case to ensure that ordering is guaranteed by
    default even if a publisher uses a oneway proxy.

  - Upon shutdown IceStorm now guarantees that all received events
    are delivered to all subscribers.

  - Added Topic::getNonReplicatedPublisher, which always return a
    non-replicated publisher proxy.

  - All IceStorm properties must be prefixed with the service name.
    For example, consider the following IceBox service configuration:

    IceBox.Service.Foo=IceStormService,33:createIceStorm ...

    In this case the IceStorm configuration properties must use the
    "Foo" prefix, such as

    Foo.Discard.Interval=10

  - Removed the icestormadmin Slice checksum check. This avoids
    warnings when using icestormadmin against an older version of
    IceStorm.

- It is now possible to specify properties in a config file with
  space, '#' or '=' in either the key or value string. It is necessary
  to escape '#' and '=' as '\#' and '\='. Leading or trailing spaces
  are only allowed in keys and need to be escaped as '\ '.

- Properties set programmatically can no longer have leading or
  trailing whitespace in the key.

- There is no longer a limit on the allowable length of a property
  line in an Ice config file. Previously the limit was 1024.

- The new property Ice.Warn.UnusedProperties causes the communicator
  to display a warning during its destruction that lists all
  properties that were set but whose values were never read.

- The way that the Ice run time determines whether a proxy invocation
  is eligible for collocation optimization has changed somewhat. The
  Ice run time no longer performs a DNS lookup; instead, invocations
  on a direct proxy will use the optimization only if the host and
  port of one of its endpoints match the host and port of an endpoint
  or published endpoint of an object adapter from the same
  communicator.

- Exceptions thrown from collocation-optimized invocations are now
  fully transparent. If an operation throws an exception that is not
  in the operation's exception specification, or throws a non-Ice
  exception, the client receives UnknownUserException or
  UnknownException, exactly as if the servant for a remote invocation
  had thrown the same exception. (In earlier versions, the client
  received the original exception, rather than an unknown exception.)

  For Ice run-time exceptions, all run-time exceptions are passed
  to the client as UnknownLocalException, except for

  - ObjectNotExistException
  - FacetNotExistException
  - OperationNotExistException
  - OperationNotExistException
  - UnknownException
  - UnknownLocalException
  - UnknownUserException
  - CollocationOptimizationException

- The property Ice.Default.CollocationOptimization and the proxy
  property <proxy>.CollocationOptimization have been deprecated and
  replaced by Ice.Default.CollocationOptimized and
  <proxy>.CollocationOptimized, respectively.

- Most proxy factory methods now return a proxy of the same type as
  the original and no longer require the use of a checked or unchecked
  cast. For example, in C++ you can write

  HelloPrx hello = ...;
  hello = hello->ice_oneway();

  Previously you would have needed a cast, such as

  hello = HelloPrx::uncheckedCast(hello->ice_oneway());

  In Java and .NET, you must use a type cast:

  hello = (HelloPrx)hello.ice_oneway();

- If a proxy contains a host that is multihomed, the client will now
  try all the available IP addresses. Previously, only the first in
  the address list returned by the DNS was used and others were
  ignored.

- It's now possible to change the compression setting for a fixed
  proxy. In previous releases, calling ice_compress on a fixed proxy
  would raise Ice::FixedProxyException.

- Added a new skipEncapsulation method to the Ice::InputStream
  interface. This method can be used to skip an encapsulation when
  reading from a stream.

- The endEncapsulation method from the Ice::InputStream interface will
  now throw Ice::EncapsulationException if not all the data from the
  encapsulation has been read.

- The marshaling code now throws an exception if an enumerator that is
  out of range for its enumeration is sent or received.

- Network tracing now also includes failures to connect if
  the Ice.Trace.Network property is set to 2.

- The property Ice.Trace.Location has been deprecated and replaced
  by Ice.Trace.Locator.

- The Ice locator tracing (enabled with the `Ice.Trace.Locator'
  property) now traces calls to locator registry when an object
  adapter updates its endpoints or the server process proxy is
  registered.

- The new property Ice.TCP.Backlog allows you to specify the size of
  incoming connection backlog for TCP/IP sockets. This setting is
  also used for SSL. In C++ the default value is SOMAXCONN or 511 if
  that macro is not defined. In Java and .NET the default value is
  511.

- Added support for IPv6. It is disabled by default but can be enabled
  using the configuration property Ice.IPv6. The property Ice.IPv4 can
  be used to disable IPv4 support.

- Added support for UDP multicast.

- A new object adapter property, <adapter>.ProxyOptions, lets you
  customize the proxies that the adapter creates.

- Added a new operation to the ObjectAdapter interface named
  refreshPublishedEndpoints(). This operation allows you to update an
  adapter's published endpoints after a change in the available local
  interfaces or after a change to the PublishedEndpoints property.

- The "-h *" endpoint option is now only valid for object adapter
  endpoints. It can no longer be used in proxy endpoints or object
  adapter published endpoints.

- Ice now listens on INADDR_ANY for object adapter endpoints that do
  not contain a host name (or are set to use "-h *" or "-h 0.0.0.0").
  Previously, Ice would only listen on the local interfaces that were
  present when the adapter was created.

- Accepting incoming connections can no longer block a thread from a
  server thread pool. This includes activities such as connection
  validation and SSL handshaking.

- Changed servant locators so both locate() and finished() can throw
  user exceptions.

- Improved Glacier2 to take advantage of the new non-blocking aspects
  of Ice. Glacier2 now uses the thread pool concurrency model and, in
  buffered mode, Glacier2 only uses a single thread to forward queued
  requests. As a result, Glacier2 now requires a fixed number of
  threads regardless of the number of connected clients.

- Glacier2 filters are now disabled by default for IceGrid client
  and administrative sessions created with the IceGrid session
  managers. If you rely on these filters being enabled, you must now
  explicitly set the property IceGrid.Registry.SessionFilters or
  IceGrid.Registry.AdminSessionFilters.

- The use of sequences (and structs containing sequences) as valid
  dictionary keys has been deprecated and will be removed in a future
  release.

- slice2vb has been removed from the distribution and is no longer
  supported. To use Visual Basic .NET with Ice, use slice2cs to
  generate C# code from Slice definitions, and then use a C# compiler
  to create a DLL from the generated code. Then link against that DLL
  in your Visual Basic project.

- Fixed a variety of bugs with slice2cpp where incorrect code
  would be generated when C++ reserved words are used as Slice
  identifiers.

- If a class, interface, or exception has a base, slice2html now
  generates a hyperlink to the base. (Previously, only the name of the
  base was shown, without a hyperlink.)

- slice2html now generates documentation for Slice constant
  definitions.

- slice2html now generates the scoped name for the <h1> element of
  each page instead of the unqualified name. For example, it now shows
  "Ice::DNSException" instead of "DNSException".

- The ability to install a logger via the Ice.LoggerPlugin property
  has been removed. The new mechanism requires that you create an
  instance of the Ice::LoggerPlugin class in your plug-in factory.
  Please see the manual for more details.

- It is no longer possible to provide input files on the command line
  for icestormadmin or icegridadmin.

- Freeze evictor update:

  - the existing evictor was renamed BackgroundSaveEvictor
  - added new TransactionalEvictor

- Fixed a bug in FreezeScript that caused a failure when a script
  attempted to access the 'length' member of a string value.

- Added support for string concatenation in FreezeScript using the
  '+' operator.

- dumpdb output now goes to stdout.


C++ Changes
===========

- Fixed icepatch2server crash on exit bug.

- Fixed race condition in IceUtil::Cache.

- Changed the string methods in InputStream and OutputStream to accept
  an optional boolean argument. If true (the default), strings are
  processed by the string converter (if any) before marshaling or
  unmarshaling. If false, the string converter is bypassed. No source
  code changes are necessary for existing programs.

- The new Ice::StringConverterPlugin class allows you to install a
  custom string converter and/or wstring converter during communicator
  initialization.

- The Ice shared library now provides a string converter plug-in
  factory: createStringConverter. See the Ice manual for details.

- IceUtil::stringToWstring and IceUtil::wstringToString now take
  a second argument of type ConversionFlags. It can be either
  strictConversion or lenientConversion. The default is
  lenientConversion for compatibility with previous releases. See
  the Ice manual for further details.

- Added IceGrid secure demo to demonstrate how to setup a secure
  IceGrid deployment.

- Fixed a Glacier2 assert that would occur if the configuration
  defined only the SSL permissions verifier.

- The IceUtil::Timer destroy method no longer joins with the timer
  execution thread if it's called from a timer task. Instead, the
  thread is detached.

- The IceUtil::Timer schedule and scheduleRepeated methods now throw
  IceUtil::IllegalArgumentException if the timer is destroyed.

- Fixed potential Slice parser assert.

- Added an HA IceStorm template to config/templates.xml.

- Removed the index parameter from the IceStorm template.

- It is now possible to manually configure the node proxies when
  using HA IceStorm in conjunction with IceGrid.

- iceca and associated ImportKey.class are now copied into bin and lib
  respectively.

- iceca did not correctly support the --verbose flag with the import
  command.

- iceca request has been simplified. The command now takes the name of
  the file to generate, the common name, and an optional email
  address.

- The iceca ImportKey.class utility is now installed in
  /usr/share/Ice-3.3.0 for an RPM install or ${prefix}/lib otherwise.

- The following APIs were deprecated in Ice 3.1 and have been removed:

  Application::main(int, char*[], const char*, const Ice::LoggerPtr&)
  initializeWithLogger
  initializeWithProperties
  initializeWithPropertiesAndLogger
  stringToIdentity
  identityToString
  ObjectPrx::ice_hash
  ObjectPrx::ice_communicator
  ObjectPrx::ice_newIdentity
  ObjectPrx::ice_newContext
  ObjectPrx::ice_newFacet
  ObjectPrx::ice_newAdapterId
  ObjectPrx::ice_newEndpoints
  ObjectPrx::ice_collocationOptimization
  ObjectPrx::ice_connection

- Added "public" keyword to the definition of IceSSL::PublicKey.

- Fixed a bug in slice2freeze in which it was not properly handling
  the "cpp:type:wstring" metadata, which would result in narrow
  strings being used in generated code when wstring should have been
  used instead.

- IceInternal::GCShared now derives from IceUtil::Shared. This now
  makes it possible to have a servant class derived from
  IceUtil::Thread (which, previously, was impossible).

- The thread stack size specified with the IceUtil::Thread::start()
  method parameter is now adjusted to PTHREAD_STACK_MIN if it's
  inferior to it. On Mac OS X, it's also adjusted to the next closest
  multiple of the page size (4KB).

- Added a new overloading of the Ice::createInputStream method:

  Ice::InputStreamPtr createInputStream(
      const CommunicatorPtr&,
      const pair< const Byte*, const Byte*>&);

- Fixed a bug in the encoding of user exceptions with a class
  attribute and returned by AMD-dispatched invocations. An extra byte
  was encoded at the end. This fix doesn't affect on the wire
  compatibility with old Ice clients.

- Added what() member to IceUtil::Exception, so a single catch handler
  can be used for Ice exceptions:

  try
  {
      // Call something that may throw an Ice exception
  }
  catch(const ::std::exception& ex)
  {
      cerr << ex.what() << endl; // Works for any ::std::exception,
                                 // including Ice exceptions
  }

  what() is implemented in terms of ice_print(), so overriding
  ice_print() also changes the string returned by what().


Java Changes
============

- Fixed the slice2java ant task to redirect stderr output so that
  messages from the preprocessor are not interpreted as dependencies.

- Fixed the slice2java ant task to recompile all of the files in the
  file list if at least one of the files has changed and checksums are
  being generated.

- Deprecated the class IceUtil.Version.

- Added the methods stringVersion and intVersion to Ice.Util for
  obtaining the Ice version.

- Fixed a NullPointerException thrown when allocating an InputStream
  with an empty buffer.

- Fixed a NullPointerException thrown when calling startEncapsulation
  on an OutputStream.

- The following APIs were deprecated in Ice 3.1 and have been removed:

  Application.main(String, String[], String, Logger)
  Util.initializeWithLogger
  Util.initializeWithProperties
  Util.initializeWithPropertiesAndLogger
  ObjectPrx.ice_hash
  ObjectPrx.ice_communicator
  ObjectPrx.ice_newIdentity
  ObjectPrx.ice_newContext
  ObjectPrx.ice_newFacet
  ObjectPrx.ice_newAdapterId
  ObjectPrx.ice_newEndpoints
  ObjectPrx.ice_collocationOptimization
  ObjectPrx.ice_connection

- Ice for Java now supports the ICE_CONFIG environment variable.

- The Java2 language mapping is now deprecated.

- Added support for a password callback in IceSSL. Also added new
  properties for specifying the name of a password callback class or
  certificate verifier class.

- LocalObject is now mapped to java.lang.Object; an out LocalObject
  parameter is still mapped to an Ice.LocalObjectHolder object.
  Ice.LocalObjectHolder now holds a java.lang.Object. The interface
  Ice.LocalObject and the abstract class Ice.LocalObjectImpl are now
  deprecated.

- Ice.LocalException and Ice.UserException now implement
  java.lang.Cloneable.

- Fixed the generated hashCode method to prevent NullPointerException.


.NET Changes
============

- Added the methods stringVersion and intVersion to Ice.Util for
  obtaining the Ice version.

- Fixed a NullReferenceException thrown when allocating an InputStream
  with an empty buffer.

- Fixed a NullReferenceException thrown when calling
  startEncapsulation on an OutputStream.

- Changed Ice.Exception to derive from System.Exception rather than
  System.ApplicationException in accordance with Microsoft's
  recommendations for writing custom exceptions.

- The following APIs were deprecated in Ice 3.1 and have been removed:

  Application.main(string, string[], string, Logger)
  Util.initializeWithLogger
  Util.initializeWithProperties
  Util.initializeWithPropertiesAndLogger
  ObjectPrx.ice_hash
  ObjectPrx.ice_communicator
  ObjectPrx.ice_newIdentity
  ObjectPrx.ice_newContext
  ObjectPrx.ice_newFacet
  ObjectPrx.ice_newAdapterId
  ObjectPrx.ice_newEndpoints
  ObjectPrx.ice_collocationOptimization
  ObjectPrx.ice_connection

- The Ice.Application class now supports signal handling on Mono.

- Added the build macro MANAGED, which can be enabled if you want to
  build a version of the Ice run time that uses only managed code.

- Improved marshaling performance for Ice for .NET. This particularly
  affects programs running under Mono on big-endian machines, where
  marshaling performance of sequences improves by up to a factor of
  10. For little-endian machines (both Windows and Mono), marshaling
  performance is also improved.

- Added ice_name() method to exceptions, in keeping with the C++
  and Java convention. The method returns the Slice type ID of
  exception, without a leading "::" qualifier.

- Fixed a bug that caused a NullPointer exception for sequences
  of structs if the structs used the class mapping and the sequence
  contained null elements.

- Fixed a bug that caused a NullPointer exception when marshaling
  a struct containing reference types if that was nested inside
  a data type, such as another exception or struct.

- Added support for a password callback in IceSSL. Also added new
  properties for specifying the name of a password callback class or
  certificate verifier class. See manual for more details.

- Fixed a bug in slice2cs that caused incorrect code to be generated
  for data members of classes and structures that used the
  ["clr:property"] metadata directive.

- Fixed a bug in slice2cs that caused incorrect code to be generated
  for Slice exceptions with data members that had the same name as one
  of the data members of System.ApplicationException.

- The metadata directive "cs:collection" is no longer valid.
  Use ["clr:collection"] instead.

- Added a new mapping for Slice sequences to use C# 2.0
  generics:

  // Slice
  ["clr:generic:List"] sequence<int> S;

  maps to:

  // C#
  System.Collections.Generic.List<int> S;

  This also works for types other than List. Please see the manual for
  more details.

- Added a new mapping for Slice dictionaries to use C# 2.0
  generics:

  // Slice
  dictionary<string, int> D;

  maps to:

  // C#
  System.Collections.Generic.Dictionary<string, int> D;

  The previous mapping to the .NET 1.1 DictionaryBase class is still
  supported with the "clr:collection" metadata directive.

- LocalObject is now mapped to System.Object. The interface
  Ice.LocalObject and the abstract class Ice.LocalObjectImpl are now
  deprecated.

- The Ice.Util.proxyIdentityCompare and proxyIdentityAndFacetCompare
  methods are now using string.CompareOrdinal to compare the identity
  category, name and the facet instead of string.Compare with the
  CultureInfo.InvariantCulture culture-specific information.

- Ice.LocalException and Ice.UserException now implement
  System.ICloneable.

- Ice for C# has been renamed Ice for .NET and the assemblies have
  been renamed as well. For example icecs.dll is now just Ice.dll.


Python Changes
==============

- Fixed a bug that occurred when converting an Ice.Identity object to
  a string via str(). In prior releases, this conversion used the
  global method Ice.identityToString, but that method is no longer
  supported. As a result, the output now resembles that of other
  user-defined types.

- Added the methods Ice.stringVersion and Ice.intVersion.

- Unicode objects are now accepted as arguments (or data members of
  arguments) to remote Slice operations. The local Ice API still uses
  8-bit strings.

- Added new Ice/converter demo to illustrate how to use the new Ice
  for C++ string converter plug-in. This demo is very similar to the
  C++ demo.

- Fixed a deadlock bug that could occur when a multithreaded client
  executes Slice operations that return abstract objects by value.

- Removed "#!/usr/bin/env python" where unnecessary.

- Added ice_staticId() method to generated Slice classes.

- The following APIs were deprecated in Ice 3.1 and have been removed:

  initializeWithLogger
  initializeWithProperties
  initializeWithPropertiesAndLogger
  identityToString
  stringToIdentity
  ObjectPrx.ice_communicator
  ObjectPrx.ice_newIdentity
  ObjectPrx.ice_newContext
  ObjectPrx.ice_newFacet
  ObjectPrx.ice_newAdapterId
  ObjectPrx.ice_newEndpoints
  ObjectPrx.ice_connection

- Fixed a bug where returning an AMD servant from a ServantLocator
  would cause a deadlock in the IcePy extension.

- Added support for blobjects.

- Fixed a code generation bug with slice2py where the proxy type
  for a Python reserved word would be incorrectly named. For example,
  interface def would generate a proxy class named _defPrx, not the
  correct class name defPrx.

- LocalObject is now mapped to the Python base 'object' type. The
  class Ice.LocalObject is now deprecated.

- Fixed a bug in Ice.initialize that would cause a crash if the
  configuration file specified by --Ice.Config was not found.


Ruby Changes
============

- Added the methods Ice::stringVersion and Ice::intVersion.

- Removed "#!/usr/bin/env ruby" where unnecessary.

- Added ice_staticId() method to generated Slice classes.

- Fixed a code generation bug with slice2rb where the reserved words
  BEGIN and END would generate classes, modules and constants named
  _BEGIN, and _END which is illegal. They now generate BEGIN_ and
  END_.

- Fixed a bug where marshaling a plain object proxy fails with an
  uninitialized constant exception.


PHP Changes
===========

- Constructors are now generated for Slice structure, exception, and
  class types. Constructor parameters supply default values for each
  data member.

- A null value is now allowed where a sequence or dictionary value is
  expected.

- Added the methods Ice_stringVersion and Ice_intVersion.

- Removed the undocumented PHP constants ICE_STRING_VERSION and
  ICE_INT_VERSION.

- LocalObject is now mapped to PHP's base object type. The interface
  Ice.LocalObject and the abstract class Ice.LocalObjectImpl are now
  deprecated.

- Added support for an optional context argument to ice_checkedCast
  and ice_uncheckedCast.

- Added the following proxy methods:

  ice_getRouter/ice_router
  ice_getLocator/ice_locator

- Added the translator option "-w" to suppress warnings during Slice
  translation.