diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2015-04-07 10:36:45 -0230 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2015-04-07 10:36:45 -0230 |
commit | 28d881a380dfe3c1cb399b4eb27a195fe5bd7ea3 (patch) | |
tree | ebefe18e678cf7326d3cc12bd845abb71dfbcb96 | |
parent | Removed makegem and makepy scripts and associated support files. (diff) | |
download | ice-28d881a380dfe3c1cb399b4eb27a195fe5bd7ea3.tar.bz2 ice-28d881a380dfe3c1cb399b4eb27a195fe5bd7ea3.tar.xz ice-28d881a380dfe3c1cb399b4eb27a195fe5bd7ea3.zip |
ICE-6398 added more CHANGELOG files
-rw-r--r-- | CHANGELOG-3.3.md | 1052 | ||||
-rw-r--r-- | CHANGELOG-3.4.md | 1031 | ||||
-rw-r--r-- | CHANGELOG-3.5.md | 309 | ||||
-rw-r--r-- | CHANGELOG-3.6.md | 260 |
4 files changed, 2522 insertions, 130 deletions
diff --git a/CHANGELOG-3.3.md b/CHANGELOG-3.3.md new file mode 100644 index 00000000000..a788535a79a --- /dev/null +++ b/CHANGELOG-3.3.md @@ -0,0 +1,1052 @@ +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 as a guide for migrating your +applications to this release, and the manual for complete details on a +particular aspect of Ice. + +- [Changes in Ice 3.3.1](#changes-in-ice-331) + - [General Changes](#general-changes) + - [C++ Changes](#c-changes) + - [Java Changes](#java-changes) + - [C# Changes](#c#-changes) + - [Python Changes](#python-changes) + - [Ruby Changes](#ruby-changes) + - [PHP Changes](#php-changes) +- [Changes in Ice 3.3.0](#changes-in-ice-330) + - [General Changes](#general-changes-1) + - [C++ Changes](#c-changes-1) + - [Java Changes](#java-changes-1) + - [.NET Changes](#net-changes) + - [Python Changes](#python-changes-1) + - [Ruby Changes](#ruby-changes-1) + - [PHP Changes](#php-changes-1) + +# Changes in Ice 3.3.1 + +These are changes since Ice 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 in Ice 3.3.0 + +These are changes since Ice 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. diff --git a/CHANGELOG-3.4.md b/CHANGELOG-3.4.md new file mode 100644 index 00000000000..8a133fd8279 --- /dev/null +++ b/CHANGELOG-3.4.md @@ -0,0 +1,1031 @@ +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 as a guide for migrating your +applications to this release, and the manual for complete details on a +particular aspect of Ice. + +- [Changes in Ice 3.4.2](#changes-in-ice-342) + - [General Changes](#general-changes) + - [C++ Changes](#c-changes) + - [Java Changes](#java-changes) + - [C# Changes](#c#-changes) + - [Python Changes](#python-changes) + - [Ruby Changes](#ruby-changes) + - [PHP Changes](#php-changes) + - [Visual Studio Add-in Changes](#visual-studio-add-in-changes) +- [Changes in 3.4.1](#changes-in-341) + - [General Changes](#general-changes-1) + - [C++ Changes](#c-changes-1) + - [Java Changes](#java-changes-1) + - [C# Changes](#c#-changes-1) + - [Python Changes](#python-changes-1) +- [Changes for 3.4.0](#changes-for-340) + - [General Changes](#general-changes-2) + - [C++ Changes](#c-changes-2) + - [Java Changes](#java-changes-2) + - [C# Changes](#c#-changes-2) + - [Python Changes](#python-changes-2) + - [Ruby Changes](#ruby-changes-1) + - [PHP Changes](#php-changes-1) + - [Visual Studio Plugin Changes](#visual-studio-plugin-changes) + +# Changes in Ice 3.4.2 + +These are changes since Ice 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: + + ``` + const int MIN = 1; + + struct Info + { + int size = MIN; + }; + ``` + + It is also possible for a constant to refer to another constant: + + ``` + 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`, and `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 in 3.4.1 + +These are changes since Ice 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 in 3.4.0 + +These are changes since Ice 3.3.1. + +## General Changes + +- Added ability to define default values for Slice data members. For + example, you can write: + + ``` + 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. + +- 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 + +- Renamed the `createIceStringConverter` function back to + `createStringConverter` for compatibility with previous releases. + +- 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 + +- 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. + +- 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 + +- Fixed a compilation error when using Ruby 1.8.7 (patch level >= + 248). + +- 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 Add-in 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`. diff --git a/CHANGELOG-3.5.md b/CHANGELOG-3.5.md new file mode 100644 index 00000000000..17819a76aeb --- /dev/null +++ b/CHANGELOG-3.5.md @@ -0,0 +1,309 @@ +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 as a guide for migrating your applications to this release, and the manual for complete details on a particular aspect of Ice. + +- [Changes in Ice 3.5.1](#changes-in-ice-351) + - [General Changes](#general-changes) + - [C++ Changes](#c-changes) + - [Java Changes](#java-changes) + - [C# Changes](#c#-changes) + - [PHP Changes](#php-changes) +- [Changes in Ice 3.5.0](#changes-in-ice-350) + - [General Changes](#general-changes-1) + - [C++ Changes](#c-changes-1) + - [Java Changes](#java-changes-1) + - [C# Changes](#c#-changes-1) + - [Python Changes](#python-changes) + - [PHP Changes](#php-changes-1) + - [Ruby Changes](#ruby-changes) + - [Visual Studio Add-in Changes](#visual-studio-add-in-changes) + +# Changes in Ice 3.5.1 + +These are changes since Ice 3.5.0. + +## General Changes + +- Moved instructions for building a source distribution to the Ice manual. + +- 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 in Ice 3.5.0 + +These are the changes since Ice 3.4.2. + +## 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. + +- 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 an 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 + +- `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. + +- 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. + +## 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. + +- 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. + +## 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. + +## 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. + +- 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 + +- SLES 11 RPMs now require PHP 5.3. + +- 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. + +## 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. diff --git a/CHANGELOG-3.6.md b/CHANGELOG-3.6.md index ddab2778eec..2714858249e 100644 --- a/CHANGELOG-3.6.md +++ b/CHANGELOG-3.6.md @@ -1,3 +1,7 @@ +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 as a guide for migrating your applications to this release, and the manual for complete details on a particular aspect of Ice. + - [Changes in Ice 3.6.0](#changes-in-ice-360) - [General Changes](#general-changes) - [C++ Changes](#c-changes) @@ -18,51 +22,47 @@ - [PHP Changes](#php-changes-1) - [JavaScript Changes](#javascript-changes-1) -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 as a guide for migrating your applications to this release, and the manual for complete details on a particular aspect of Ice. - # Changes in Ice 3.6.0 These are changes since Ice 3.6 beta. ## General Changes -* The Ice distribution now supports the Objective-C mapping on OS X. +- The Ice distribution now supports the Objective-C mapping on OS X. -* The Glacier2 `SessionHelper` class now creates the callback object adapter automatically unless the application calls `SessionFactoryHelper.setUseCallbacks(false)`. +- The Glacier2 `SessionHelper` class now creates the callback object adapter automatically unless the application calls `SessionFactoryHelper.setUseCallbacks(false)`. -* The IceGridDiscovery plug-in has been renamed. It's now named IceLocatorDiscovery and it can be used to discover locator implementations in general, not just the IceGrid locator implementations. IceGridDiscovery properties now use the IceLocatorDiscovery prefix. The plug-in entry points have changed as follows: +- The IceGridDiscovery plug-in has been renamed. It's now named IceLocatorDiscovery and it can be used to discover locator implementations in general, not just the IceGrid locator implementations. IceGridDiscovery properties now use the IceLocatorDiscovery prefix. The plug-in entry points have changed as follows: - * C++: `IceLocatorDiscovery:createIceLocatorDiscovery` + - C++: `IceLocatorDiscovery:createIceLocatorDiscovery` - * Java and .NET: `IceLocatorDiscovery:IceLocatorDiscovery.PluginFactory` + - Java and .NET: `IceLocatorDiscovery:IceLocatorDiscovery.PluginFactory` -* Added support for headers attribute to the `Ice::WSConnectionInfo` class. This attribute gives access to the HTTP headers provided on WS connection establishment. +- Added support for headers attribute to the `Ice::WSConnectionInfo` class. This attribute gives access to the HTTP headers provided on WS connection establishment. -* Significantly changed the behavior of batch requests: +- Significantly changed the behavior of batch requests: - * Invocations on batch fixed proxies are still queued with the Ice connection object as in previous releases. + - Invocations on batch fixed proxies are still queued with the Ice connection object as in previous releases. - * Invocations on batch direct or indirect proxies are now queued directly with the proxy object. + - Invocations on batch direct or indirect proxies are now queued directly with the proxy object. - * As a result, calling `flushBatchRequests` on the Ice communicator or connection will no longer flush batch requests queued with proxies. + - As a result, calling `flushBatchRequests` on the Ice communicator or connection will no longer flush batch requests queued with proxies. - * You should instead call `flushBatchRequests` on the proxy to flush its batch request queue. The flushing of those batch requests is handled like a regular one-way request (the Ice run time will for instance retry the sending if the connection fails). + - You should instead call `flushBatchRequests` on the proxy to flush its batch request queue. The flushing of those batch requests is handled like a regular one-way request (the Ice run time will for instance retry the sending if the connection fails). -* Added support for batch request interceptors (C++, Java, C#, Python, Objective-C). You can assign a batch request interceptor on communicator initialization using the Ice `InitializationData` structure. See the Ice manual for more information on batch request interceptors. +- Added support for batch request interceptors (C++, Java, C#, Python, Objective-C). You can assign a batch request interceptor on communicator initialization using the Ice `InitializationData` structure. See the Ice manual for more information on batch request interceptors. ## C++ Changes -* IceStorm is now faster when creating persistent topics and subscribers. +- IceStorm is now faster when creating persistent topics and subscribers. ## Java Changes -* Passing null for a Slice structure or enumerator is now tolerated. Ice marshals an empty structure or the first enumerator value. +- Passing null for a Slice structure or enumerator is now tolerated. Ice marshals an empty structure or the first enumerator value. -* The default constructor for a Slice structure, exception or class now initializes string, structure or enumerator data members. A string data member is initialized to the empty string, a structure data member is initialized with a new default-constructed structure, and an enumerator is initialized with the first enumerator value. +- The default constructor for a Slice structure, exception or class now initializes string, structure or enumerator data members. A string data member is initialized to the empty string, a structure data member is initialized with a new default-constructed structure, and an enumerator is initialized with the first enumerator value. -* The `clone` method provided by Java classes generated from Slice definitions is now returning the generated class, instead of `java.lang.Object`. For example, the Ice.Identity class generated from the `Ice::Identity` Slice struct contains: +- The `clone` method provided by Java classes generated from Slice definitions is now returning the generated class, instead of `java.lang.Object`. For example, the Ice.Identity class generated from the `Ice::Identity` Slice struct contains: ``` // Prior to Ice 3.6 public java.lang.Object clone() { ... } @@ -74,39 +74,39 @@ public Identity clone() { ... } ## C# Changes -* The default constructor for a Slice structure, exception or class now initializes string, structure or enumerator data members. A string data member is initialized to the empty string, a structure data member is initialized with a new default-constructed structure, and an enumerator is initialized with the first enumerator value. +- The default constructor for a Slice structure, exception or class now initializes string, structure or enumerator data members. A string data member is initialized to the empty string, a structure data member is initialized with a new default-constructed structure, and an enumerator is initialized with the first enumerator value. ## Python Changes -* Passing None for a Slice structure is now tolerated, an empty structure will be marshaled. +- Passing None for a Slice structure is now tolerated, an empty structure will be marshaled. ## Ruby Changes -* Passing null for a Slice structure is now tolerated, an empty structure will be marshaled. +- Passing null for a Slice structure is now tolerated, an empty structure will be marshaled. ## JavaScript Changes -* Passing null for a Slice structure or enumerator is now tolerated. Ice marshals an empty structure or the first enumerator value. +- Passing null for a Slice structure or enumerator is now tolerated. Ice marshals an empty structure or the first enumerator value. -* The default constructor for a Slice structure, exception or class now initializes string, structure or enumerator data members. A string data member is initialized to the empty string, a structure data member is initialized with a new default-constructed structure, and an enumerator is initialized with the first enumerator value. +- The default constructor for a Slice structure, exception or class now initializes string, structure or enumerator data members. A string data member is initialized to the empty string, a structure data member is initialized with a new default-constructed structure, and an enumerator is initialized with the first enumerator value. ## PHP Changes -* Passing null for a Slice structure is now tolerated, an empty structure will be marshaled. +- Passing null for a Slice structure is now tolerated, an empty structure will be marshaled. ## Objective-C Changes -* The Objective-C headers are now installed under the `include/objc` directory. You will need to change the `#import` in your code to import `objc/Ice.h` where you were previously importing `Ice/Ice.h`. You will need to make similar changes as well if you include headers for Ice services: `IceStorm/IceStorm.h`, `IceGrid/IceGrid.h`, `Glacier2/Glacier2.h` should be changed to `objc/IceStorm.h`, `objc/IceGrid.h`, `objc/Glacier2.h` respectively. +- The Objective-C headers are now installed under the `include/objc` directory. You will need to change the `#import` in your code to import `objc/Ice.h` where you were previously importing `Ice/Ice.h`. You will need to make similar changes as well if you include headers for Ice services: `IceStorm/IceStorm.h`, `IceGrid/IceGrid.h`, `Glacier2/Glacier2.h` should be changed to `objc/IceStorm.h`, `objc/IceGrid.h`, `objc/Glacier2.h` respectively. -* The IceSSL types are no longer included with the `IceObjC` library. You should now import `objc/IceSSL.h` in your source code and link with the `IceSSLObjC` library if you need to use IceSSL types (`ICESSLEndpointInfo` and `IceSSLConnectionInfo`). +- The IceSSL types are no longer included with the `IceObjC` library. You should now import `objc/IceSSL.h` in your source code and link with the `IceSSLObjC` library if you need to use IceSSL types (`ICESSLEndpointInfo` and `IceSSLConnectionInfo`). -* The Ice run time local interfaces (such as `ICECommunicator`, `ICEObjectAdapter`, etc) are now generated from the Slice definitions. +- The Ice run time local interfaces (such as `ICECommunicator`, `ICEObjectAdapter`, etc) are now generated from the Slice definitions. -* Added support for the `[objc:param:ID]` metadata to allow changing the generated identifier for the parameter in the generated interface selector for a Slice operation. For example, the Slice operation `"void op(int a, ["objc:param:withB"] int b)"` will be generated as the selector `"op:(int)a withB:(int)b"`. +- Added support for the `[objc:param:ID]` metadata to allow changing the generated identifier for the parameter in the generated interface selector for a Slice operation. For example, the Slice operation `"void op(int a, ["objc:param:withB"] int b)"` will be generated as the selector `"op:(int)a withB:(int)b"`. -* Added support for Servant Locators. +- Added support for Servant Locators. -* The default constructor for a Slice structure, exception or class now initializes string, structure or enumerator data members. A string data member is initialized to the empty string, a structure data member is initialized with a new default-constructed structure, and an enumerator is initialized with the first enumerator value. +- The default constructor for a Slice structure, exception or class now initializes string, structure or enumerator data members. A string data member is initialized to the empty string, a structure data member is initialized with a new default-constructed structure, and an enumerator is initialized with the first enumerator value. # Changes in Ice 3.6 beta @@ -114,104 +114,104 @@ These are the changes since Ice 3.5.1. ## General Changes -* IPv6 is now disabled by default if the operating system doesn't support the creation of IPv6 sockets. +- IPv6 is now disabled by default if the operating system doesn't support the creation of IPv6 sockets. -* Added new `Ice.BatchAutoFlushSize` property to allow controlling how much data (in kilobytes) is queued for batching before the batch is sent over the connection. Previously, this was controlled by the `Ice.MessageSizeMax` property. The `Ice.BatchAutoFlush` property has also been deprecated. To disable auto flush you can set `Ice.BatchAutoFlushSize=0`. The default value is 1024. +- Added new `Ice.BatchAutoFlushSize` property to allow controlling how much data (in kilobytes) is queued for batching before the batch is sent over the connection. Previously, this was controlled by the `Ice.MessageSizeMax` property. The `Ice.BatchAutoFlush` property has also been deprecated. To disable auto flush you can set `Ice.BatchAutoFlushSize=0`. The default value is 1024. -* We have relaxed the semantics of `Ice.MessageSizeMax`. The check for the maximum message size is now only performed on the receiver side. If the size of the message is greater than the limit, Ice raises `Ice::MemoryLimitException` and closes the connection. Previously, it was also used to limit the amount of data sent to a peer (either for a request or reply). This is no longer the case. A null or negative value now also disables the check and allows an unlimited amount of data to be received. This should only be used in a trusted environment. Finally, support for the `objectAdapter.MessageSizeMax` property was added to allow setting this limit on specific object adapters. +- We have relaxed the semantics of `Ice.MessageSizeMax`. The check for the maximum message size is now only performed on the receiver side. If the size of the message is greater than the limit, Ice raises `Ice::MemoryLimitException` and closes the connection. Previously, it was also used to limit the amount of data sent to a peer (either for a request or reply). This is no longer the case. A null or negative value now also disables the check and allows an unlimited amount of data to be received. This should only be used in a trusted environment. Finally, support for the `objectAdapter.MessageSizeMax` property was added to allow setting this limit on specific object adapters. -* The Ice run time now raises `Ice::IllegalServantException` if a null servant is provided to a method that requires a non-null servant (such as the `Ice::ObjectAdapter::add` methods or the Freeze evictor add methods). +- The Ice run time now raises `Ice::IllegalServantException` if a null servant is provided to a method that requires a non-null servant (such as the `Ice::ObjectAdapter::add` methods or the Freeze evictor add methods). -* It's now possible to specify an IPv6 address for the UDP `--interface` local option; previously it only accepted an interface name or index. +- It's now possible to specify an IPv6 address for the UDP `--interface` local option; previously it only accepted an interface name or index. -* Ice now guarantees that invocations made on different proxy objects will be serialized if the proxies are equal and if connection caching is enabled. Previously, invocations could be sent out of order if the connection wasn't established. +- Ice now guarantees that invocations made on different proxy objects will be serialized if the proxies are equal and if connection caching is enabled. Previously, invocations could be sent out of order if the connection wasn't established. -* IceGrid now permits removing or moving servers when saving an application "without restart" (to ensure the update doesn't cause any server shutdown). The servers to be removed or moved must be stopped or the saving will fail. Previously, IceGrid prevented the saving of the application even if the servers were stopped. +- IceGrid now permits removing or moving servers when saving an application "without restart" (to ensure the update doesn't cause any server shutdown). The servers to be removed or moved must be stopped or the saving will fail. Previously, IceGrid prevented the saving of the application even if the servers were stopped. -* It's now possible to pass indirect proxies to the setObservers method of the `IceGrid::AdminSession` interface. Previously, the IceGrid registry would fail to resolve the endpoints and the observer updates weren't sent. +- It's now possible to pass indirect proxies to the setObservers method of the `IceGrid::AdminSession` interface. Previously, the IceGrid registry would fail to resolve the endpoints and the observer updates weren't sent. -* The IceGrid implementation of `Ice::Locator::getRegistry` now returns a replicated proxy if IceGrid replication is used. This way, if an IceGrid replica becomes unavailable during a server's activation, the server will still be able to register its endpoints with one of the other replicas. +- The IceGrid implementation of `Ice::Locator::getRegistry` now returns a replicated proxy if IceGrid replication is used. This way, if an IceGrid replica becomes unavailable during a server's activation, the server will still be able to register its endpoints with one of the other replicas. -* Added a `cancel()` method to `AsyncResult`. Calling it prevents a queued asynchronous request from being sent, or ignores the reply if the request has already been sent. It does not cancel the request in the server. Canceled requests throw `Ice::InvocationCanceledException`. +- Added a `cancel()` method to `AsyncResult`. Calling it prevents a queued asynchronous request from being sent, or ignores the reply if the request has already been sent. It does not cancel the request in the server. Canceled requests throw `Ice::InvocationCanceledException`. -* Removed the "old" asynchronous invocation API that was deprecated in Ice 3.4. +- Removed the "old" asynchronous invocation API that was deprecated in Ice 3.4. -* Removed the following deprecated Slice operations: +- Removed the following deprecated Slice operations: `Ice::Router::addProxy` `IceGrid::Admin::writeMessage` `IceStorm::Topic::subscribe` -* Added the WebSocket transports to the Ice core, including new implementations in Java and C#. This means it's no longer necessary to use Glacier2 as an intermediary when a JavaScript client needs to communicate with a Java or C# server. +- Added the WebSocket transports to the Ice core, including new implementations in Java and C#. This means it's no longer necessary to use Glacier2 as an intermediary when a JavaScript client needs to communicate with a Java or C# server. -* Added a "Logger" facet to the admin object, which allows remote applications to attach `RemoteLogger` objects and receive log messages. Both the `icegridadmin` command-line utility and `IceGrid Admin GUI` use this new facet to retrieve the logs of Ice servers, IceBox services, IceGrid nodes and IceGrid registries. +- Added a "Logger" facet to the admin object, which allows remote applications to attach `RemoteLogger` objects and receive log messages. Both the `icegridadmin` command-line utility and `IceGrid Admin GUI` use this new facet to retrieve the logs of Ice servers, IceBox services, IceGrid nodes and IceGrid registries. -* Added `getNodeAdmin and `getRegistryAdmin` operations to the `IceGrid::Admin` interface. They return the admin object of a given IceGrid registry or node. +- Added `getNodeAdmin and `getRegistryAdmin` operations to the `IceGrid::Admin` interface. They return the admin object of a given IceGrid registry or node. -* Added new `getPrefix` operation to `Ice::Logger`; it returns the prefix of the logger. +- Added new `getPrefix` operation to `Ice::Logger`; it returns the prefix of the logger. -* The admin object can now be hosted in an application-supplied object adapter using the new property `Ice.Admin.Enabled` and the new operation `Ice::Communicator::createAdmin`. +- The admin object can now be hosted in an application-supplied object adapter using the new property `Ice.Admin.Enabled` and the new operation `Ice::Communicator::createAdmin`. -* Added methods to proxies to asynchronously get the connection associated with the proxy. The current synchronous methods can block as they may cause the connection to be established. +- Added methods to proxies to asynchronously get the connection associated with the proxy. The current synchronous methods can block as they may cause the connection to be established. -* Added support for HTTP proxies to the Ice core in C++, C# and Java. This allows outgoing TCP & SSL connections to be mediated by an HTTP network proxy service that supports HTTP CONNECT tunneling. The new properties `Ice.HTTPProxyHost` and `Ice.HTTPProxyPort` provide addressing information for the proxy. +- Added support for HTTP proxies to the Ice core in C++, C# and Java. This allows outgoing TCP & SSL connections to be mediated by an HTTP network proxy service that supports HTTP CONNECT tunneling. The new properties `Ice.HTTPProxyHost` and `Ice.HTTPProxyPort` provide addressing information for the proxy. -* Added `IceStorm::InvalidSubscriber` exception which is thrown by the `subscribe/unsubscribe` operations when an invalid subscriber (such as a null proxy) is passed. IceStorm would previously either abort (if built in debug mode) or throw an `Ice::UnknownLocalException` if such a subscriber proxy was provided. +- Added `IceStorm::InvalidSubscriber` exception which is thrown by the `subscribe/unsubscribe` operations when an invalid subscriber (such as a null proxy) is passed. IceStorm would previously either abort (if built in debug mode) or throw an `Ice::UnknownLocalException` if such a subscriber proxy was provided. -* Added `Ice.Default.SourceAddress` property and `--sourceAddress` endpoint setting to control the interface used for an outgoing connection. The configured source address can be retrieved with the `sourceAddress` member of the `Ice::IPEndpointInfo` class. +- Added `Ice.Default.SourceAddress` property and `--sourceAddress` endpoint setting to control the interface used for an outgoing connection. The configured source address can be retrieved with the `sourceAddress` member of the `Ice::IPEndpointInfo` class. -* The signatures of `Ice::OutputStream startSize()` and `endSize()` have been modified. It is now necessary for the caller of `startSize()` to save the returned position and pass it into `endSize()`. +- The signatures of `Ice::OutputStream startSize()` and `endSize()` have been modified. It is now necessary for the caller of `startSize()` to save the returned position and pass it into `endSize()`. -* Added `IceStormAdmin.Host` and `IceStormAdmin.Port` properties. You can set these properties to connect to an IceStorm instance running on a given host and port. +- Added `IceStormAdmin.Host` and `IceStormAdmin.Port` properties. You can set these properties to connect to an IceStorm instance running on a given host and port. -* Added IceStorm finder interface (defined in `IceStorm/IceStorm.ice`) to enable clients to easily find the proxy of the topic manager with just the endpoint information of the IceStorm service. The client doesn't need to know the instance name. IceStorm provides an Ice object with the identity `IceStorm/Finder` that implements this interface. +- Added IceStorm finder interface (defined in `IceStorm/IceStorm.ice`) to enable clients to easily find the proxy of the topic manager with just the endpoint information of the IceStorm service. The client doesn't need to know the instance name. IceStorm provides an Ice object with the identity `IceStorm/Finder` that implements this interface. -* Added support for IceGridDiscovery to the IceGrid administrative utilities. Also added `IceGridAdmin.Host` and `IceGridAdmin.Port` properties; you can set these properties to connect to an IceGrid registry running on a given host and port. +- Added support for IceGridDiscovery to the IceGrid administrative utilities. Also added `IceGridAdmin.Host` and `IceGridAdmin.Port` properties; you can set these properties to connect to an IceGrid registry running on a given host and port. -* Added "finder" interfaces for locators and routers to enable clients to easily find proxies for the locator or router (defined in `Ice/Locator.ice` and `Ice/Router.ice`). Glacier2 and IceGrid implement these interfaces and provide finder Ice objects with the identities `Ice/RouterFinder` and `Ice/LocatorFinder`, respectively. Clients can use these objects to connect to Glacier2 and IceGrid using only the endpoint information; they don't need to know the instance name of the Glacier2 or IceGrid service. +- Added "finder" interfaces for locators and routers to enable clients to easily find proxies for the locator or router (defined in `Ice/Locator.ice` and `Ice/Router.ice`). Glacier2 and IceGrid implement these interfaces and provide finder Ice objects with the identities `Ice/RouterFinder` and `Ice/LocatorFinder`, respectively. Clients can use these objects to connect to Glacier2 and IceGrid using only the endpoint information; they don't need to know the instance name of the Glacier2 or IceGrid service. -* Added IceGrid discovery plug-in, which enables Ice applications to discover IceGrid registries running on the network using UDP multicast. +- Added IceGrid discovery plug-in, which enables Ice applications to discover IceGrid registries running on the network using UDP multicast. -* Ice metrics now support collocation optimization. The `Ice::Instrumentation::CollocatedObserver` local interface and the `IceMX::CollocatedMetrics` class have been added to monitor collocated requests. +- Ice metrics now support collocation optimization. The `Ice::Instrumentation::CollocatedObserver` local interface and the `IceMX::CollocatedMetrics` class have been added to monitor collocated requests. -* Collocation optimization has been significantly improved to remove limitations. It now works with AMI, AMD, blobjects and batching. Collocated requests are now always marshaled and unmarshaled but they don't go through any transport. The `Ice::CollocationOptimizationException` is no longer used and as a result is now deprecated. +- Collocation optimization has been significantly improved to remove limitations. It now works with AMI, AMD, blobjects and batching. Collocated requests are now always marshaled and unmarshaled but they don't go through any transport. The `Ice::CollocationOptimizationException` is no longer used and as a result is now deprecated. -* Fixed a bug where retries might fail if the request failed right after connection establishment. +- Fixed a bug where retries might fail if the request failed right after connection establishment. -* Added callbacks for connection closure and heartbeats. The callback is invoked when the connection is closed or when a heartbeat is received. Callbacks are installed on the connection with the `Ice::Connection::setCallback` method and implement the `Ice::ConnectionCallback` interface. +- Added callbacks for connection closure and heartbeats. The callback is invoked when the connection is closed or when a heartbeat is received. Callbacks are installed on the connection with the `Ice::Connection::setCallback` method and implement the `Ice::ConnectionCallback` interface. -* Active connection management improvements: +- Active connection management improvements: - * Active connection management now supports sending heartbeats over the Ice connection. Depending on the configuration, heartbeats are sent when there are long invocations in progress, when the connection is idle, or at regular time intervals. + - Active connection management now supports sending heartbeats over the Ice connection. Depending on the configuration, heartbeats are sent when there are long invocations in progress, when the connection is idle, or at regular time intervals. - * Connection closure by active connection management can be configured to close connections under certain conditions. For example, a connection can be closed gracefully or forcefully if it's idle for the specified timeout period. + - Connection closure by active connection management can be configured to close connections under certain conditions. For example, a connection can be closed gracefully or forcefully if it's idle for the specified timeout period. - * The ACM properties to configure the ACM timeout have been deprecated. You should now use the `prefix.Timeout` property where prefix can be `Ice.ACM`, `Ice.ACM.Client`, `Ice.ACM.Server` or `objectAdapter.ACM`. + - The ACM properties to configure the ACM timeout have been deprecated. You should now use the `prefix.Timeout` property where prefix can be `Ice.ACM`, `Ice.ACM.Client`, `Ice.ACM.Server` or `objectAdapter.ACM`. -* IceGrid and Glacier2 now support the new ACM mechanism to keep sessions alive. The `Glacier2::Router` and `IceGrid::Registry` interfaces support a new `getACMTimeout` operation. To keep the connection alive the client should configure its connection to always send heartbeats using the timeout returned by `getACMTimeout`. A client can also install a connection callback to be notified when the connection is unexpectedly closed. +- IceGrid and Glacier2 now support the new ACM mechanism to keep sessions alive. The `Glacier2::Router` and `IceGrid::Registry` interfaces support a new `getACMTimeout` operation. To keep the connection alive the client should configure its connection to always send heartbeats using the timeout returned by `getACMTimeout`. A client can also install a connection callback to be notified when the connection is unexpectedly closed. -* Added support for invocation timeouts. Invocation timeouts can be set on a per-proxy basis with the `ice_invocationTimeout` proxy method. By default, there's no invocation timeout meaning that an invocation will never timeout if the connection between the client and server is alive. An invocation timeout does not cause a connection to be closed. If the timeout is triggered the invocation will raise `Ice::InvocationTimeoutException`. +- Added support for invocation timeouts. Invocation timeouts can be set on a per-proxy basis with the `ice_invocationTimeout` proxy method. By default, there's no invocation timeout meaning that an invocation will never timeout if the connection between the client and server is alive. An invocation timeout does not cause a connection to be closed. If the timeout is triggered the invocation will raise `Ice::InvocationTimeoutException`. -* With the addition of invocation timeouts, the existing connection timeout mechanism no longer applies to invocations. Connection timeouts are now enabled by default using the new property `Ice.Default.Timeout`, which specifies the timeout for stringified proxy endpoints that do not have a timeout explicitly set. The default setting for the property is 60 seconds. It is also now possible to set an infinite timeout using `-t infinite` in the endpoint configuration. +- With the addition of invocation timeouts, the existing connection timeout mechanism no longer applies to invocations. Connection timeouts are now enabled by default using the new property `Ice.Default.Timeout`, which specifies the timeout for stringified proxy endpoints that do not have a timeout explicitly set. The default setting for the property is 60 seconds. It is also now possible to set an infinite timeout using `-t infinite` in the endpoint configuration. -* Added IceDiscovery plug-in, which provides a UDP multicast-based Ice locator implementation. This can be used as an alternative to IceGrid when running few clients and servers on the same network and if you don't want to deploy a central service such as IceGrid. +- Added IceDiscovery plug-in, which provides a UDP multicast-based Ice locator implementation. This can be used as an alternative to IceGrid when running few clients and servers on the same network and if you don't want to deploy a central service such as IceGrid. -* Added support for IceGrid custom load balancing with the addition of replica group and type filters. These filters allow you to select the set of replicas that are sent back to the client when it resolves replica group endpoints. It's also possible to filter the objects returned to the client when it uses the `IceGrid::Query` interface. +- Added support for IceGrid custom load balancing with the addition of replica group and type filters. These filters allow you to select the set of replicas that are sent back to the client when it resolves replica group endpoints. It's also possible to filter the objects returned to the client when it uses the `IceGrid::Query` interface. -* This addition requires the upgrade of IceGrid registry databases if you deployed replica groups for your IceGrid applications. See the release notes for information on how to upgrade your IceGrid databases. +- This addition requires the upgrade of IceGrid registry databases if you deployed replica groups for your IceGrid applications. See the release notes for information on how to upgrade your IceGrid databases. -* Fixed a marshaling bug where the marshaling of a type with nested optionals of variable size could trigger an assertion. +- Fixed a marshaling bug where the marshaling of a type with nested optionals of variable size could trigger an assertion. -* Fixed an IceGrid registry replication bug where database synchronization could fail on startup or connection establishment with the master if multiple applications referred to a replica group defined in another application that wasn't yet added. +- Fixed an IceGrid registry replication bug where database synchronization could fail on startup or connection establishment with the master if multiple applications referred to a replica group defined in another application that wasn't yet added. -* FreezeScript can now transform classes to structures and structures to classes. It also supports the use of compact type IDs for classes. +- FreezeScript can now transform classes to structures and structures to classes. It also supports the use of compact type IDs for classes. -* The `CryptPasswords` file support for Glacier2 and IceGrid is now implemented in a separate C++ plug-in, the `Glacier2CryptPermissionsVerifier` plug-in. On Windows, this plug-in is the only remaining Ice run time dependency on OpenSSL. +- The `CryptPasswords` file support for Glacier2 and IceGrid is now implemented in a separate C++ plug-in, the `Glacier2CryptPermissionsVerifier` plug-in. On Windows, this plug-in is the only remaining Ice run time dependency on OpenSSL. -* Removed the `Ice::Stats` interface, which was deprecated in Ice 3.5 and replaced by the new metrics facility. +- Removed the `Ice::Stats` interface, which was deprecated in Ice 3.5 and replaced by the new metrics facility. -* The `IceBox.ServiceManager` object adapter has been deprecated. Use `Ice.Admin` and the `IceBox.ServiceManager` facet instead. +- The `IceBox.ServiceManager` object adapter has been deprecated. Use `Ice.Admin` and the `IceBox.ServiceManager` facet instead. -* Removed the following deprecated properties: +- Removed the following deprecated properties: `Glacier2.AddSSLContext` `IcePatch2.ChunkSize` `IcePatch2.Directory` @@ -220,28 +220,28 @@ These are the changes since Ice 3.5.1. ## C++ Changes -* Ice for C++ now supports the GCC and clang symbol visibility options: we build by default with `-fvisibility=hidden` and we define `ICE_DECLSPEC_EXPORT` and `ICE_DECLSPEC_IMPORT` for these compilers. +- Ice for C++ now supports the GCC and clang symbol visibility options: we build by default with `-fvisibility=hidden` and we define `ICE_DECLSPEC_EXPORT` and `ICE_DECLSPEC_IMPORT` for these compilers. -* Refactored the capture and printing of exception stack traces to be more efficient when the stack traces are not printed. The signature of `IceUtil::Exception::ice_stackTrace` changed to: +- Refactored the capture and printing of exception stack traces to be more efficient when the stack traces are not printed. The signature of `IceUtil::Exception::ice_stackTrace` changed to: `std::string ice_stackTrace() const;` -* Fixed a bug where a private Windows Runtime delegate type could be published in Windows Store Components metadata files (WINMD). +- Fixed a bug where a private Windows Runtime delegate type could be published in Windows Store Components metadata files (WINMD). -* New garbage collection support for object graphs with cycles. Ice no longer uses a background thread to collect objects. Instead, `Ice::Object` now has a new `ice_collectable` method to indicate whether or not the object graph can be collected. When a graph is marked as collectable with this method, you shouldn't update the structure of the object graph. Ice tries to collect the graph each time a reference count is dropped for an object in the cycle. By default, object collection is turned off. When it's turned on with `Ice.CollectObjects=1`, the Ice run time calls `ice_collectable(true)` on all the objects it unmarshals. The properties `Ice.GC.Interval` and `Ice.Trace.GC` are no longer supported, nor is the `Ice::collectGarbage()` function. +- New garbage collection support for object graphs with cycles. Ice no longer uses a background thread to collect objects. Instead, `Ice::Object` now has a new `ice_collectable` method to indicate whether or not the object graph can be collected. When a graph is marked as collectable with this method, you shouldn't update the structure of the object graph. Ice tries to collect the graph each time a reference count is dropped for an object in the cycle. By default, object collection is turned off. When it's turned on with `Ice.CollectObjects=1`, the Ice run time calls `ice_collectable(true)` on all the objects it unmarshals. The properties `Ice.GC.Interval` and `Ice.Trace.GC` are no longer supported, nor is the `Ice::collectGarbage()` function. -* Significant changes to the IceSSL plug-in: +- Significant changes to the IceSSL plug-in: - * Now uses the native SecureTransport API on OS X - * Now uses the native SChannel API on Windows - * OpenSSL is only used in IceSSL on Linux. + - Now uses the native SecureTransport API on OS X + - Now uses the native SChannel API on Windows + - OpenSSL is only used in IceSSL on Linux. -* Added support for the `IceSSL.FindCert` property on Windows and OS X. +- Added support for the `IceSSL.FindCert` property on Windows and OS X. -* Added the new metadata tag `cpp:view-type:Type`, where `Type` is a type that can safely provide a "view" into the Ice unmarshaling buffer and thereby avoid extra copies. This tag can only be applied to operation parameters of type string, sequence and dictionary, and only has an effect in situations where the Ice data buffer is guaranteed to still exist. +- Added the new metadata tag `cpp:view-type:Type`, where `Type` is a type that can safely provide a "view" into the Ice unmarshaling buffer and thereby avoid extra copies. This tag can only be applied to operation parameters of type string, sequence and dictionary, and only has an effect in situations where the Ice data buffer is guaranteed to still exist. -* It is no longer necessary to provide import libraries such as `IceD.lib`, `IceUtilD.lib` or `IceGridD.lib` when linking on Windows with Visual C++. The linker finds the import library names automatically through `pragma comment(lib, ...)` in the Ice header files. +- It is no longer necessary to provide import libraries such as `IceD.lib`, `IceUtilD.lib` or `IceGridD.lib` when linking on Windows with Visual C++. The linker finds the import library names automatically through `pragma comment(lib, ...)` in the Ice header files. -* Ice header files no longer disable or downgrade any warning reported by the C++ compiler in your code. In Ice 3.5, all header files indirectly included the following: +- Ice header files no longer disable or downgrade any warning reported by the C++ compiler in your code. In Ice 3.5, all header files indirectly included the following: ``` #ifdef _MSC_VER // @@ -254,91 +254,91 @@ These are the changes since Ice 3.5.1. ``` When upgrading your Visual C++ application to Ice 3.6, you may need to fix, disable or downgrade these warnings in your C++ code. -* Fixed a bug where the communicator destruction could raise `Ice::NullHandleException` if a custom observer was present. +- Fixed a bug where the communicator destruction could raise `Ice::NullHandleException` if a custom observer was present. -* Fixed a bug where the selector wouldn't check for `EPOLLERR` on Linux. This could cause the selector thread to spin if this condition occurred (which is the case with UDP connected sockets). +- Fixed a bug where the selector wouldn't check for `EPOLLERR` on Linux. This could cause the selector thread to spin if this condition occurred (which is the case with UDP connected sockets). -* Added per-process string converters for narrow and wide strings. The functions `setProcessStringConverter` and `getProcessStringConverter` in the IceUtil namespace can be used to establish and access the process narrow string converter. Likewise `setProcessWstringConverter` and `getProcessWstringConverter` can be used to establish and access the process wide string converter. +- Added per-process string converters for narrow and wide strings. The functions `setProcessStringConverter` and `getProcessStringConverter` in the IceUtil namespace can be used to establish and access the process narrow string converter. Likewise `setProcessWstringConverter` and `getProcessWstringConverter` can be used to establish and access the process wide string converter. -* Removed the `stringConverter` and `wstringConverter` data members of `Ice::InitializationData`. +- Removed the `stringConverter` and `wstringConverter` data members of `Ice::InitializationData`. -* Moved the `StringConverter` template and classes from the Ice namespace to the IceUtil namespace. +- Moved the `StringConverter` template and classes from the Ice namespace to the IceUtil namespace. -* Added `Ice.LogStdErr.Convert` property which controls whether or not the default StdErr logger converts messages from native narrow encoding to the console code page. The default value is 1, meaning by default messages are converted to the console code page encoding. The property is only used on Windows. +- Added `Ice.LogStdErr.Convert` property which controls whether or not the default StdErr logger converts messages from native narrow encoding to the console code page. The default value is 1, meaning by default messages are converted to the console code page encoding. The property is only used on Windows. -* Added `ice_staticId()` to the ProxyHandle template. +- Added `ice_staticId()` to the ProxyHandle template. -* Removed deprecated `Ice::Object::ice_getHash` function. +- Removed deprecated `Ice::Object::ice_getHash` function. ## Java Changes -* Added new Slice metadata `java:buffer` to enable the use of `java.nio.Buffer` types in the generated code for sequences of byte, short, int, long, float and double. For example, `sequence<byte>` maps to `java.nio.ByteBuffer` instead of `byte[]`. +- Added new Slice metadata `java:buffer` to enable the use of `java.nio.Buffer` types in the generated code for sequences of byte, short, int, long, float and double. For example, `sequence<byte>` maps to `java.nio.ByteBuffer` instead of `byte[]`. -* Changed the Ice core to allow applications to safely interrupt threads that are calling Ice APIs. The new property `Ice.ThreadInterruptSafe` must be enabled in order to use thread interrupts. Ice raises the new exception `Ice.OperationInterruptedException` if an API call is interrupted. +- Changed the Ice core to allow applications to safely interrupt threads that are calling Ice APIs. The new property `Ice.ThreadInterruptSafe` must be enabled in order to use thread interrupts. Ice raises the new exception `Ice.OperationInterruptedException` if an API call is interrupted. -* Added support for Java 8. +- Added support for Java 8. -* Java 8 lambda expressions can be used as callbacks for asynchronous proxy invocations. +- Java 8 lambda expressions can be used as callbacks for asynchronous proxy invocations. -* Removed deprecated `IceUtil.Version` class. +- Removed deprecated `IceUtil.Version` class. ## C# Changes -* Fixed a bug in the Slice-to-C# compiler that would generate invalid code if an interface inherited a method that had an optional value as a return value. +- Fixed a bug in the Slice-to-C# compiler that would generate invalid code if an interface inherited a method that had an optional value as a return value. -* Deprecated the `clr:collection` Slice metadata for sequences and dictionaries as well as the `CollectionBase` and `DictionaryBase` classes. +- Deprecated the `clr:collection` Slice metadata for sequences and dictionaries as well as the `CollectionBase` and `DictionaryBase` classes. -* Fixed a security vulnerability in IceSSL in which an untrusted self-signed CA certificate was accepted. +- Fixed a security vulnerability in IceSSL in which an untrusted self-signed CA certificate was accepted. -* Added `IceSSL.CertAuthFile` property, which allows you to specify a CA certificate without having to import it into a certificate store. +- Added `IceSSL.CertAuthFile` property, which allows you to specify a CA certificate without having to import it into a certificate store. -* Deprecated the `IceSSL.ImportCert` property. Certificates should be imported using standard Windows tools. +- Deprecated the `IceSSL.ImportCert` property. Certificates should be imported using standard Windows tools. -* Fixed a bug where under certain circumstances the thread pool could serialize dispatch. +- Fixed a bug where under certain circumstances the thread pool could serialize dispatch. -* The `Ice.Communicator` type now implements `IDisposable`, which allows communicator objects to be used as resources in `using()` statements. +- The `Ice.Communicator` type now implements `IDisposable`, which allows communicator objects to be used as resources in `using()` statements. -* Added the metadata tag `clr:implements:Base`, which adds the specified base type to the generated code for a Slice structure, class or interface. +- Added the metadata tag `clr:implements:Base`, which adds the specified base type to the generated code for a Slice structure, class or interface. -* Most Slice data types now support .NET serialization, which allows Ice exceptions to cross AppDomain boundaries. The only limitation is that data members whose types are proxies cannot be serialized; these members will be set to null after deserialization. +- Most Slice data types now support .NET serialization, which allows Ice exceptions to cross AppDomain boundaries. The only limitation is that data members whose types are proxies cannot be serialized; these members will be set to null after deserialization. -* It is now possible for users to provide a base class for a Slice-generated class with .NET partial classes. +- It is now possible for users to provide a base class for a Slice-generated class with .NET partial classes. -* Fixed leak in C# transport. The leak occurred for each Ice connection. +- Fixed leak in C# transport. The leak occurred for each Ice connection. -* Mono is no longer an officially-supported platform for Ice for .NET. +- Mono is no longer an officially-supported platform for Ice for .NET. ## Python Changes -* Added support for Python 3.4. +- Added support for Python 3.4. -* Changed the semantics of Ice.Unset so that it evaluates as false in a boolean context. +- Changed the semantics of Ice.Unset so that it evaluates as false in a boolean context. -* Fixed a bug in the Slice-to-Python translator that eliminates the use of implicit relative imports for nested Slice modules. +- Fixed a bug in the Slice-to-Python translator that eliminates the use of implicit relative imports for nested Slice modules. -* Added `ice_staticId()` to generated proxy classes. +- Added `ice_staticId()` to generated proxy classes. ## Ruby Changes -* Added support for Ruby 2.1. +- Added support for Ruby 2.1. -* Added `ice_staticId()` to generated proxy classes. +- Added `ice_staticId()` to generated proxy classes. ## PHP Changes -* Added support for PHP 5.6. +- Added support for PHP 5.6. -* Added `ice_staticId()` to generated proxy helper classes. +- Added `ice_staticId()` to generated proxy helper classes. -* Generated interfaces now extend the Object base interface. +- Generated interfaces now extend the Object base interface. -* Added `ObjectPrxHelper` class. +- Added `ObjectPrxHelper` class. ## JavaScript Changes -* JavaScript is now an officially-supported language mapping. +- JavaScript is now an officially-supported language mapping. -* Added the following methods to `AsyncResult` for consistency with the other language mappings: `cancel`, `isCompleted`, `isSent`, `throwLocalException`, `sentSynchronously`. +- Added the following methods to `AsyncResult` for consistency with the other language mappings: `cancel`, `isCompleted`, `isSent`, `throwLocalException`, `sentSynchronously`. -* Changed the NodeJS packaging such that existing Ice for JavaScript programs will need to modify their require statements. For example, to use Ice you would now write: +- Changed the NodeJS packaging such that existing Ice for JavaScript programs will need to modify their require statements. For example, to use Ice you would now write: `var Ice = require("icejs").Ice;` |