1The entries below contain brief descriptions of the changes in a release, in no 2particular order. Some of the entries reflect significant new additions, while 3others represent minor corrections. Although this list is not a comprehensive 4report of every change we made in a release, it does provide details on the 5changes we feel Ice users might need to be aware of. 6 7We recommend that you use the release notes as a guide for migrating your 8applications to this release, and the manual for complete details on a 9particular aspect of Ice. 10 11- [Changes in Ice 3.6.4](#changes-in-ice-364) 12 - [General Changes](#general-changes) 13 - [C++ Changes](#c-changes) 14 - [Java Changes](#java-changes) 15 - [JavaScript Changes](#javascript-changes) 16 - [C# Changes](#csharp-changes) 17- [Changes in Ice 3.6.3](#changes-in-ice-363) 18 - [General Changes](#general-changes) 19 - [C++ Changes](#c-changes) 20 - [Objective-C Changes](#objective-c-changes) 21 - [PHP Changes](#php-changes) 22 - [Python Changes](#python-changes) 23- [Changes in Ice 3.6.2](#changes-in-ice-362) 24 - [General Changes](#general-changes-1) 25 - [C++ Changes](#c-changes-1) 26 - [C# Changes](#c-changes-2) 27 - [Java Changes](#java-changes) 28 - [Python Changes](#python-changes-1) 29 - [Ruby Changes](#ruby-changes) 30- [Changes in Ice 3.6.1](#changes-in-ice-361) 31 - [General Changes](#general-changes-1) 32 - [C++ Changes](#c-changes-3) 33 - [JavaScript Changes](#javascript-changes) 34 - [PHP Changes](#php-changes-1) 35- [Changes in Ice 3.6.0](#changes-in-ice-360) 36 - [General Changes](#general-changes-3) 37 - [C++ Changes](#c-changes-4) 38 - [C# Changes](#c-changes-5) 39 - [Java Changes](#java-changes-1) 40 - [JavaScript Changes](#javascript-changes-1) 41 - [Objective-C Changes](#objective-c-changes-1) 42 - [PHP Changes](#php-changes-2) 43 - [Python Changes](#python-changes-2) 44 - [Ruby Changes](#ruby-changes-1) 45 46# Changes in Ice 3.6.4 47 48These are the changes since Ice 3.6.3. 49 50## General Changes 51 52- Fixed IceGrid node bug where a replica might not get up-to-date object 53 adapter information about a server if an update is pending for this 54 server. Thanks to Michael Gmelin for the bug report and fix. 55 56- Added support for a new `Ice.ClassGraphDepthMax` property to prevent stack 57 overflows in case a sender sends a very large graph. 58 59 The unmarshaling or destruction of a graph of Slice class instances is a 60 recursive operation. This property limits the amount of stack size required to 61 perform these operations. This property is supported with all the language 62 mappings except Java and JavaScript where it's not needed (the run time 63 environment allows graceful handling of stack overflows). 64 65 The default maximum class graph depth is infinite. If your application 66 receives class graphs in an insecure environment, you should set the 67 `Ice.ClassGraphDepthMax` to a value that ensures the thread pool stack size is 68 large enough to allow reading graphs without causing a stack overflow. 69 70- Fixed IceGrid bug where updating properties of an IceBox service at runtime 71 would fail if the service used the IceBox shared communicator. Thanks to 72 Andreas Sommer for the bug report and fix. 73 74- Fixed a bug in the Slice compilers: they generated incorrect dependencies for 75 Slice files in directories with the string ".ice" in their path. 76 77- Significantly reduced the size of the Windows binary distribution by 78 moving all C++ debug information (PDB files) to https://symbols.zeroc.com. 79 Also removed the WinRT libraries from the Windows binary distribution. 80 81## C++ Changes 82 83- Fixed a spurious and harmless error message related to the kqueue selector. 84 This message would only show up under certain circumstances when using Ice 85 on macOS Sierra (10.2). 86 87- Fixed a bug which would cause an IceUtil::NullHandleException to be raised when 88 using a proxy configured with ice_invocationTimeout(-2) with collocated calls. 89 90- Fixed a bug which caused PTHREAD_PRIO_INHERIT to be ignored when building Ice 91 with -DICE_PRIO_INHERIT. 92 93## Java Changes 94 95- Fixed generated code bug which would cause a build failure if an interface 96 inherited from an interface from another module and if this interface had 97 operations returning multiple values. 98 99## JavaScript Changes 100 101- Fixed a bug in the Ice.Long toNumber implementation: negative integers 102 smaller than -(2^52 - 1) were not correctly handled. 103 104## CSharp Changes 105 106- Fixed a bug that affects the Stack sequence mapping. When using the Stack 107mapping with a sequence<Object*>, items were unmarshaled in reverse 108order. 109 110- Fixed a bug where incorrect code could be generated for invalid metadata 111directives. 112 113# Changes in Ice 3.6.3 114 115These are the changes since Ice 3.6.2. 116 117## General Changes 118 119- Fixed IceGrid bug where deployment of an application would fail if a well- 120 known object was registered with an adapter whose adapter ID contained spaces. 121 122- Added support for limiting the number of events queued for a given subscriber. 123 This is useful to prevent IceStorm from consuming too much memory when a 124 subscriber is too slow to consume published events. The queue maximum size is 125 configured with the IceStorm.Send.QueueSizeMax property. You can use the 126 property IceStorm.Send.QueueSizeMaxPolicy=RemoveSubscriber|DropEvents to 127 configure the behavior of IceStorm when the limit is reached. By default, 128 IceStorm will queue events indefinitely. 129 130- Speed-up the update of IceStorm replicas after the election of a new IceStorm 131 coordinator. 132 133- Fixed a bug in the IceLocatorDiscovery plug-in that could occasionally 134 trigger an infinite loop. 135 136- Fixed a bug in the unmarshalling code where passing optional input 137 parameters to an operation with no required input parameters would 138 cause an Ice::EncapsulationException to be thrown if the receiver 139 didn't expect the optional input parameters. The same applies for 140 passing optional output parameters to operations without required 141 output parameters. 142 143- Fixed a bug in icegridadmin and IceGridGUI which was preventing to get 144 properties for IceBox services using the IceBox shared communicator. 145 146- Fixed a bug in IceGrid Admin (IceGridGUI) that resulted in an incorrect 147 state when you removed and then re-added the same IceGrid application. 148 149- The Slice compilers now support non-ASCII paths on all platforms. 150 151- General clean up in slice2html, including a fix for broken link paths. 152 153## C++ Changes 154 155- Added support for archiving log files. The property Ice.LogFile.SizeMax 156 controls the maximum size in bytes of log files; when a log file reaches 157 this size, the log file is renamed and a new log file is started. 158 The Ice.LogFile.SizeMax property is set to 0 by default, which means the 159 log file size is unlimited and a single log file is created. 160 161## Objective-C Changes 162 163- Added identityToString and stringToIdentity non-member functions, which 164 were missing from previous releases. 165 166## PHP Changes 167 168- Added support for PHP 7.0. 169 170## Python Changes 171 172- Fixed a bug in the Slice compiler in which a Slice comment that begins or 173 ends with a double quote could generate a bogus Python docstring. 174 175- Fixed bug where Ice::UnknownUserException would sometimes be raised in C++ 176 extension instead of being passed to Python. 177 178# Changes in Ice 3.6.2 179 180These are the changes since Ice 3.6.1. 181 182## General Changes 183 184- Added two new tools, icegriddb and icestormdb, used to import/export the 185 IceGrid and IceStorm databases. 186 187- Fixed a bug that affects Java and C# generated code. The generated patcher 188 for reading class data members was bogus when the class had more than one 189 class data member and derived from a class that contained class data 190 members. The same issue was true for exceptions with class data members 191 deriving from exceptions with class data members. 192 193- Fixed a bug that prevented scripting languages (Python, Ruby, Javascript and 194 PHP) from marshaling NaN or Infinity as a floating point value. 195 196- Fixed an IceGrid bug where resolving endpoints of dynamically registered 197 replica groups would fail unless the client was using an encoding superior 198 to the encoding of the dynamically registered object adapters. 199 200- Added missing functions Ice::identityToString and Ice::stringToIdentity 201 (C++, Objective-C, PHP, Python and Ruby). 202 203- Added support for universal character names (\uNNNN and \UNNNNNNNN) in Slice 204 string constants. 205 206- Fixed Glacier2 router bug where requests from client to server could be lost 207 if forwarded as batch requests with the _fwd=O context. 208 209- Fixed Glacier2 bug which would occur in un-buffered mode and when forwarding 210 one-way requests. The Glacier2 router could eventually leak and hang on 211 shutdown. 212 213## C++ Changes 214 215- Fixed El Capitan build issues caused by a new security feature that no longer 216 exports DYLD_LIBRARY_PATH to child processes. 217 218- Fixed potential deadlock that could occur when using collocation optimization 219 and serialized server thread pools. 220 221- Fixed IceSSL bug that would only show up with WSS servers running on macOS 222 and Linux. The WSS server could stop reading requests if the client sent 223 multiple requests within the same SSL record. 224 225## C# Changes 226 227- Minor fixes to release the memory used by the transports to send and receive 228 data sooner. The garbage collector can therefore collect this memory sooner 229 as well. 230 231## Java Changes 232 233- Fixed a bug where unmarshaling Ice objects was really slow when using 234 compact type IDs. 235 236- Fixed an IceGridGUI bug where metrics attributes for Glacier2 and IceStorm 237 were not displayed. 238 239- Fixed an IceGridGUI bug where the GUI started minimized in macOS. 240 241## Python Changes 242 243- Added compatibility with Python 3.5. 244 245## Ruby Changes 246 247- Added compatibility with Ruby 2.3. 248 249# Changes in Ice 3.6.1 250 251These are the changes since Ice 3.6.0. 252 253## General Changes 254 255- Fixed IceStorm performance issue when creating a large number of topics. 256 257- Added support for Visual Studio 2015 and Universal Windows Platform (UWP) 258 apps. 259 260- Connection and transport buffers are now released when the connection is 261 closed rather than waiting for the collection or destruction of the Ice 262 connection object. 263 264- Calling `destroy()` on the `Glacier2::SessionHelper` during connection 265 establishment will now immediately cause the termination of the connection 266 attempt and `SessionCallback::connectFailed()` will be called with a 267 `CommunicatorDestroyedException`. Previously, the helper would wait until 268 the connection attempt either succeeded or failed before calling 269 `SessionCallback::disconnected()` or `SessionCallback::connectFailed`. 270 271- Fixed a bug in Slice compilers that would incorrectly reject valid Slice 272 where a parameter with the same name as a type would prevent further use of 273 that type in the same scope. For example: 274 ``` 275 module Test 276 { 277 sequence<int> Seq; 278 struct S1 279 { 280 Seq seq; 281 Seq seq2; // This would fail with 'Seq is not a type' 282 }; 283 284 interface Intf 285 { 286 void method(Seq seq, Seq seq2); // This would fail with 'Seq is not a type' for second parameter 287 }; 288 }; 289 ``` 290 291- Added `--validate` option to Slice compilers. This option validates the 292 options that are passed to the Slice compiler and emits any errors but does 293 not create the generated files. 294 295## C++ Changes 296 297- Added registration function for Ice plug-ins (Ice::registerIceSSL, ...). Use 298 these functions if you don't want to rely on plug-in dynamic loading at run 299 time. Your application will need to link with the plug-in's dynamic library 300 if it uses the register function. 301 302- C++ source builds in Windows now use third-party packages from NuGet 303 (https://www.nuget.org). 304 305- Windows C++ builds now install the required third-party dependencies to the 306 install directory. 307 308## JavaScript Changes 309 310- Fixed an issue in connection code that would cause an unexpected exception to 311 be raised in some browsers when connection caching was enabled. 312 313- Fixed an issue where JavaScript browser code was trying to use TCP endpoints. 314 315- Fixed an issue that prevents Ice for JavaScript from running in a Web Worker. 316 317- JavaScript browser libraries no longer include a sourceMappingURL. To use 318 source maps you must enable them manually. 319 320## PHP Changes 321 322- Update PHP builds for Linux and macOS to use php-config from PATH. It is no 323 longer necessary to set PHP_HOME. 324 325# Changes in Ice 3.6.0 326 327These are the changes since Ice 3.5.1. 328 329## General Changes 330 331- Exceptions raised by the `Ice::Plugin` initialize method are now caught by the 332 communicator, which raises `Ice::PluginInitializationException` instead. 333 334- Fixed IceGrid bug where an application update could fail and leave the 335 registry in an invalid state if some allocation requests were pending while 336 the application was updated. 337 338- Deprecated the `IceSSL.PersistKeySet` which is now only used when importing 339 certificates with the deprecated `IceSSL.ImportCert` property. 340 341- Deprecated the `IceSSL.KeySet` property, use the `IceSSL.CertStoreLocation` 342 property instead. 343 344- Added `IceSSL.CertStoreLocation` property. This is a Windows specific property 345 to specify the location of the certificate store or key set for IceSSL 346 operation. The LocalMachine and CurrentUser locations are supported. 347 348- Added `IceSSL::WSSConnectionInfo` local Slice class to provide information on 349 a WSS connection. This class extends the `IceSSL::ConnectionInfo` class. The 350 `IceSSL::WSSNativeConnectionInfo` was also added to provide the language 351 mapping specific certificates associated with the SSL connection. 352 353- Added `IceSSL::WSSEndpointInfo` local Slice class to provide WSS endpoint 354 information. This class extends the `IceSSL::EndpointInfo` class. 355 356- Updated `Ice::WSEndpointInfo` to extend `Ice::TCPEndpointInfo` and 357 `Ice::WSConnectionInfo` to extend `Ice::TCPConnectionInfo` 358 359- IceSSL now supports using the platform Root Certificate Authorities to 360 validate remote certificates. The use of the platform Root CAs can be enabled 361 with the `IceSSL.UsePlatformCAs` property. The platform Root CAs are only 362 checked if `IceSSL.CAs` is not set. 363 364- The `IceSSL.CertAuthFile` and `IceSSL.CertAuthDir` properties have been 365 deprecated. You should now use the `IceSSL.CAs` property to configure the path 366 of the PEM file containing the Root Certificate Authorities or the path of a 367 directory containing the certificates (OpenSSL only). 368 369- The `IceSSL.KeyFile` property has been deprecated. You should instead use 370 `IceSSL.CertFile` and PKCS12 files to configure the IceSSL identity. 371 372- The default value of the `IceSSL.VerifyDepthMax` property is now 3 (it was 373 previously 2). This allows certificate chains of 3 certificates (e.g., a Peer, 374 CA and Root certificate chain). 375 376- The certificate chain provided in the `IceSSL::ConnectionInfo` should now 377 always include the root certificate if the chain could successfully be 378 verified. 379 380- Added `verified` member to the `IceSSL::ConnectionInfo` class. This member 381 indicates whether or not the peer certificate was successfully verified. This 382 member is useful for clients which set `IceSSL.VerifyPeer=0` to check if the 383 server certificate could be verified or not. For server connections, the 384 member should always be `true` since servers always reject invalid client 385 certificates. 386 387- The Ice distribution now supports the Objective-C mapping on macOS. 388 389- The Glacier2 `SessionHelper` class now creates the callback object adapter 390 automatically unless the application calls 391 `SessionFactoryHelper.setUseCallbacks(false)`. 392 393- Added the `headers` member to the `Ice::WSConnectionInfo` class. This member 394 contains the HTTP headers provided during WebSocket connection establishment. 395 396- Significantly changed the behavior of batch requests: 397 398 - Invocations on batch fixed proxies are still queued by the Ice connection 399 object as in previous releases. 400 401 - Invocations on batch direct or indirect proxies are now queued directly 402 by the proxy object. 403 404 - As a result, calling `flushBatchRequests` on the Ice communicator or 405 connection will no longer flush batch requests queued with proxies. 406 407 - You should instead call `flushBatchRequests` on the proxy to flush its 408 batch request queue. The flushing of those batch requests is handled like 409 a regular one-way request (e.g., the Ice run time will retry if the 410 connection fails). 411 412- Added support for batch request interceptors (C++, Java, C#, Python, 413 Objective-C). You can assign a batch request interceptor on communicator 414 initialization using the `InitializationData` structure. 415 416- IPv6 is now disabled by default if the operating system doesn't support the 417 creation of IPv6 sockets. 418 419- Added new `Ice.BatchAutoFlushSize` property to allow controlling how much data 420 (in kilobytes) is queued for batching before the batch is sent over the 421 connection. Previously, this was controlled by the `Ice.MessageSizeMax` 422 property. The `Ice.BatchAutoFlush` property has also been deprecated. To 423 disable auto flush you can set `Ice.BatchAutoFlushSize=0`. The default value 424 is 1024. 425 426- We have relaxed the semantics of `Ice.MessageSizeMax`. The check for the 427 maximum message size is now only performed on the receiver side. If the 428 size of the message is greater than the limit, Ice raises 429 `Ice::MemoryLimitException` and closes the connection. Previously, it was also 430 used to limit the amount of data sent to a peer (either for a request or 431 reply). This is no longer the case. A zero or negative value now also disables 432 the check and allows an unlimited amount of data to be received (this should 433 only be used in a trusted environment). Finally, support for the 434 `objectAdapter.MessageSizeMax` property was added to allow setting this limit 435 on specific object adapters. 436 437- The Ice run time now raises `Ice::IllegalServantException` if a null servant 438 is provided to a method that requires a non-null servant (such as the 439 `Ice::ObjectAdapter::add` methods or the Freeze evictor `add` methods). 440 441- It's now possible to specify an IPv6 address for the UDP `--interface` local 442 option; previously it only accepted an interface name or index. 443 444- Ice now guarantees that invocations made on different proxy objects will be 445 serialized if the proxies are equal and if connection caching is enabled. 446 Previously, invocations could be sent out of order if the connection wasn't 447 established. 448 449- IceGrid now permits removing or moving servers when saving an application 450 "without restart" (to ensure the update doesn't cause any server shutdown). 451 The servers to be removed or moved must be stopped or the saving will fail. 452 Previously, IceGrid prevented the saving of the application even if the 453 servers were stopped. 454 455- It's now possible to pass indirect proxies to 456 `IceGrid::AdminSession::setObservers`. Previously, the IceGrid registry would 457 fail to resolve the endpoints and the observer updates weren't sent. 458 459- The IceGrid implementation of `Ice::Locator::getRegistry` now returns a 460 replicated proxy if IceGrid replication is used. This way, if an IceGrid 461 replica becomes unavailable during a server's activation, the server will 462 still be able to register its endpoints with one of the other replicas. 463 464- Added a `cancel` method to `AsyncResult`. Calling it prevents a queued 465 asynchronous request from being sent, or ignores the reply if the request has 466 already been sent. It does not cancel the request in the server. Canceled 467 requests throw `Ice::InvocationCanceledException`. 468 469- Removed the "old" asynchronous invocation API that was deprecated in Ice 3.4. 470 471- Removed the following deprecated Slice operations: 472 - `Ice::Router::addProxy` 473 - `IceGrid::Admin::writeMessage` 474 - `IceStorm::Topic::subscribe` 475 476- Added the WebSocket transports to the Ice core, including new implementations 477 in Java and C#. This means it's no longer necessary to use Glacier2 as an 478 intermediary when a JavaScript client needs to communicate with a Java or C# 479 server. 480 481- Added a "Logger" facet to the admin object, which allows remote applications 482 to attach `RemoteLogger` objects and receive log messages. Both the 483 icegridadmin command-line utility and IceGrid Admin GUI use this new facet 484 to retrieve the logs of Ice servers, IceBox services, IceGrid nodes and 485 IceGrid registries. 486 487- Added `getNodeAdmin` and `getRegistryAdmin` operations to the `IceGrid::Admin` 488 interface. They return the admin object of a given IceGrid registry or node. 489 490- Added new `getPrefix` operation to `Ice::Logger`; it returns the prefix of the 491 logger. 492 493- The admin object can now be hosted in an application-supplied object adapter 494 using the new property `Ice.Admin.Enabled` and the new operation 495 `Ice::Communicator::createAdmin`. 496 497- Added methods to proxies to asynchronously get the connection associated with 498 the proxy. The current synchronous methods can block as they may cause the 499 connection to be established. 500 501- Added support for HTTP proxies to the Ice core in C++, C# and Java. This 502 allows outgoing TCP & SSL connections to be mediated by an HTTP network proxy 503 service that supports HTTP CONNECT tunneling. The new properties 504 `Ice.HTTPProxyHost` and `Ice.HTTPProxyPort` provide addressing information 505 for the proxy. 506 507- Added the `IceStorm::InvalidSubscriber` exception, which is thrown by the 508 `subscribe/unsubscribe` operations when an invalid subscriber (such as a null 509 proxy) is passed. IceStorm would previously either abort (if built in debug 510 mode) or throw an `Ice::UnknownLocalException` if such a subscriber proxy was 511 provided. 512 513- Added `Ice.Default.SourceAddress` property and `--sourceAddress` endpoint 514 setting to control the interface used for an outgoing connection. The 515 configured source address can be retrieved with the `sourceAddress` member 516 of the `Ice::IPEndpointInfo` class. 517 518- The signatures of `Ice::OutputStream startSize` and `endSize` have been 519 modified. It is now necessary for the caller of `startSize` to save the 520 returned position and pass it into `endSize`. 521 522- Added `IceStormAdmin.Host` and `IceStormAdmin.Port` properties. You can set 523 these properties to connect to an IceStorm instance running on a given host 524 and port. 525 526- Added IceStorm finder interface (defined in `IceStorm/IceStorm.ice`) to enable 527 clients to easily find the proxy of the topic manager with just the endpoint 528 information of the IceStorm service. The client doesn't need to know the 529 instance name. IceStorm provides an Ice object with the identity 530 `IceStorm/Finder` that implements this interface. 531 532- Added IceLocatorDiscovery plug-in, which enables Ice applications to discover 533 locators (such as IceGrid registries) running on the network using UDP 534 multicast. 535 536- Added support for IceLocatorDiscovery to the IceGrid administrative utilities. 537 Also added `IceGridAdmin.Host` and `IceGridAdmin.Port` properties; you can set 538 these properties to connect to an IceGrid registry running on a given host and 539 port. 540 541- Added "finder" interfaces for locators and routers to enable clients to easily 542 find proxies for the locator or router (defined in `Ice/Locator.ice` and 543 `Ice/Router.ice`). Glacier2 and IceGrid implement these interfaces and provide 544 finder Ice objects with the identities `Ice/RouterFinder` and 545 `Ice/LocatorFinder`, respectively. Clients can use these objects to connect 546 to Glacier2 and IceGrid using only the endpoint information; they don't need 547 to know the instance name of the Glacier2 or IceGrid service. 548 549- Ice metrics now support collocation optimization. The 550 `Ice::Instrumentation::CollocatedObserver` local interface and the 551 `IceMX::CollocatedMetrics` class have been added to monitor collocated 552 requests. 553 554- Collocation optimization has been significantly improved to remove 555 limitations. It now works with AMI, AMD, blobjects and batching. Collocated 556 requests are now always marshaled and unmarshaled but they don't go through 557 any transport. The `Ice::CollocationOptimizationException` is no longer used 558 and as a result is now deprecated. 559 560- Fixed a bug where retries might fail if the request failed right after 561 connection establishment. 562 563- Added callbacks for connection closure and heartbeats. The callback is invoked 564 when the connection is closed or when a heartbeat is received. Callbacks are 565 installed on the connection with the `Ice::Connection::setCallback` method and 566 implement the `Ice::ConnectionCallback` interface. 567 568- Active connection management improvements: 569 570 - Active connection management now supports sending heartbeats over the Ice 571 connection. Depending on the configuration, heartbeats are sent when there 572 are long invocations in progress, when the connection is idle, or at 573 regular time intervals. 574 575 - Connection closure by active connection management can be configured to 576 close connections under certain conditions. For example, a connection can 577 be closed gracefully or forcefully if it's idle for the specified timeout 578 period. 579 580 - The ACM properties to configure the ACM timeout have been deprecated. You 581 should now use the `prefix.Timeout` property where prefix can be 582 `Ice.ACM`, `Ice.ACM.Client`, `Ice.ACM.Server` or `objectAdapter.ACM`. 583 584- IceGrid and Glacier2 now support the new ACM mechanism to keep sessions alive. 585 The `Glacier2::Router` and `IceGrid::Registry` interfaces support a new 586 `getACMTimeout` operation. To keep the connection alive the client should 587 configure its connection to always send heartbeats using the timeout returned 588 by `getACMTimeout`. A client can also install a connection callback to be 589 notified when the connection is unexpectedly closed. 590 591- Added support for invocation timeouts. Invocation timeouts can be set on a 592 per-proxy basis with the `ice_invocationTimeout` proxy method. By default, 593 there's no invocation timeout meaning that an invocation will never timeout 594 if the connection between the client and server is alive. An invocation 595 timeout does not cause a connection to be closed. If the timeout is triggered 596 the invocation will raise `Ice::InvocationTimeoutException`. 597 598- With the addition of invocation timeouts, the existing connection timeout 599 mechanism no longer applies to invocations. Connection timeouts are now 600 enabled by default using the new property `Ice.Default.Timeout`, which 601 specifies the timeout for stringified proxy endpoints that do not have a 602 timeout explicitly set. The default setting for the property is 60 seconds. 603 It is also now possible to set an infinite timeout using `-t infinite` in 604 the endpoint configuration. 605 606- Added IceDiscovery plug-in, which provides a UDP multicast-based Ice locator 607 implementation. This can be used as an alternative to IceGrid when running a 608 few clients and servers on the same network and you don't want to deploy a 609 central service such as IceGrid. 610 611- Added support for IceGrid custom load balancing with the addition of replica 612 group and type filters. These filters allow you to select the set of replicas 613 that are sent back to the client when it resolves replica group endpoints. 614 It's also possible to filter the objects returned to the client when it uses 615 the `IceGrid::Query` interface. 616 617- This addition requires the upgrade of IceGrid registry databases if you 618 deployed replica groups for your IceGrid applications. See the release notes 619 for information on how to upgrade your IceGrid databases. 620 621- Fixed a marshaling bug where the marshaling of a type with nested optionals 622 of variable size could trigger an assertion. 623 624- Fixed an IceGrid registry replication bug where database synchronization could 625 fail on startup or connection establishment with the master if multiple 626 applications referred to a replica group defined in another application that 627 wasn't yet added. 628 629- FreezeScript can now transform classes to structures and structures to 630 classes. It also supports the use of compact type IDs for classes. 631 632- The `CryptPasswords` file support for Glacier2 and IceGrid is now implemented 633 in a separate C++ plug-in, the `Glacier2CryptPermissionsVerifier` plug-in. On 634 Windows, this plug-in is the only remaining Ice run time dependency on 635 OpenSSL. 636 637- Removed the `Ice::Stats` interface, which was deprecated in Ice 3.5 and 638 replaced by the new metrics facility. 639 640- The `IceBox.ServiceManager` object adapter has been deprecated. Use 641 `Ice.Admin` and the `IceBox.ServiceManager` facet instead. 642 643- Removed the following deprecated properties: 644 - `Glacier2.AddSSLContext` 645 - `IcePatch2.ChunkSize` 646 - `IcePatch2.Directory` 647 - `IcePatch2.Remove` 648 - `IcePatch2.Thorough` 649 650- Fixed a bug where optional class data members were not correctly marshaled and 651 unmarshaled when non optional class data members were defined after the 652 optional class data members or the optional tag were not in ascending order. 653 This bugs affects Java, CSharp and JavaScript language mappings. 654 655## C++ Changes 656 657- Calling Glacier2::SessionFactoryHelper::destroy() is now required to ensure 658 resources allocated for session helpers are correctly released. 659 660- Fixed a bug where the object adapter default servant map wasn't cleared on 661 object adapter destruction. This could potential lead to leaks if the default 662 servant had a reference to the object adapter. 663 664- IceStorm is now faster when creating persistent topics and subscribers. 665 666- Ice for C++ now supports the GCC and clang symbol visibility options: we build 667 by default with `-fvisibility=hidden` and we define `ICE_DECLSPEC_EXPORT` and 668 `ICE_DECLSPEC_IMPORT` for these compilers. 669 670- Refactored the capture and printing of exception stack traces to be more 671 efficient when the stack traces are not printed. The signature of 672 `IceUtil::Exception::ice_stackTrace` changed to: 673 `std::string ice_stackTrace() const;` 674 675- Fixed a bug where a private Windows Runtime delegate type could be published 676 in Windows Store Components metadata files (WINMD). 677 678- New garbage collection support for object graphs with cycles. Ice no longer 679 uses a background thread to collect objects. Instead, `Ice::Object` now has a 680 new `ice_collectable` method to indicate whether or not the object graph can 681 be collected. When a graph is marked as collectable with this method, you 682 shouldn't update the structure of the object graph. Ice tries to collect the 683 graph each time a reference count is dropped for an object in the cycle. By 684 default, object collection is turned off. When it's turned on with 685 `Ice.CollectObjects=1`, the Ice run time calls `ice_collectable(true)` on all 686 the objects it unmarshals. The properties `Ice.GC.Interval` and `Ice.Trace.GC` 687 are no longer supported, nor is the `Ice::collectGarbage` function. 688 689- Significant changes to the IceSSL plug-in: 690 691 - Now uses the native SecureTransport API on macOS 692 - Now uses the native SChannel API on Windows 693 - OpenSSL is only used in IceSSL on Linux 694 695- Added support for the `IceSSL.FindCert` property on Windows and macOS. 696 697- Added the new metadata tag `cpp:view-type:Type`, where `Type` is a type that 698 can safely provide a "view" into the Ice unmarshaling buffer and thereby avoid 699 extra copies. This tag can only be applied to operation parameters of type 700 string, sequence and dictionary, and only has an effect in situations where 701 the Ice data buffer is guaranteed to still exist. 702 703- It is no longer necessary to provide import libraries such as `IceD.lib`, 704 `IceUtilD.lib` or `IceGridD.lib` when linking on Windows with Visual C++. The 705 linker finds the import library names automatically through 706 `pragma comment(lib, ...)` in the Ice header files. 707 708- Ice header files no longer disable or downgrade any warning reported by the 709 C++ compiler in your code. In Ice 3.5, all header files indirectly included 710 the following: 711 ``` 712 #ifdef _MSC_VER 713 // 714 // Move some warnings to level 4 715 // 716 # pragma warning( 4 : 4250 ) // ... : inherits ... via dominance 717 # pragma warning( 4 : 4251 ) // class ... needs to have 718 // dll-interface to be used by clients of class... 719 #endif 720 ``` 721 When upgrading your Visual C++ application to Ice 3.6, you may need to fix, 722 disable or downgrade these warnings in your C++ code. 723 724- Fixed a bug where communicator destruction could raise 725 `Ice::NullHandleException` if a custom observer was present. 726 727- Fixed a bug where the selector wouldn't check for EPOLLERR on Linux. This 728 could cause the selector thread to spin if this condition occurred (which is 729 the case with UDP connected sockets). 730 731- Added per-process string converters for narrow and wide strings. The functions 732 `setProcessStringConverter` and `getProcessStringConverter` in the IceUtil 733 namespace can be used to establish and access the process narrow string 734 converter. Likewise `setProcessWstringConverter` and 735 `getProcessWstringConverter` can be used to establish and access the process 736 wide string converter. 737 738- Removed the `stringConverter` and `wstringConverter` data members of 739 `Ice::InitializationData`. 740 741- Moved the `StringConverter` template and classes from the Ice namespace to the 742 IceUtil namespace. 743 744- Added `Ice.LogStdErr.Convert` property which controls whether or not the 745 default StdErr logger converts messages from native narrow encoding to the 746 console code page. The default value is 1, meaning by default messages are 747 converted to the console code page encoding. The property is only used on 748 Windows. 749 750- Added `ice_staticId` to the ProxyHandle template. 751 752- Removed deprecated `Ice::Object::ice_getHash` function. 753 754## C# Changes 755 756- Fixed the Java IceSSL implementation to behave like the C++ and Java 757 implementation when `IceSSL.VerifyPeer=1` is set for servers. The server will 758 now request a certificate to the client and not abort the connection if the 759 client doesn't provide a certificate. 760 761- The default constructor for a Slice structure, exception or class now 762 initializes string, structure or enumerator data members. A string data member 763 is initialized to the empty string, a structure data member is initialized 764 with a new default-constructed structure, and an enumerator is initialized 765 with the first enumerator value. 766 767- Fixed a bug in the Slice-to-C# compiler that would generate invalid code if an 768 interface inherited a method that had an optional value as a return value. 769 770- Deprecated the `clr:collection` Slice metadata for sequences and dictionaries 771 as well as the `CollectionBase` and `DictionaryBase` classes. 772 773- Fixed a security vulnerability in IceSSL in which an untrusted self-signed CA 774 certificate was accepted. 775 776- Added `IceSSL.CertAuthFile` property, which allows you to specify a CA 777 certificate without having to import it into a certificate store. 778 779- Deprecated the `IceSSL.ImportCert` property. Certificates should be imported 780 using standard Windows tools. 781 782- Fixed a bug where under certain circumstances the thread pool could serialize 783 dispatch. 784 785- The `Ice.Communicator` type now implements `IDisposable`, which allows 786 communicator objects to be used as resources in `using()` statements. 787 788- Added the metadata tag `clr:implements:Base`, which adds the specified base 789 type to the generated code for a Slice structure, class or interface. 790 791- Most Slice data types now support .NET serialization, which allows Ice 792 exceptions to cross AppDomain boundaries. The only limitation is that data 793 members whose types are proxies cannot be serialized; these members will be 794 set to null after deserialization. Note that the `Ice.Optional` type now 795 implements `ISerializable` and the .NET serialization format in Ice 3.6 is 796 not backward-compatible with Ice 3.5. 797 798- It is now possible for users to provide a base class for a Slice-generated 799 class with .NET partial classes. 800 801- Fixed leak in C# transport. The leak occurred for each Ice connection. 802 803- Mono is no longer an officially-supported platform for Ice for .NET. 804 805## Java Changes 806 807- Fixed the Java IceSSL implementation to behave like the C++ and C# 808 implementation when `IceSSL.VerifyPeer=1` is set for servers. The server will 809 now reject the connection if the client provides a certificate and this 810 certificate can't be verified. 811 812- Passing null for a Slice structure or enumerator is now tolerated. Ice 813 marshals an empty structure or the first enumerator value. 814 815- The default constructor for a Slice structure, exception or class now 816 initializes string, structure or enumerator data members. A string data member 817 is initialized to the empty string, a structure data member is initialized 818 with a new default-constructed structure, and an enumerator is initialized 819 with the first enumerator value. 820 821- The `clone` method provided by Java classes generated from Slice definitions 822 is now returning the generated class, instead of `java.lang.Object`. For 823 example, the `Ice.Identity` class generated from the `Ice::Identity` Slice 824 structure contains: 825 ``` 826 // Prior to Ice 3.6 827 public java.lang.Object clone() { ... } 828 829 // Starting with Ice 3.6 830 public Identity clone() { ... } 831 ``` 832 This way, you typically no longer need to cast after cloning an Ice structure or other Ice object. 833 834- Added new Slice metadata `java:buffer` to enable the use of `java.nio.Buffer` 835 types in the generated code for sequences of byte, short, int, long, float and 836 double. For example, `sequence<byte>` maps to `java.nio.ByteBuffer` instead of 837 `byte[]`. 838 839- Changed the Ice core to allow applications to safely interrupt threads that 840 are calling Ice APIs. The new property `Ice.ThreadInterruptSafe` must be 841 enabled in order to use thread interrupts. Ice raises the new exception 842 `Ice.OperationInterruptedException` if an API call is interrupted. 843 844- Added support for Java 8. 845 846- Java 8 lambda expressions can be used as callbacks for asynchronous proxy 847 invocations. 848 849- Removed deprecated `IceUtil.Version` class. 850 851## JavaScript Changes 852 853- JavaScript is now an officially-supported language mapping. 854 855- Passing null for a Slice structure or enumerator is now tolerated. Ice 856 marshals an empty structure or the first enumerator value. 857 858- The default constructor for a Slice structure, exception or class now 859 initializes string, structure or enumerator data members. A string data member 860 is initialized to the empty string, a structure data member is initialized 861 with a new default-constructed structure, and an enumerator is initialized 862 with the first enumerator value. 863 864- Added the following methods to `AsyncResult` for consistency with the other 865 language mappings: `cancel`, `isCompleted`, `isSent`, `throwLocalException`, 866 `sentSynchronously`. 867 868- Changed the NodeJS packaging such that existing Ice for JavaScript programs 869 will need to modify their require statements. For example, to use Ice you 870 would now write: 871 `var Ice = require("icejs").Ice;` 872 873## Objective-C Changes 874 875- The Objective-C headers are now installed under the `include/objc` directory. 876 You will need to change the `#import` in your code to import `objc/Ice.h` 877 where you were previously importing `Ice/Ice.h`. You will need to make similar 878 changes as well if you include headers for Ice services: 879 `IceStorm/IceStorm.h`, `IceGrid/IceGrid.h`, `Glacier2/Glacier2.h` should be 880 changed to `objc/IceStorm.h`, `objc/IceGrid.h`, `objc/Glacier2.h` 881 respectively. 882 883- The IceSSL types are no longer included with the `IceObjC` library. You should 884 now import `objc/IceSSL.h` in your source code and link with the `IceSSLObjC` 885 library if you need to use IceSSL types (`ICESSLEndpointInfo` and 886 `IceSSLConnectionInfo`). 887 888- The Ice run time local interfaces (such as `ICECommunicator`, 889 `ICEObjectAdapter`, etc.) are now generated from the Slice definitions. 890 891- Added support for the `[objc:param:ID]` metadata to allow changing the 892 generated identifier for the parameter in the generated interface selector for 893 a Slice operation. For example, the Slice operation 894 `void op(int a, ["objc:param:withB"] int b)` will be generated as the selector 895 `op:(int)a withB:(int)b`. 896 897- Added support for servant locators. 898 899- The default constructor for a Slice structure, exception or class now 900 initializes string, structure or enumerator data members. A string data member 901 is initialized to the empty string, a structure data member is initialized 902 with a new default-constructed structure, and an enumerator is initialized 903 with the first enumerator value. 904 905## PHP Changes 906 907- Passing null for a Slice structure is now tolerated, an empty structure will 908 be marshaled. 909 910- Added support for PHP 5.6. 911 912- Added `ice_staticId` to generated proxy helper classes. 913 914- Generated interfaces now extend the `Object` base interface. 915 916- Added `ObjectPrxHelper` class. 917 918## Python Changes 919 920- Passing `None` for a Slice structure is now tolerated, an empty structure will 921 be marshaled. 922 923- Added support for Python 3.4. 924 925- Changed the semantics of `Ice.Unset` so that it evaluates as false in a 926 boolean context. 927 928- Fixed a bug in the Slice-to-Python translator that eliminates the use of 929 implicit relative imports for nested Slice modules. 930 931- Added `ice_staticId` to generated proxy classes. 932 933## Ruby Changes 934 935- Passing null for a Slice structure is now tolerated, an empty structure will 936 be marshaled. 937 938- Added support for Ruby 2.1. 939 940- Added `ice_staticId` to generated proxy classes. 941