ICE 3.4.2
[php5-ice-freebsdport.git] / CHANGES
blob12031013874dea2fff0d80dc36cc5d981cc2bd9d
1 ======================================================================
2 CHANGES for Ice 3.4.2
3 ======================================================================
5 The entries below contain brief descriptions of the changes in a
6 release, in no particular order. Some of the entries reflect
7 significant new additions, while others represent minor corrections.
8 Although this list is not a comprehensive report of every change we
9 made in a release, it does provide details on the changes we feel
10 Ice users might need to be aware of.
12 We recommend that you use the release notes included in your Ice
13 distribution as a guide for migrating your applications to this
14 release, and the Ice manual for complete details on a particular
15 aspect of Ice.
17 Note that this file only includes changes since Ice 3.2.1. For the
18 change history of prior releases, refer to the CHANGES file in the
19 subdirectory of each language mapping (e.g., cpp/CHANGES).
22 ======================================================================
23 Changes since version 3.4.1
24 ======================================================================
27 General Changes
28 ===============
30 - The operation mode sent over the wire for the Object operations
31   ice_ping, ice_isA, ice_ids, and ice_id should be Nonmutating, but
32   the language mappings were inconsistent in this respect. All
33   language mappings now send the correct mode.
35 - Fixed a bug where under certain circumstances, Ice would
36   indefinitely re-try to add a proxy to the Glacier2 routing table.
38 - Improved queuing of Glacier2 requests to the client to not invoke
39   requests if the client connection already has requests pending for
40   send. Instead, Glacier2 waits for the pending requests to be
41   sent. This allow request overriding to occur more often when the
42   client connection is slow.
44 - Fixed bug where an IceGrid node or registry could hang for a long
45   time on startup if some IceGrid registry replicas weren't reachable.
47 - Added throwLocalException method to the Ice AsyncResult class. If
48   the request fails with a local exception, this method throws the
49   local exception.
51 - Fixed a bug that caused a crash if a timeout occurs while sending
52   an AMI request and if automatic retry is enabled (the default).
54 - It is now possible to use a constant as the default value for a data
55   member. For example:
57   // Slice
58   const int MIN = 1;
60   struct Info
61   {
62       int size = MIN;
63   };
65   It is also possible for a constant to refer to another constant:
67   // Slice
68   const int MAXIMUM_SIZE = 100;
69   const int DEFAULT_SIZE = MAXIMUM_SIZE;
72 C++ Changes
73 ===========
75 - Fixed a bug in the Linux epoll selector implementation that could
76   cause hangs when using the thread pool serialization mode.
78 - Fixed a memory leak in IceSSL on Windows.
80 - Fixed a bug in the generated code for a Slice structure containing
81   at least one data member that declares a default value. The
82   constructors were not being exported correctly in this case.
84 - Fixed a bug where the IceUtil::Timer thread could die in case very
85   large delays were specified.
87 - Removed extra include/IceGrid/Perf.h file.
90 Java Changes
91 ============
93 - Added support for Android.
95 - Added overloaded constructors for user and system exceptions that
96   accept a Throwable argument.
98 - Added an ice_staticId method to generated PrxHelper classes.
100 - Fixed a bug in slice2java in which a floating point default value
101   could cause a compile error.
103 - Fixed a bug where Ice.ServerIdleTime wouldn't consistently shutdown
104   servers after the given period of inactivity.
107 C# Changes
108 ==========
110 - Added support for the .NET Compact Framework.
112 - Added demo/Ice/compact, which is a simple graphical client that uses
113   Ice for .NET Compact Framework.
115 - Fixed bugs in the generated code that caused naming conflicts when
116   using a Slice module named 'System'.
118 - Added an ice_staticId method to generated PrxHelper classes.
120 - Fixed a bug in the generated code when a Slice class uses the
121   property mapping and declares default values for its members.
124 Python Changes
125 ==============
127 - Fixed bug where None was not recognized as a keyword.
130 Ruby Changes
131 ============
133 - Fixed a bug in the Ice extension that would cause an ArgumentError
134   to be raised when attempting to print a byte sequence whose value is
135   a string that contains null bytes.
138 PHP Changes
139 ===========
141 - Fixed a bug that caused 'undefined symbol IcePHP__t_XXX' errors when
142   Ice.php or a generated file is included from a non-global scope.
144 - slice2php now generates 'require_once' statements corresponding to
145   Slice #include directives, replacing the 'require' statements used
146   in previous releases.
148 - Fixed a bug in the Ice extension that caused Ice-related INI
149   settings to be ignored.
152 Visual Studio Add-in Changes
153 ============================
155 - Fixed a bug that prevented the Add-in from automatically compiling
156   Slice files when using a non-English version of Visual Studio.
158 - Improved the layout and wording of the Ice Configuration dialogs.
160 - Added $(IceHome) macro to VS 2008 project configurations.
162 - Changed C++ project configurations to use $(IceHome) macro in
163   configuration settings.
165 - Removed Ice Home field from "Ice Configuration" dialog. Projects
166   now always use the Ice installation corresponding to the location
167   of the add-in DLL.
169 - Fixed issues that prevented the use of solution folders in Ice
170   projects.
172 - Fixed an issue that caused the add-in to not work when using
173   Visual Studio 2010 and "Solution Navigator".
175 - Added a check to prevent incorrect Runtime library usage in C++
176   projects.
178 - Added support for .NET Smart Device project types used by the .NET
179   Compact Framework.
181 - Improved add-in output messages.
183 - Fixed an issue that produced a deadlock in Visual Studio when
184   Slice compiler output was large enough to fill the output buffer.
186 - Fixed support for parallel builds. The Slice compiler was run
187   several times, once for each parallel build. Now the Slice
188   compiler is run only once, before all parallel builds begin.
190 - Fixed an issue that could cause errors with Visual Studio if a
191   Slice file was saved while the project was building.
193 - Fixed the add-in to work properly when --header-ext and
194   --source-ext are present in Extra Compiler Options.
196 - Fixed the add-in to support building Freeze demos without the need
197   to set environment variables.
199 - Fixed the add-in to always open generated files as read only;
200   previously the generated files were not opened read only until the
201   first project build.
203 - Added support for setting the output directory for generated files,
204   making the add-in more VCS friendly.
206 - Added support for .NET DEVPATH.
208 - Added support for canceling changes in configuration dialogs. All
209   the configuration dialogs now have OK, Cancel, Apply buttons with
210   the standard semantics.
212 - Added warnings to prevent incorrect options from being entered in
213   Extra Compiler Options.
215 - Added a timestamp to Slice build output, which is only printed when
216   the trace level is Debug.
218 - The add-in now supports command-line builds.
220 - The add-in now avoids making extraneous changes to projects that
221   could result in merge issues when projects are in a shared
222   development.
224 - The add-in no longer overrides the debug environment setting for
225   PATH, but rather appends appropriately.
227 - On the loss of focus when adding an include directory in the Slice
228   Include Path, the addition is now saved rather than lost.
230 - Fixed an issue where moving a Slice-generated file to a filter so
231   that it would be ignored by source control did not always work
232   because the generated files could be moved back into the regular
233   Source Files list by a build.
235 - Improved the tracing output generated by the add-in and changed
236   the tracing options.
239 ======================================================================
240 Changes since version 3.4.0
241 ======================================================================
244 General Changes
245 ===============
247 - Added the new property Freeze.DbEnv.<db>.LockFile and changed the
248   dumpdb and transformdb utilities so that they can be run safely on
249   a database environment that is currently open in another process.
251 - Changed the Glacier2 helper classes to cache the client category.
253 - Added the ability to use underscores in Slice identifiers. See the
254   release notes for important information on this change.
256 - Added the setConnectContext method to Glacier2.SessionFactoryHelper,
257   which allows an application to provide a request context to be used
258   when creating a Glacier2 session. (Java and C#)
260 - Fixed IceGrid bug where node observers would not be notified when a
261   server is re-enabled after it has been updated and if the server was
262   disabled following an activation failure.
264 - Fixed a bug in the Glacier2.SessionFactoryHelper class (Java/C#) in
265   which the getPort() method would return an incorrect default port if
266   no port was configured.
269 C++ Changes
270 ===========
272 - Fixed a bug in slice2cpp in which streaming code was not generated
273   properly for types in nested modules.
275 - slice2cpp now generates a "one-shot" constructor for a Slice
276   structure if at least one of its members has a default value.
278 - Fixed a bug in slice2cpp so that asynchronous "end_op" methods are
279   now exported properly.
281 - Fixed a bug in slice2cpp that would generate invalid code for a
282   Slice exception when the --stream option was not used.
284 - Fixed compatibility issues with OpenSSL 1.0.
286 - Fixed a bug in slice2cpp that would cause invalid code to be
287   generated for a nested Slice definition when the --stream option was
288   used.
290 - Fixed a bug in Freeze that disabled automatic log deletion.
293 Java Changes
294 ============
296 - Fixed an issue in which intensive use of Freeze or the stream API
297   could cause an OutOfMemoryError. Note that Freeze maps must be
298   regenerated with slice2freezej to incorporate this fix.
300 - Fixed a bug in the Slice2Java ant task in which duplicate Slice
301   files could be passed to slice2java. Also fixed a bug in slice2java
302   that caused the translator to fail if a duplicate file was passed
303   on the command line.
305 - Fixed race condition which could cause the thread pool selector
306   thread to go away (causing the thread pool to not dispatch further
307   incoming messages).
309 - Deprecated Ice.AsyncCallback. To use the generic asynchronous
310   callback facility, applications should derive their classes from
311   Ice.Callback.
313 - The size method on a Freeze.Map and on the value of an indexed 
314   submap now use the current transaction associated with the
315   connection, if any.
318 C# Changes
319 ==========
321 - Fixed a bug in the generated code that prevented sequences from
322   being marshaled using the stream API if the sequences used generic
323   collection types.
325 - Fixed a bug in the IceSSL plug-in that could incorrectly report a
326   certificate verification failure when the IceSSL.CheckCertName
327   property is enabled.
330 Python Changes
331 ==============
333 - Fixed a bug in which destroyed Communicator instances were not being
334   garbage collected.
336 - Fixed a bug in Ice.Application in which the exit status was not
337   properly returned from main().
340 ======================================================================
341 Changes since version 3.4b
342 ======================================================================
345 General Changes
346 ===============
348 - Added ability to define default values for Slice data members. For
349   example, you can write:
351   // Slice
352   class C
353   {
354       int i = 2;
355       string name = "John";
356   };
358 - Fixed IceGrid bug where the IceGrid node would disconnect from the
359   registry if the clock was moved backward.
361 - Fixed hang in slice2cs and slice2py that would occur if a comment
362   contained a '<' with no closing '>'.
364 - Fixed a bug in the Java and C# stream classes where readString() and
365   readBlob() were not checking the size before allocating memory.
367 - Fixed source files to have consistent end of line terminators.
369 - Fixed the Ice.initialize(), Ice.initialize(Ice.InitializationData)
370   and Ice.createProperties() overloads in Python, Ruby and PHP to
371   match the C++, .NET and Java behavior. These overloads no longer
372   read the ICE_CONFIG environment variable.
374 - Fixed IceGrid bug where updating an application could cause a
375   temporary hang if a server deactivation hanged during the update.
378 C++ Changes
379 ===========
381 - Renamed the createIceStringConverter function back to
382   createStringConverter for compatibility with previous releases.
385 Python Changes
386 ==============
388 - Fixed a code generation bug that could lead to undefined Slice
389   types, depending on the order in which the generated code was
390   imported.
392 - Changed the Python mapping for long integer constants so that 64-bit
393   values are no longer generated as strings.
396 Ruby Changes
397 ============
399 - Fixed a compilation error when using Ruby 1.8.7 (patch level >=
400   248).
403 ======================================================================
404 Changes since version 3.3.1
405 ======================================================================
408 General Changes
409 ===============
411 These entries apply to all relevant language mappings unless otherwise
412 noted.
414 - Added a new asynchronous method invocation (AMI) facility for C++,
415   C#, Java, and Python. The previous API is now deprecated.
417 - Added the ability to invoke flushBatchRequests asynchronously on a
418   communicator or connection.
420 - The Ice extension for Visual Studio is now included in the Ice
421   distribution. The source code for the extension can be found in the
422   vsplugin subdirectory of the source distribution. Note that the
423   extension no longer supports Visual Studio 2005.
425 - Added a cloneWithPrefix operation to the Logger interface.
427 - Added a removeServantLocator operation to the ObjectAdapter
428   interface.
430 - The translators now include a comment at the beginning of each
431   generated file to indicate that the file is machine-generated.
432   This is particularly useful for tools such as StyleCop.
434 - The IceGrid graphical administration tool now allows you to filter
435   the live deployment for a particular application.
437 - Added the ability to query an IceGrid node to determine the number
438   of CPU sockets on its host machine. Currently this only works for
439   Windows Vista (or later) and native (non-VM) Linux. You can also
440   manually configure the number of CPU sockets.
442 - Freeze now uses file locks to prevent multiple processes from
443   opening the same database environment.
445 - Added new utility classes to simplify the use of Glacier2. The
446   Glacier2::Application class extends Ice::Application to add support
447   for keeping a Glacier2 session alive and automatically restarting it
448   when necessary. For Java and C#, helper classes are also provided
449   for use in graphical programs. See the Ice manual for more
450   information.
452 - Added new InputStream::readAndCheckSeqSize method to read and check
453   the size of a sequence. The check ensures the sequence size is
454   consistent with the stream buffer size. This is useful to prevent
455   over-allocating memory for the sequence if the input stream data
456   cannot be trusted.
458 - When using the system logger (enabled when Ice.UseSyslog is set), it
459   is now possible to set the facility via the Ice.SyslogFacility
460   property. The default value is LOG_USER.
462 - It is now legal to pass an empty name to createObjectAdapterWithRouter
463   and createObjectAdapterWithEndpoints. If so, a UUID will be used for
464   the object adapter's name.
466 - Added support for dispatching servant invocations and AMI callbacks
467   in application-specific threads (e.g., in a GUI-safe thread). The
468   application needs to implement the Ice::Dispatcher interface and
469   initialize the communicator appropriately to use this dispatcher
470   implementation. See the Ice manual for more information.
472 - icegridadmin now clears the user-supplied password after use.
474 - icegridadmin now correctly handles EOF when reading username and
475   password.
477 - The Connection::createProxy method will now create a secure
478   proxy if the connection is secure and a datagram proxy if the
479   connection is a datagram connection.
481 - Added Communicator::proxyToProperty which converts a proxy to a
482   property set.
484 - Calling Glacier2::Router::destroySession() no longer raises an
485   Ice::ConnectionLostException exception. Glacier2 no longer
486   forcefully closes the connection of a destroyed session but instead
487   allows active connection management (ACM) for client connections to
488   close it (see below).
490 - Glacier2 has been changed to support the use of active connection
491   management. Active connection management is enabled by default for
492   Glacier2 client connections if Glacier2.SessionTimeout is set.
493   The ACM timeout is set to twice the value of the session timeout. If
494   the session timeout is disabled, ACM is also disabled for client
495   connections.
497 - Added support for a per-object adapter ACM timeout configured via
498   the <adapter>.ACM property. If not set, the property defaults to
499   value of Ice.ACM.Server set for the adapter's communicator.
501 - Improved the Ice run time's invocation retry facility to always
502   retry at least once on Ice::CloseConnectionException failures even
503   if the retry limit has been reached. If retries are disabled, this
504   ensures that an invocation is retried if it fails with an
505   Ice::CloseConnectionException.
507 - Added Glacier2.AddConnectionContext property to enable forwarding
508   connection information into the context of routed invocations. See
509   the manual for more information. Glacier2.AddSSLContext has been
510   deprecated, this new property should be used instead.
512 - Added Ice.Override.CloseTimeout property. This property overrides
513   timeout settings used to close connections.
515 - Ice connections are now forcefully closed after sending a close
516   connection message and once the connection timeout
517   expires. Previously, the connection would only be closed when the
518   object adapter or communicator was destroyed.
520 - The new Ice::ThreadHookPlugin class allows you to install thread
521   notification hooks during communicator initialization via plug-ins.
523 - Added Glacier2::Router::refreshSession, which keeps the client's
524   Glacier2 session alive. This is useful in the case that the
525   application architecture does not use a Glacier2 session
526   manager. Modified demo/Glacier2/callback to demonstrate the use of
527   this method.
529 - Fixed bug in icegridadmin where invalid XML could cause a crash.
531 - Fixed a bug where calling the object adapter waitForHold() method
532   would cause other calls on the object adapter to hang until the
533   waitForHold() method returned.
535 - Improved connection establishment scalability. Creating or accepting
536   a new connection should now be done in constant time regardless of
537   the number of connections already established or accepted.
539 - Fixed Glacier2 router bug which would cause the getCategoryForClient
540   method to throw Ice::NullHandleException if the server endpoints
541   were not set; instead it now returns an empty string.
543 - Ice.NegativeSizeException has been removed. The run time now throws
544   MarshalException or UnmarshalOutOfBoundsException instead.
546 - The Ice thread pool now supports receiving and sending data over Ice
547   connections using multiple threads. Allowing multiple connections to
548   concurrently send and receive data improves CPU usage on machines
549   with multiple cores. The maximum number of threads allowed to
550   concurrently send/receive data is capped by the number of available
551   cores.
553 - The Ice run time now uses Windows completion ports and overlapped IO
554   to accept, connect, and receive and send data over connections. This
555   improves scalability of server applications handling many
556   connections on Windows.
558 - Ice connections now support read timeouts. A connection will now
559   eventually timeout once the connection timeout is reached if no more
560   data is available for reading after the message header was received.
561   ACM no longer closes a connection for which a message is being
562   received.
564 - The IceSSL.TrustOnly properties support a new syntax that allows you
565   to reject a peer whose distinguished name matches certain criteria.
567 - IceSSL now compares the host name or IP address in a proxy endpoint
568   (if any) against the common name of the server's certificate when
569   the property IceSSL.CheckCertName is enabled. This is in addition to
570   the existing behavior that compared the host name or IP address
571   against the DNS names and IP addresses in the server certificate's
572   subject alternative name extension.
574 - slice2docbook is no longer supported and has been removed from
575   the distribution.
577 - slice2html comments now use a syntax that matches the javadoc
578   syntax. Instead of
580       module::interface::operation
582   slice2html now expects
584       module.interface#operation
586   Similarly, the link syntax now follows the javadoc syntax. Instead
587   of
589       [module::interface::operation]
591   slice2html now expects
593       {@link module.interface#operation}
595   The old syntax is still supported; slice2html prints a warning for
596   each source file in which it encounters the old syntax.
598 - A batch invocation now only throws if the connection associated
599   with the proxy failed and there were batch requests queued at the
600   time of the failure. If there were no batch requests queued, the
601   batch invocation does not throw but instead tries to obtain a new
602   connection.
604 - Added the ability to read properties from the Windows registry. This
605   is done by setting the Ice.Config property to a value such as the
606   following:
608     HKLM\Software\MyCompany\IceProperties
610   This will read all the string values from the specified key in
611   HKEY_LOCAL_MACHINE and set them as Ice properties.
613 - iceserviceinstall, the Windows service installation utility, now
614   supports reading its configuration settings from HKLM in the Windows
615   registry.
617 - Added ability to get information from endpoints such as host and
618   port without having to parse the stringified endpoint.
620 - Added ability to get addressing information from a connection.
622 - The IceSSL::ConnectionInfo type is now generated from a local Slice
623   definition. You can downcast this type to NativeConnectionInfo if
624   you require access to native certificates.
626 - Slice files are now allowed to be in UTF-8 format and include UTF-8
627   BOM at start of file and include UTF-8 characters in comments.
629 - Fixed bug in Slice compilers that would cause a crash if a Slice
630   file had double slashes in its path.
632 - The following properties were deprecated in Ice 3.2 and have been
633   removed:
635   Glacier2.AddUserToAllowCategories
636   Glacier2.AllowCategories
637   Ice.UseEventLog
639 - The following APIs were deprecated in Ice 3.2 and have been removed:
641   Communicator::setDefaultContext
642   Communicator::getDefaultContext
643   ObjectPrx:ice_defaultContext
645 - Support for the deprecated Slice keyword 'nonmutating' has been
646   removed. As a result the following property has also been removed:
648   Freeze.UseNonmutating
650 - HP-UX is no longer a supported platform for Ice.
652 - Added extra network tracing to show the list of local interfaces
653   currently available when an endpoint is using a wildcard host, as
654   well as the published endpoints for an object adapter. Both of these
655   traces will be shown when Ice.Trace.Network >= 1.
657 - Added new property, Ice.Trace.ThreadPool, that when set >= 1 enables
658   tracing of thread pool creation as dynamic thread pools grow and
659   shrink.
661 - Changed the format of the default logger output. Traces are now
662   prepended by '--', warnings by '-!' and errors by '!!'.
664 - The value of the thread pool SizeWarn property is now 0 by default
665   rather than 80% of Size. This means that by default warnings about
666   thread pool growth will now be disabled.
668 - Added example demo/Ice/plugin to show how to write a simple Ice
669   plug-in as well as a Logger plug-in.
671 - Added getPlugins method to PluginManager which returns a list of the
672   names of all installed plug-ins.
674 - The reason member of MemoryLimitException now contains the size of
675   the request that caused the exception as well as the value of the
676   maximum message size.
678 - The Ice::Application helper classes now use the process logger to
679   emit errors rather than just writing directly to stderr.
681 - A Slice class that implements an interface but does not define or
682   inherit any operations is now mapped to a concrete class. This
683   change affects the Java, C#, Python, and Ruby language mappings.
685 - It is now possible to use an UNC path as an include directive for
686   the Slice compilers.
688 - Fixed a bug in slice2html that caused incorrect hyperlinks to be
689   generated for the summary of the index sections of a module page.
691 - Added a new property, Ice.LogFile, which causes the default Ice
692   logger to write to a file rather than stderr. The file name is the
693   property's value.
695 - Added the following operations to the ObjectAdapter API:
697    - addDefaultServant
698    - removeDefaultServant
699    - findDefaultServant
701   These methods provide a simpler way of using default servants in
702   Ice. Please refer to the manual for more information.
704 - Using the --depend option with Slice compilers that support it no
705   longer outputs dependency info even if the Slice file itself
706   contains errors.
709 C++ Changes
710 ============
712 - Added a new demo named "interleaved" that shows how to use
713   asynchronous invocation and dispatch to achieve maximum throughput
714   with Ice.
716 - Fixed a bug that prevented an application from using Unicode path
717   names for Freeze databases on Windows.
719 - Enhanced the portable streaming API to provide better support for
720   template programming.
722 - The C++ class generated for a derived Slice class no longer uses
723   virtual inheritance by default. The metadata "cpp:virtual" can be
724   defined for a Slice class to force the translator to use virtual
725   inheritance when necessary.
727 - The following functions have new overloaded versions on Windows that
728   accept a Unicode argument vector:
730   Ice::Application::main
731   Ice::Service::main
732   Ice::argsToStringSeq
734 - Added support for specifying the priority of threads in a thread
735   pool. See the Ice manual for more information.
737 - Added new demo book/map_filesystem.
739 - IceUtil:: Shared now uses the native atomic functions provided by gcc
740   4.1 and later on supported platforms. For details see
741   http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
743 - Fixed a bug in slice2cpp that could cause incorrect includes to be
744   generated if a Slice file was included that was a symbolic link.
746 - On Windows it is now possible to build the Ice DLLs with unique names
747   for each supported compiler. See UNIQUE_DLL_NAMES setting in
748   cpp/config/Make.rules.mak.
750 - The Ice DLLs no longer all use the default base load address.
752 - Changed the signature of the Ice::Service start method.
754 - Added new static methods to initialize an IceUtil::Time class from
755   a double:
757   IceUtil::Time::secondsDouble(double)
758   IceUtil::Time::milliSecondsDouble(double)
759   IceUtil::Time::microSecondsDouble(double)
761 - Added the ability to use alternative database storage for IceStorm
762   and IceGrid other than Freeze. The following SQL databases are
763   supported: SQLite and PostgreSQL. Please see the manual for more
764   information.
766 - Fixed a bug where globally-scoped garbage collected class pointers
767   could cause a crash on application termination.
769 - Fixed a bug where an SSL connection was rejected because of a
770   certificate validation failure even if IceSSL.VerifyPeer=0.
772 - Added ice_stackTrace() method to Exception classes, which returns
773   the exception stack trace on platforms/compilers that support it.
774   Currently this is only supported with the GCC compiler.
776 - Added new property, Ice.PrintStackTraces, which controls whether the
777   Ice logger utility classes (Ice::Trace, Ice::Warning, etc) print the
778   stack trace for Ice exceptions. By default it is enabled for debug
779   builds and disabled for release builds.
781 - Removed AMD_Array_Object_ice_invoke class and instead added an
782   ice_response method to AMD_Object_ice_invoke that uses the array
783   type.
785 - The system logger (enabled when Ice.UseSyslog is set) now uses the
786   value of Ice.ProgramName as the log identifier prefix.
788 - Fixed crash if Application::main() or Service::main() were called
789   with argc == 0.
792 Java Changes
793 ============
795 - The Freeze map API now uses Java5 generic type conventions.
797 - Ice now tests for the presence of the Bzip2 classes only if an
798   application attempts to use compression.
800 - Added new demo book/map_filesystem.
802 - Changed IceSSL to use the keystore as the truststore if no
803   truststore is explicitly defined.
805 - Added new ice_dispatch method to Object that does not take a
806   DispatchInterceptorAsyncCallback parameter to be used for
807   synchronous dispatch only.
809 - Added support for using direct buffers in the transport layer to
810   minimize copying. The semantics of the Ice.CacheMessageBuffers
811   property have been extended as follows:
813   0 = no buffer caching
814   1 = buffer caching using non-direct buffers
815   2 = buffer caching using direct buffers
817   If this property is not defined, the new default value is 2.
819 - The Ice run time now re-throws exceptions using fillInStackTrace to
820   ensure the exception stack trace includes the calling point.
822 - Added the "classLoader" member to Ice.InitializationData, which
823   allows you to supply a custom class loader that Ice uses to load
824   plug-ins, user exceptions, concrete Slice classes, etc.
826 - Fixed a bug in the implementation of ice_invoke_async.
828 - The Freeze classes are now stored in a separate JAR file named
829   Freeze.jar.
831 - The translator no longer generates one-shot constructors for class,
832   struct and exception types if doing so would exceed Java's limit of
833   255 parameters for a method.
835 - Fixed a bug where an outgoing SSL connection was allowed even though
836   certificate validation failed.
838 - A holder class generated for a Slice class or interface now extends
839   the generic base class Ice.ObjectHolderBase and implements the
840   streaming interface Ice.ReadObjectCallback.
842 - slice2java no longer generates a <name>OperationsNC interface for
843   local interfaces and classes. This makes the code easier to browse
844   with IDEs.
846 - slice2java now preserves javadoc comments that appear in the Slice
847   source and writes them through to the corresponding APIs in the
848   generated code.
850 - Ice.jar and Freeze.jar now include source files. This allows IDEs
851   such as Eclipse to browse the Ice source code and to display javadoc
852   comments.
854 - Fixed a bug that caused UnmarshalOutOfBoundsException during an
855   attempt to unmarshal an exception or class if Ice.jar is installed
856   in the JVM's extension directory.
858 - The following APIs are deprecated and will be removed in a future
859   release.
861   Ice.Object.ice_hash()
862   Ice.ObjectPrx.ice_getHash()
863   Ice.ObjectPrx.ice_toString()
865 - The StackSize thread pool configuration property is now used.
867 - The generated classes for Slice structs are no longer declared final.
869 - Ice.Util.generateUUID has been deprecated. Use
870   java.util.UUID.randomUUID().toString() instead.
872 - Ice now supports the ability to load a configuration file as a class
873   path resource. For a path name specified in the ICE_CONFIG
874   environment variable, in the --Ice.Config command-line option, or
875   passed to Properties::load(), Ice first attempts to open the file as
876   a class path resource and, if that fails, tries to open it as a file
877   in the local file system. See the manual for more information.
879 - Removed the Java2 mapping. The release notes contain instructions
880   for migrating an application to the Java5 mapping.
882 - Changed the Slice compiler to emit @SuppressWarning annotations only
883   when necessary.
885 - Fixed a discrepancy between the documented behavior of the property
886   IceSSL.CheckCertName and its actual behavior. The documented
887   behavior states that IceSSL compares the host name as it appears in
888   the proxy's endpoint against the server certificate's alternative
889   subject names. The actual behavior in Ice 3.3 differed slightly in
890   that the host name may have undergone a translation that could
891   result in IceSSL using a different host name than that of the proxy.
892   For example, the proxy may have contained "127.0.0.1" but IceSSL
893   used "localhost". This could cause the SSL connection attempt to
894   fail if IceSSL.CheckCertName is enabled. IceSSL now uses the host
895   name from the proxy for this validation step.
898 C# Changes
899 ==========
901 - The Ice DLLs no longer all use the default base load address.
903 - Both Ice Plugin and IceBox Service configuration now allow you to
904   enter a full path as the assembly DLL name.
906 - Added new ice_dispatch method to Object that does not take a
907   DispatchInterceptorAsyncCallback parameter to be used for
908   synchronous dispatch only.
910 - IceSSL's behavior with respect to the IceSSL.CheckCertName property
911   is now consistent with that of C++ and Java. Specifically, IceSSL
912   compares the host name or IP address in a proxy endpoint (if any)
913   against the common name and subject alternative names of the
914   server's certificate. In prior releases, IceSSL relied on .NET to
915   perform the validation of the common name but no comparison was made
916   with the subject alternative names.
918 - Fixed bug where random endpoint selection would only work for
919   proxies with more than two endpoints.
921 - Fixed thread safety issue in random endpoint selection.
923 - slice2cs no longer generates a <name>OperationsNC interface for
924   local interfaces and classes. This makes the code easier to browse
925   with IDEs.
927 - slice2cs now converts javadoc comments in Slice files into Visual C#
928   XML documentation comments. This allows you to generate
929   an <assembly>.xml file from the documentation comments by passing
930   the /doc option to Visual C#. The comments in the <assembly>.xml
931   file are shown as Visual C# tooltips if the <assembly>.xml file is
932   installed in the same directory as the <assembly>.dll file.
934   The build for Ice now generates the <assembly>.xml file for each
935   assembly and installs it, so Visual C# displays tooltips for Ice
936   APIs.
938 - The generated types for Slice classes, interfaces, structs and
939   exceptions are now declared as partial.
941 - The following APIs are deprecated and will be removed in a future
942   release.
944   Ice.Object.ice_hash()
945   Ice.ObjectPrx.ice_getHash()
946   Ice.ObjectPrx.ice_toString()
948 - The StackSize thread pool configuration property is now used.
950 - The default Ice logger now uses System.Diagnostics.Trace to
951   output messages. Please see manual and Trace documentation for
952   more information.
954 - Ice.Util.generateUUID has been deprecated. Use
955   System.Guid.NewGuid.ToString() instead.
958 Python Changes
959 ==============
961 - The extension now restores the pre-existing dlopen flags.
963 - The __cmp__ method generated for slice structures and enumerations
964   has been replaced by the rich operators __lt__, __le__, __eq__,
965   __ne__, __gt__, __ge__.
967 - Slice comments are now converted into Python docstrings in the
968   generated code.
970 - Added the administrative facet API.
972 - Integer values are now accepted where floating point values are
973   expected.
975 - Objects that support the number protocol are now accepted as legal
976   values for Slice integer and floating-point types.
978 - 64-bit integers are now supported in buffer types.
981 Ruby Changes
982 ============
984 - The following API as been deprecated and will be removed in a
985   future release.
987   Ice::ObjectPrx::ice_getHash()
990 PHP Changes
991 ===========
993 - Enumerations are now supported as dictionary key types.
995 - Integer values are now accepted where floating point values are
996   expected.
998 - Added slice2php and removed dynamic Slice translation.
1000 - Added support for PHP namespaces (requires PHP 5.3 or later).
1002 - Added ability to create and destroy communicators. Use the function
1003   Ice_initialize (\Ice\initialize) to create a communicator. By
1004   default, all communicators created during a page request are
1005   destroyed automatically at the end of the request.
1007 - Added ability to register a communicator for use in a subsequent
1008   page request. Three new functions are provided:
1010   * Ice_register   (\Ice\register)
1011   * Ice_unregister (\Ice\unregister)
1012   * Ice_find       (\Ice\find)
1014 - Added a demo (in Glacier2/hello) that shows how to register and
1015   use the same communicator instance for multiple page requests in a
1016   PHP session.
1018 - Added support for all Slice local exceptions.
1020 - The INI settings are now used to configure property sets that a
1021   script can use to initialize a communicator. The ice.slice directive
1022   is no longer supported.
1024 - Added the function Ice_createProperties().
1026 - Now generating minimal proxy classes to simplify downcasting.
1028 - Removed the "$ICE" global variable.
1030 - Removed the following methods:
1032   $ICE->setProperty()
1033   $ICE->getProperty()
1035 - Removed the following functions:
1037   Ice_stringToIdentity()
1038   Ice_identityToString()
1039   Ice_loadProfile()
1040   Ice_loadProfileWithArgs()
1041   Ice_dumpProfile()
1044 Visual Studio Plugin Changes
1045 ============================
1047 - Added support for Visual Basic projects. For Visual Basic projects
1048   the plug-in only takes care of managing Ice references and not slice
1049   compilation.
1051 - It is now possible to install the plug-in when "My Documents" is
1052   linked to a network drive.
1054 - The plug-in will no longer modify projects for which it is not
1055   enabled.
1057 - The plug-in will now compile slice files for C++ projects even if
1058   the project does not have "C++ Options".
1061 ======================================================================
1062 Changes since version 3.3.0
1063 ======================================================================
1066 General Changes
1067 ===============
1069 These entries apply to all relevant language mappings unless otherwise
1070 noted.
1072 - Fixed a bug where ice_getCachedConnection could throw if called
1073   shortly after connection establishment failed.
1075 - Fixed an IceGrid bug where an application update could trigger the
1076   deactivation of all session-activated servers even if these servers
1077   were not updated.
1079 - The frequency at which Ice checks for connections that can be reaped
1080   by active connection management (ACM) is now set by default to 10%
1081   of the smallest, non-zero ACM setting (Ice.ACM.Client and
1082   Ice.ACM.Server), with a minimum value of 5 seconds and a maximum
1083   value of 5 minutes. This default can be overridden by setting
1084   Ice.MonitorConnections, which is no longer deprecated, and whose
1085   value is the check frequency in seconds.
1087 - Fixed a bug in IceBox where services using the shared communicator
1088   would be passed the wrong communicator if re-started with the IceBox
1089   service manager interface.
1091 - Improved Glacier2 to automatically destroy the client session if the
1092   forwarding of a request from a back-end server to the client fails
1093   with an unrecoverable error. This is particularly useful for clients
1094   that receive requests from back-end servers on a regular basis and
1095   disable the Glacier2 session timeout. If for some reason the client
1096   becomes unreachable, Glacier2 will eventually destroy the client
1097   session (assuming timeouts are properly configured on the Glacier2
1098   client endpoints).
1100 - Added support for updating locator cache endpoints in the background
1101   if the new Ice.BackgroundLocatorCacheUpdates property is set to 1.
1103   Locator cache updates are triggered if the proxy locator cache
1104   timeout is configured and the cached endpoints are older than the
1105   configured timeout.
1107   By default, locator cache updates are performed before making an
1108   invocation, delaying the invocation until the new endpoints are
1109   retrieved from the locator. With this feature enabled, the locator
1110   cache updates are performed in the background and the invocation
1111   that triggered the update uses the previously cached endpoints.
1113 - Optimized the Ice client run time to minimize locator requests when
1114   multiple concurrent or AMI requests need to resolve the endpoints of
1115   the same well-known object, object adapter, or replica group.
1117 - Fixed a bug in IceGrid that would cause it to generate incorrect
1118   configuration files for servers whose ice-version was set to a
1119   version previous to Ice 3.3.0.
1121 - Fixed a bug in the Slice translators that prevented them from being
1122   run from a directory without write permissions, even if no output
1123   files were being written to the directory.
1125 - Fixed a bug where retried AMI calls could cause the timer thread to
1126   print an error message if the retry failed and if Ice.RetryIntervals
1127   was configured with non-zero time intervals.
1129 - All error output from the Slice compilers now goes to stderr.
1131 - Made unmarshaling code robust against messages containing invalid
1132   indexes for class instances.
1134 - Fixed IcePatch2 to handle non-ASCII file names properly.
1136 - Fixed a bug in IceGrid that could cause the registry to fail with an
1137   assertion if an application is synchronized concurrently by multiple
1138   administrative clients (or by nodes started with the --deploy
1139   option).
1141 - IceGrid locator implementation changes:
1143   * Fixed a bug where the registry could crash when resolving the
1144     endpoints of a replica group if some servers were activating
1145     concurrently.
1147   * Fixed a bug where the registry could hang when resolving the
1148     endpoints of a round-robin replica group if a member of the
1149     replica group was removed concurrently.
1151   * Improved the scalability of the locator implementation to better
1152     handle a high volume of concurrent requests. The registry now
1153     limits the number of invocations to the IceGrid nodes to get the
1154     object adapter endpoints.
1156 - A Slice compiler now removes any files it has generated during the
1157   current execution if it fails or is interrupted.
1159 - The Slice compilers that support the --depend option now use an exit
1160   status of 1 if a failure occurs while generating dependencies. In
1161   previous releases the compilers used an exit status of 0.
1163 - Fixed a bug in the iceca script that prevented the command "init
1164   --overwrite" from working properly on Windows.
1166 - Fixed a bug where the IceBox shared communicator ignored Ice
1167   communicator properties specified in an IceBox service configuration
1168   file.
1170 - Fixed a bug where Ice plug-ins could be destroyed more than once.
1172 - Fixed several issues in the IceGrid GUI.
1175 C++ Changes
1176 ===========
1178 - Fixed a bug in IceSSL plug-in which could cause a crash on
1179   communicator destruction.
1181 - Changed the thread pool to ensure that references to AMI callback
1182   objects are released as soon as possible.
1184 - Fixed bug in slice2cpp that caused bad code to be generated for
1185   classes and modules whose name was a C++ keyword.
1187 - Fixed a bug in IceSSL where the IceSSL.CheckCertName property did
1188   not have any effect.
1190 - Fixed icegridadmin `service list' command crash.
1192 - Fixed a bug where slice2cpp and slice2freeze would generate absolute
1193   include paths if the command line option "-I." was used.
1195 - Fixed a Freeze transactional evictor bug that could cause the
1196   transaction of an asynchronous method dispatch to be rolled back if
1197   rollback on user exception was enabled.
1199 - Fixed a bug that could cause the first invocation on a proxy to
1200   incorrectly be sent compressed or not compressed.
1202 - Fixed a bug on Windows that could cause an interrupted application
1203   to spin for a while before terminating.
1206 Java Changes
1207 ============
1209 - Slice types now implement java.io.Serializable.
1211 - If a servant raises OutOfMemoryError while dispatching an operation,
1212   the Ice run time now traps it and treats it as a hard error, meaning
1213   Ice logs an error message and closes the connection on which the
1214   request was received.
1216 - Added object serialization that allows native Java objects to be
1217   sent as operation parameters. See the Slice chapter and the Java
1218   language mapping chapter in the manual for more information.
1220 - Fixed bug in slice2java that caused bad code to be generated for a
1221   class whose name was a Java keyword if the class contained data
1222   members.
1224 - The path names specified by the IceSSL.Keystore, IceSSL.Truststore,
1225   and IceSSL.Random properties can now refer to class path resources.
1227 - Added methods to the IceSSL plug-in to allow keystores, truststores,
1228   and RNG seeds to be specified using input streams.
1230 - Fixed the IceSSL.ConnectionInfo type so that the "incoming" and
1231   "adapterName" members are public.
1233 - Added support for using Ice in an applet, along with a new demo.
1236 C# Changes
1237 ==========
1239 - Added object serialization that allows native C# objects to be sent
1240   as operation parameters. See the Slice chapter and the C# language
1241   mapping chapter in the manual for more information.
1243 - Changed the Ice run time to no longer rely on .NET worker threads
1244   to start asynchronous I/O operations.
1246 - Fixed a bug in slice2cs that caused a core dump if a dictionary had
1247   a value type of Object.
1249 - Fixed a bug in slice2cs that caused incorrect code to be generated
1250   if an operation had a parameter named "ex".
1252 - Fixed a bug in slice2cs that caused incorrect code to be generated
1253   if a Slice class used the property mapping and also applied
1254   a ["cs:attribute:..."] metadata directive to a data member.
1256 - Fixed an issue that could cause an application to fail to start if
1257   Ice was unable to load an assembly that was referenced (but not
1258   required) by the program and not present on the system.
1260 - Fixed a bug in marshaling code that caused a trailing zero byte
1261   to be marshaled for user exceptions without class data members.
1263 - Fixed a bug in slice2cs that caused incorrect code to be generated
1264   for a dictionary that used a structure as the key type.
1266 - Fixed a bug in slice2cs that caused incorrect code to be generated
1267   for a sequence whose element type is a structure that uses the
1268   class mapping.
1271 Python Changes
1272 ==============
1274 - Implemented the Ice.Trace.Slicing property for user exceptions.
1276 - It is now possible to pass a sequence of 64-bit integer values
1277   using an object that supports the buffer protocol.
1279 - Fixed a bug in the constructors of user-defined types that have
1280   structures as data members. Consider this example:
1282   // Slice
1283   struct Point {
1284       int x;
1285       int y;
1286   };
1287   struct Event {
1288       Point location;
1289       ...
1290   };
1292   The Event constructor supplied a default instance of the Point
1293   member if the caller did not supply one. However, this default
1294   instance was unintentionally shared by all Event objects that
1295   omitted a value for the Point member during construction. The
1296   generated code now ensures that each instance of Event assigns a
1297   new instance of Point.
1299 - Fixed bugs in getImplicitContext related to using it when an
1300   implicit context had not been set.
1302 - Fixed bugs in stringToProxy and propertyToProxy related to null
1303   proxies.
1305 - Ice.getSliceDir() now only searches for the "slice" directory in a
1306   standard Ice installation.
1308 - Improved the way the build system locates the Python framework on
1309   Mac OS X.
1312 Ruby Changes
1313 ============
1315 - The translator now generates an eql? method for Slice structures.
1317 - Implemented the Ice.Trace.Slicing property for user exceptions.
1319 - Added helper Ice.getSliceDir, which locates the "slice" directory in
1320   a standard Ice installation.
1323 PHP Changes
1324 ===========
1326 - It is now possible to specify multiple Slice files in your profile
1327   configuration that have common include files. For example, if A.ice
1328   and B.ice both include Common.ice, you can now do the following:
1330   ice.slice=-I. A.ice B.ice
1332   In previous releases this would have caused a redefinition error,
1333   which you could work around by creating a single Slice file that
1334   included both A.ice and B.ice. This workaround is no longer
1335   necessary.
1337 - Fixed bugs in the ice_router and ice_locator proxy methods.
1340 ======================================================================
1341 Changes since version 3.2.1
1342 ======================================================================
1345 General Changes
1346 ===============
1348 These entries apply to all relevant language mappings unless otherwise
1349 noted.
1351 - It is now possible to use UNC paths on Windows in the configuration
1352   of Ice services, such as in the value of the IceGrid.Node.Data
1353   property for an IceGrid node.
1355 - Fixed bug in slice2html that caused incorrect hyperlinks to be
1356   generated if nested modules were used.
1358 - Added support for non-blocking AMI and batch requests. Activities
1359   such as DNS lookups, endpoint resolution, connection establishment,
1360   and sending the request are now performed in the background if
1361   necessary.
1363 - AMI requests now return a boolean to indicate if the request is
1364   sent synchronously. If not sent synchronously and the AMI callback
1365   implements the Ice::AMISentCallback interface, the Ice run time
1366   calls the ice_sent() method once the request is sent.
1368 - AMI timeouts are no longer triggered by the connection monitor
1369   thread at regular time intervals. Instead, timeouts are now
1370   triggered on time just like synchronous invocations. As a result,
1371   the setting of the Ice.MonitorConnections is no longer useful and
1372   this property has been deprecated.
1374 - Added the proxy methods ice_flushBatchRequests() and
1375   ice_flushBatchRequests_async() to flush the batch requests of the
1376   connection associated with the proxy. Like AMI requests, the
1377   ice_flushBatchRequests_async() method is guaranteed to not block.
1379 - Added support for oneway AMI requests. The ice_response() method of
1380   the AMI callback is never called for oneway requests sent with AMI.
1381   Unlike regular oneway requests which might block until the request
1382   is passed to the TCP/IP stack, oneway AMI requests can't block.
1384 - Removed the thread-per-connection (TPC) concurrency model.
1385   Applications that were using TPC for its ordering guarantees can use
1386   the new thread pool serialization feature.
1388 - The Ice thread pool now supports a new serialization mode that
1389   serializes the processing of messages received over a connection.
1390   For example, this is useful when you want to ensure the orderly
1391   dispatching of oneway requests from a client even if the thread pool
1392   has multiple threads. Serialization is enabled by setting the thread
1393   pool's Serialize property to 1.
1395 - An Ice server will now abort() if there are no more file descriptors
1396   available to accept incoming connections. Note that this behavior is
1397   subject to change in the final release.
1399 - An IceGrid node is more conservative when removing the directory of
1400   a server. The node only removes the directory when the server is
1401   explicitly removed from a deployed application or if the directory
1402   contains only files and directories that were created by the node.
1404 - IceGrid's round-robin load balancing policy better handles servers
1405   that are unreachable.
1407 - Fixed an IceGrid bug where patching servers deployed with the
1408   attribute `application-distrib' set to false wouldn't work.
1410 - Added an object adapter to the IceGrid registry. The adapter is
1411   named `IceGrid.Registry.AdminSessionManager' and is responsible for
1412   Glacier2 administrative sessions.
1414 - When resolving the endpoints of a replica group, the IceGrid locator
1415   no longer waits for an object adapter to complete its activation if
1416   another adapter is already active.
1418 - Fixed an IceGrid descriptor bug where re-opening an unnamed property
1419   set would cause multiple property definitions.
1421 - Added a fix to prevent the IceGrid node from printing an annoying
1422   thread pool size warning on startup.
1424 - Fixed IceGrid bug where updates to IceBox services were not
1425   correctly sent to the IceGrid GUI or to IceGrid registry slaves.
1427 - The IceGrid node now unblocks the SIGHUP, SIGINT and SIGTERM signals
1428   from forked servers.
1430 - The IceGrid node now prints a warning if it can't reach the IceGrid
1431   registry when it starts. This warning can be disabled with --nowarn.
1433 - An IceBox service can now recursively start and stop other IceBox
1434   services from within its start and stop methods. The level of
1435   recursion is limited to the threads in the administrative object
1436   adapter's thread pool.
1438 - Configuration properties for IceBox services can now be defined on
1439   the command line.
1441 - IceBox services that share a communicator now use a dedicated
1442   communicator instance that is not used by the IceBox server. This
1443   dedicated communicator only inherits properties from the server's
1444   communicator if IceBox.InheritProperties is set to a non-zero value.
1446 - It is no longer necessary to define a value for the property
1447   IceBox.ServiceManager.Endpoints. If this property is not defined,
1448   the ServiceManager interface is not available.
1450 - Changes related to Highly-Available IceStorm
1452   - IceStorm now supports master/slave replication with automatic
1453     failover.
1455   - IceStorm also supports a transient mode that uses no databases.
1456     This mode is enabled using the new property <service>.Transient.
1457     Replication is not supported in this mode.
1459   - Subscriptions are now persistent (except in transient mode).
1461   - Added a new Quality of Service (QoS) parameter, retryCount, to
1462     control when subscribers are removed. IceStorm automatically
1463     removes a subscriber after the specified number of unsuccessful
1464     event deliveries. The default value of retryCount is 0, meaning
1465     the subscriber is removed immediately upon any failure. A
1466     subscriber is always removed on a hard failure, which is defined
1467     as the occurrence of ObjectNotExistException or
1468     NotRegisteredException.
1470   - The IceStorm database format has changed. Use the utility
1471     icestormmigrate to migrate from the database formats of Ice 3.1.1
1472     and Ice 3.2.1. The old migration script (updateicestorm.py) has
1473     been removed.
1475   - Added the new C++ example demo/IceStorm/replication2, which
1476     demonstrates how to manually configure IceStorm replication.
1478   - Added the "replica" command to icestormadmin to get debugging
1479     information on IceStorm replication.
1481   - The TopicManager object adapter now uses its own thread pool in
1482     the replicated case to ensure that ordering is guaranteed by
1483     default even if a publisher uses a oneway proxy.
1485   - Upon shutdown IceStorm now guarantees that all received events
1486     are delivered to all subscribers.
1488   - Added Topic::getNonReplicatedPublisher, which always return a
1489     non-replicated publisher proxy.
1491   - All IceStorm properties must be prefixed with the service name.
1492     For example, consider the following IceBox service configuration:
1494     IceBox.Service.Foo=IceStormService,33:createIceStorm ...
1496     In this case the IceStorm configuration properties must use the
1497     "Foo" prefix, such as
1499     Foo.Discard.Interval=10
1501   - Removed the icestormadmin Slice checksum check. This avoids
1502     warnings when using icestormadmin against an older version of
1503     IceStorm.
1505 - It is now possible to specify properties in a config file with
1506   space, '#' or '=' in either the key or value string. It is necessary
1507   to escape '#' and '=' as '\#' and '\='. Leading or trailing spaces
1508   are only allowed in keys and need to be escaped as '\ '.
1510 - Properties set programmatically can no longer have leading or
1511   trailing whitespace in the key.
1513 - There is no longer a limit on the allowable length of a property
1514   line in an Ice config file. Previously the limit was 1024.
1516 - The new property Ice.Warn.UnusedProperties causes the communicator
1517   to display a warning during its destruction that lists all
1518   properties that were set but whose values were never read.
1520 - The way that the Ice run time determines whether a proxy invocation
1521   is eligible for collocation optimization has changed somewhat. The
1522   Ice run time no longer performs a DNS lookup; instead, invocations
1523   on a direct proxy will use the optimization only if the host and
1524   port of one of its endpoints match the host and port of an endpoint
1525   or published endpoint of an object adapter from the same
1526   communicator.
1528 - Exceptions thrown from collocation-optimized invocations are now
1529   fully transparent. If an operation throws an exception that is not
1530   in the operation's exception specification, or throws a non-Ice
1531   exception, the client receives UnknownUserException or
1532   UnknownException, exactly as if the servant for a remote invocation
1533   had thrown the same exception. (In earlier versions, the client
1534   received the original exception, rather than an unknown exception.)
1536   For Ice run-time exceptions, all run-time exceptions are passed
1537   to the client as UnknownLocalException, except for
1539   - ObjectNotExistException
1540   - FacetNotExistException
1541   - OperationNotExistException
1542   - OperationNotExistException
1543   - UnknownException
1544   - UnknownLocalException
1545   - UnknownUserException
1546   - CollocationOptimizationException
1548 - The property Ice.Default.CollocationOptimization and the proxy
1549   property <proxy>.CollocationOptimization have been deprecated and
1550   replaced by Ice.Default.CollocationOptimized and
1551   <proxy>.CollocationOptimized, respectively.
1553 - Most proxy factory methods now return a proxy of the same type as
1554   the original and no longer require the use of a checked or unchecked
1555   cast. For example, in C++ you can write
1557   HelloPrx hello = ...;
1558   hello = hello->ice_oneway();
1560   Previously you would have needed a cast, such as
1562   hello = HelloPrx::uncheckedCast(hello->ice_oneway());
1564   In Java and .NET, you must use a type cast:
1566   hello = (HelloPrx)hello.ice_oneway();
1568 - If a proxy contains a host that is multihomed, the client will now
1569   try all the available IP addresses. Previously, only the first in
1570   the address list returned by the DNS was used and others were
1571   ignored.
1573 - It's now possible to change the compression setting for a fixed
1574   proxy. In previous releases, calling ice_compress on a fixed proxy
1575   would raise Ice::FixedProxyException.
1577 - Added a new skipEncapsulation method to the Ice::InputStream
1578   interface. This method can be used to skip an encapsulation when
1579   reading from a stream.
1581 - The endEncapsulation method from the Ice::InputStream interface will
1582   now throw Ice::EncapsulationException if not all the data from the
1583   encapsulation has been read.
1585 - The marshaling code now throws an exception if an enumerator that is
1586   out of range for its enumeration is sent or received.
1588 - Network tracing now also includes failures to connect if
1589   the Ice.Trace.Network property is set to 2.
1591 - The property Ice.Trace.Location has been deprecated and replaced
1592   by Ice.Trace.Locator.
1594 - The Ice locator tracing (enabled with the `Ice.Trace.Locator'
1595   property) now traces calls to locator registry when an object
1596   adapter updates its endpoints or the server process proxy is
1597   registered.
1599 - The new property Ice.TCP.Backlog allows you to specify the size of
1600   incoming connection backlog for TCP/IP sockets. This setting is
1601   also used for SSL. In C++ the default value is SOMAXCONN or 511 if
1602   that macro is not defined. In Java and .NET the default value is
1603   511.
1605 - Added support for IPv6. It is disabled by default but can be enabled
1606   using the configuration property Ice.IPv6. The property Ice.IPv4 can
1607   be used to disable IPv4 support.
1609 - Added support for UDP multicast.
1611 - A new object adapter property, <adapter>.ProxyOptions, lets you
1612   customize the proxies that the adapter creates.
1614 - Added a new operation to the ObjectAdapter interface named
1615   refreshPublishedEndpoints(). This operation allows you to update an
1616   adapter's published endpoints after a change in the available local
1617   interfaces or after a change to the PublishedEndpoints property.
1619 - The "-h *" endpoint option is now only valid for object adapter
1620   endpoints. It can no longer be used in proxy endpoints or object
1621   adapter published endpoints.
1623 - Ice now listens on INADDR_ANY for object adapter endpoints that do
1624   not contain a host name (or are set to use "-h *" or "-h 0.0.0.0").
1625   Previously, Ice would only listen on the local interfaces that were
1626   present when the adapter was created.
1628 - Accepting incoming connections can no longer block a thread from a
1629   server thread pool. This includes activities such as connection
1630   validation and SSL handshaking.
1632 - Changed servant locators so both locate() and finished() can throw
1633   user exceptions.
1635 - Improved Glacier2 to take advantage of the new non-blocking aspects
1636   of Ice. Glacier2 now uses the thread pool concurrency model and, in
1637   buffered mode, Glacier2 only uses a single thread to forward queued
1638   requests. As a result, Glacier2 now requires a fixed number of
1639   threads regardless of the number of connected clients.
1641 - Glacier2 filters are now disabled by default for IceGrid client
1642   and administrative sessions created with the IceGrid session
1643   managers. If you rely on these filters being enabled, you must now
1644   explicitly set the property IceGrid.Registry.SessionFilters or
1645   IceGrid.Registry.AdminSessionFilters.
1647 - The use of sequences (and structs containing sequences) as valid
1648   dictionary keys has been deprecated and will be removed in a future
1649   release.
1651 - slice2vb has been removed from the distribution and is no longer
1652   supported. To use Visual Basic .NET with Ice, use slice2cs to
1653   generate C# code from Slice definitions, and then use a C# compiler
1654   to create a DLL from the generated code. Then link against that DLL
1655   in your Visual Basic project.
1657 - Fixed a variety of bugs with slice2cpp where incorrect code
1658   would be generated when C++ reserved words are used as Slice
1659   identifiers.
1661 - If a class, interface, or exception has a base, slice2html now
1662   generates a hyperlink to the base. (Previously, only the name of the
1663   base was shown, without a hyperlink.)
1665 - slice2html now generates documentation for Slice constant
1666   definitions.
1668 - slice2html now generates the scoped name for the <h1> element of
1669   each page instead of the unqualified name. For example, it now shows
1670   "Ice::DNSException" instead of "DNSException".
1672 - The ability to install a logger via the Ice.LoggerPlugin property
1673   has been removed. The new mechanism requires that you create an
1674   instance of the Ice::LoggerPlugin class in your plug-in factory.
1675   Please see the manual for more details.
1677 - It is no longer possible to provide input files on the command line
1678   for icestormadmin or icegridadmin.
1680 - Freeze evictor update:
1682   - the existing evictor was renamed BackgroundSaveEvictor
1683   - added new TransactionalEvictor
1685 - Fixed a bug in FreezeScript that caused a failure when a script
1686   attempted to access the 'length' member of a string value.
1688 - Added support for string concatenation in FreezeScript using the
1689   '+' operator.
1691 - dumpdb output now goes to stdout.
1694 C++ Changes
1695 ===========
1697 - Fixed icepatch2server crash on exit bug.
1699 - Fixed race condition in IceUtil::Cache.
1701 - Changed the string methods in InputStream and OutputStream to accept
1702   an optional boolean argument. If true (the default), strings are
1703   processed by the string converter (if any) before marshaling or
1704   unmarshaling. If false, the string converter is bypassed. No source
1705   code changes are necessary for existing programs.
1707 - The new Ice::StringConverterPlugin class allows you to install a
1708   custom string converter and/or wstring converter during communicator
1709   initialization.
1711 - The Ice shared library now provides a string converter plug-in
1712   factory: createStringConverter. See the Ice manual for details.
1714 - IceUtil::stringToWstring and IceUtil::wstringToString now take
1715   a second argument of type ConversionFlags. It can be either
1716   strictConversion or lenientConversion. The default is
1717   lenientConversion for compatibility with previous releases. See
1718   the Ice manual for further details.
1720 - Added IceGrid secure demo to demonstrate how to setup a secure
1721   IceGrid deployment.
1723 - Fixed a Glacier2 assert that would occur if the configuration
1724   defined only the SSL permissions verifier.
1726 - The IceUtil::Timer destroy method no longer joins with the timer
1727   execution thread if it's called from a timer task. Instead, the
1728   thread is detached.
1730 - The IceUtil::Timer schedule and scheduleRepeated methods now throw
1731   IceUtil::IllegalArgumentException if the timer is destroyed.
1733 - Fixed potential Slice parser assert.
1735 - Added an HA IceStorm template to config/templates.xml.
1737 - Removed the index parameter from the IceStorm template.
1739 - It is now possible to manually configure the node proxies when
1740   using HA IceStorm in conjunction with IceGrid.
1742 - iceca and associated ImportKey.class are now copied into bin and lib
1743   respectively.
1745 - iceca did not correctly support the --verbose flag with the import
1746   command.
1748 - iceca request has been simplified. The command now takes the name of
1749   the file to generate, the common name, and an optional email
1750   address.
1752 - The iceca ImportKey.class utility is now installed in
1753   /usr/share/Ice-3.3.0 for an RPM install or ${prefix}/lib otherwise.
1755 - The following APIs were deprecated in Ice 3.1 and have been removed:
1757   Application::main(int, char*[], const char*, const Ice::LoggerPtr&)
1758   initializeWithLogger
1759   initializeWithProperties
1760   initializeWithPropertiesAndLogger
1761   stringToIdentity
1762   identityToString
1763   ObjectPrx::ice_hash
1764   ObjectPrx::ice_communicator
1765   ObjectPrx::ice_newIdentity
1766   ObjectPrx::ice_newContext
1767   ObjectPrx::ice_newFacet
1768   ObjectPrx::ice_newAdapterId
1769   ObjectPrx::ice_newEndpoints
1770   ObjectPrx::ice_collocationOptimization
1771   ObjectPrx::ice_connection
1773 - Added "public" keyword to the definition of IceSSL::PublicKey.
1775 - Fixed a bug in slice2freeze in which it was not properly handling
1776   the "cpp:type:wstring" metadata, which would result in narrow
1777   strings being used in generated code when wstring should have been
1778   used instead.
1780 - IceInternal::GCShared now derives from IceUtil::Shared. This now
1781   makes it possible to have a servant class derived from
1782   IceUtil::Thread (which, previously, was impossible).
1784 - The thread stack size specified with the IceUtil::Thread::start()
1785   method parameter is now adjusted to PTHREAD_STACK_MIN if it's
1786   inferior to it. On Mac OS X, it's also adjusted to the next closest
1787   multiple of the page size (4KB).
1789 - Added a new overloading of the Ice::createInputStream method:
1791   Ice::InputStreamPtr createInputStream(
1792       const CommunicatorPtr&,
1793       const pair< const Byte*, const Byte*>&);
1795 - Fixed a bug in the encoding of user exceptions with a class
1796   attribute and returned by AMD-dispatched invocations. An extra byte
1797   was encoded at the end. This fix doesn't affect on the wire
1798   compatibility with old Ice clients.
1800 - Added what() member to IceUtil::Exception, so a single catch handler
1801   can be used for Ice exceptions:
1803   try
1804   {
1805       // Call something that may throw an Ice exception
1806   }
1807   catch(const ::std::exception& ex)
1808   {
1809       cerr << ex.what() << endl; // Works for any ::std::exception,
1810                                  // including Ice exceptions
1811   }
1813   what() is implemented in terms of ice_print(), so overriding
1814   ice_print() also changes the string returned by what().
1817 Java Changes
1818 ============
1820 - Fixed the slice2java ant task to redirect stderr output so that
1821   messages from the preprocessor are not interpreted as dependencies.
1823 - Fixed the slice2java ant task to recompile all of the files in the
1824   file list if at least one of the files has changed and checksums are
1825   being generated.
1827 - Deprecated the class IceUtil.Version.
1829 - Added the methods stringVersion and intVersion to Ice.Util for
1830   obtaining the Ice version.
1832 - Fixed a NullPointerException thrown when allocating an InputStream
1833   with an empty buffer.
1835 - Fixed a NullPointerException thrown when calling startEncapsulation
1836   on an OutputStream.
1838 - The following APIs were deprecated in Ice 3.1 and have been removed:
1840   Application.main(String, String[], String, Logger)
1841   Util.initializeWithLogger
1842   Util.initializeWithProperties
1843   Util.initializeWithPropertiesAndLogger
1844   ObjectPrx.ice_hash
1845   ObjectPrx.ice_communicator
1846   ObjectPrx.ice_newIdentity
1847   ObjectPrx.ice_newContext
1848   ObjectPrx.ice_newFacet
1849   ObjectPrx.ice_newAdapterId
1850   ObjectPrx.ice_newEndpoints
1851   ObjectPrx.ice_collocationOptimization
1852   ObjectPrx.ice_connection
1854 - Ice for Java now supports the ICE_CONFIG environment variable.
1856 - The Java2 language mapping is now deprecated.
1858 - Added support for a password callback in IceSSL. Also added new
1859   properties for specifying the name of a password callback class or
1860   certificate verifier class.
1862 - LocalObject is now mapped to java.lang.Object; an out LocalObject
1863   parameter is still mapped to an Ice.LocalObjectHolder object.
1864   Ice.LocalObjectHolder now holds a java.lang.Object. The interface
1865   Ice.LocalObject and the abstract class Ice.LocalObjectImpl are now
1866   deprecated.
1868 - Ice.LocalException and Ice.UserException now implement
1869   java.lang.Cloneable.
1871 - Fixed the generated hashCode method to prevent NullPointerException.
1874 .NET Changes
1875 ============
1877 - Added the methods stringVersion and intVersion to Ice.Util for
1878   obtaining the Ice version.
1880 - Fixed a NullReferenceException thrown when allocating an InputStream
1881   with an empty buffer.
1883 - Fixed a NullReferenceException thrown when calling
1884   startEncapsulation on an OutputStream.
1886 - Changed Ice.Exception to derive from System.Exception rather than
1887   System.ApplicationException in accordance with Microsoft's
1888   recommendations for writing custom exceptions.
1890 - The following APIs were deprecated in Ice 3.1 and have been removed:
1892   Application.main(string, string[], string, Logger)
1893   Util.initializeWithLogger
1894   Util.initializeWithProperties
1895   Util.initializeWithPropertiesAndLogger
1896   ObjectPrx.ice_hash
1897   ObjectPrx.ice_communicator
1898   ObjectPrx.ice_newIdentity
1899   ObjectPrx.ice_newContext
1900   ObjectPrx.ice_newFacet
1901   ObjectPrx.ice_newAdapterId
1902   ObjectPrx.ice_newEndpoints
1903   ObjectPrx.ice_collocationOptimization
1904   ObjectPrx.ice_connection
1906 - The Ice.Application class now supports signal handling on Mono.
1908 - Added the build macro MANAGED, which can be enabled if you want to
1909   build a version of the Ice run time that uses only managed code.
1911 - Improved marshaling performance for Ice for .NET. This particularly
1912   affects programs running under Mono on big-endian machines, where
1913   marshaling performance of sequences improves by up to a factor of
1914   10. For little-endian machines (both Windows and Mono), marshaling
1915   performance is also improved.
1917 - Added ice_name() method to exceptions, in keeping with the C++
1918   and Java convention. The method returns the Slice type ID of
1919   exception, without a leading "::" qualifier.
1921 - Fixed a bug that caused a NullPointer exception for sequences
1922   of structs if the structs used the class mapping and the sequence
1923   contained null elements.
1925 - Fixed a bug that caused a NullPointer exception when marshaling
1926   a struct containing reference types if that was nested inside
1927   a data type, such as another exception or struct.
1929 - Added support for a password callback in IceSSL. Also added new
1930   properties for specifying the name of a password callback class or
1931   certificate verifier class. See manual for more details.
1933 - Fixed a bug in slice2cs that caused incorrect code to be generated
1934   for data members of classes and structures that used the
1935   ["clr:property"] metadata directive.
1937 - Fixed a bug in slice2cs that caused incorrect code to be generated
1938   for Slice exceptions with data members that had the same name as one
1939   of the data members of System.ApplicationException.
1941 - The metadata directive "cs:collection" is no longer valid.
1942   Use ["clr:collection"] instead.
1944 - Added a new mapping for Slice sequences to use C# 2.0
1945   generics:
1947   // Slice
1948   ["clr:generic:List"] sequence<int> S;
1950   maps to:
1952   // C#
1953   System.Collections.Generic.List<int> S;
1955   This also works for types other than List. Please see the manual for
1956   more details.
1958 - Added a new mapping for Slice dictionaries to use C# 2.0
1959   generics:
1961   // Slice
1962   dictionary<string, int> D;
1964   maps to:
1966   // C#
1967   System.Collections.Generic.Dictionary<string, int> D;
1969   The previous mapping to the .NET 1.1 DictionaryBase class is still
1970   supported with the "clr:collection" metadata directive.
1972 - LocalObject is now mapped to System.Object. The interface
1973   Ice.LocalObject and the abstract class Ice.LocalObjectImpl are now
1974   deprecated.
1976 - The Ice.Util.proxyIdentityCompare and proxyIdentityAndFacetCompare
1977   methods are now using string.CompareOrdinal to compare the identity
1978   category, name and the facet instead of string.Compare with the
1979   CultureInfo.InvariantCulture culture-specific information.
1981 - Ice.LocalException and Ice.UserException now implement
1982   System.ICloneable.
1984 - Ice for C# has been renamed Ice for .NET and the assemblies have
1985   been renamed as well. For example icecs.dll is now just Ice.dll.
1988 Python Changes
1989 ==============
1991 - Fixed a bug that occurred when converting an Ice.Identity object to
1992   a string via str(). In prior releases, this conversion used the
1993   global method Ice.identityToString, but that method is no longer
1994   supported. As a result, the output now resembles that of other
1995   user-defined types.
1997 - Added the methods Ice.stringVersion and Ice.intVersion.
1999 - Unicode objects are now accepted as arguments (or data members of
2000   arguments) to remote Slice operations. The local Ice API still uses
2001   8-bit strings.
2003 - Added new Ice/converter demo to illustrate how to use the new Ice
2004   for C++ string converter plug-in. This demo is very similar to the
2005   C++ demo.
2007 - Fixed a deadlock bug that could occur when a multithreaded client
2008   executes Slice operations that return abstract objects by value.
2010 - Removed "#!/usr/bin/env python" where unnecessary.
2012 - Added ice_staticId() method to generated Slice classes.
2014 - The following APIs were deprecated in Ice 3.1 and have been removed:
2016   initializeWithLogger
2017   initializeWithProperties
2018   initializeWithPropertiesAndLogger
2019   identityToString
2020   stringToIdentity
2021   ObjectPrx.ice_communicator
2022   ObjectPrx.ice_newIdentity
2023   ObjectPrx.ice_newContext
2024   ObjectPrx.ice_newFacet
2025   ObjectPrx.ice_newAdapterId
2026   ObjectPrx.ice_newEndpoints
2027   ObjectPrx.ice_connection
2029 - Fixed a bug where returning an AMD servant from a ServantLocator
2030   would cause a deadlock in the IcePy extension.
2032 - Added support for blobjects.
2034 - Fixed a code generation bug with slice2py where the proxy type
2035   for a Python reserved word would be incorrectly named. For example,
2036   interface def would generate a proxy class named _defPrx, not the
2037   correct class name defPrx.
2039 - LocalObject is now mapped to the Python base 'object' type. The
2040   class Ice.LocalObject is now deprecated.
2042 - Fixed a bug in Ice.initialize that would cause a crash if the
2043   configuration file specified by --Ice.Config was not found.
2046 Ruby Changes
2047 ============
2049 - Added the methods Ice::stringVersion and Ice::intVersion.
2051 - Removed "#!/usr/bin/env ruby" where unnecessary.
2053 - Added ice_staticId() method to generated Slice classes.
2055 - Fixed a code generation bug with slice2rb where the reserved words
2056   BEGIN and END would generate classes, modules and constants named
2057   _BEGIN, and _END which is illegal. They now generate BEGIN_ and
2058   END_.
2060 - Fixed a bug where marshaling a plain object proxy fails with an
2061   uninitialized constant exception.
2064 PHP Changes
2065 ===========
2067 - Constructors are now generated for Slice structure, exception, and
2068   class types. Constructor parameters supply default values for each
2069   data member.
2071 - A null value is now allowed where a sequence or dictionary value is
2072   expected.
2074 - Added the methods Ice_stringVersion and Ice_intVersion.
2076 - Removed the undocumented PHP constants ICE_STRING_VERSION and
2077   ICE_INT_VERSION.
2079 - LocalObject is now mapped to PHP's base object type. The interface
2080   Ice.LocalObject and the abstract class Ice.LocalObjectImpl are now
2081   deprecated.
2083 - Added support for an optional context argument to ice_checkedCast
2084   and ice_uncheckedCast.
2086 - Added the following proxy methods:
2088   ice_getRouter/ice_router
2089   ice_getLocator/ice_locator
2091 - Added the translator option "-w" to suppress warnings during Slice
2092   translation.