diff options
author | Mark Spruiell <mes@zeroc.com> | 2009-12-18 14:49:00 -0800 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2009-12-18 14:49:00 -0800 |
commit | 2c15784dd57f2a53b0357e3aab035b670ba15cb0 (patch) | |
tree | bee8587bdfc081f21547142d173eb5732c805c92 | |
parent | Bug 4512: demo/book/evictor_filesystem issues (diff) | |
download | ice-2c15784dd57f2a53b0357e3aab035b670ba15cb0.tar.bz2 ice-2c15784dd57f2a53b0357e3aab035b670ba15cb0.tar.xz ice-2c15784dd57f2a53b0357e3aab035b670ba15cb0.zip |
edits to CHANGES & RELEASE_NOTES
-rw-r--r-- | CHANGES | 4 | ||||
-rw-r--r-- | RELEASE_NOTES | 589 |
2 files changed, 169 insertions, 424 deletions
@@ -381,8 +381,8 @@ C++ Changes - Added the ability to use alternative database storage for IceStorm and IceGrid other than Freeze. The following SQL databases are - supported: SQLite, PostgresSQL, MySQL and SQL Server. Please see - the manual for more information. + 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. diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 0dfb693bdd7..cc985221e04 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -18,12 +18,25 @@ Table of Contents ----------------- 1. New Features + - New API for Asynchronous Method Invocation (AMI) + - Better scalability + - New Dispatcher facility + - Glacier2 utility classes + - Default servants + - Alternate storage for IceGrid and IceStorm + - Connection and endpoint information + - New Slice compiler and API for PHP + - Slice comments + - Properties in the Windows registry + - New sample programs 2. Upgrading your application from Ice 3.3 - Java language mapping changes - Changes to the Java API for Freeze maps - Freeze packaging - PHP changes - IceSSL changes + - Removed APIs + - Deprecated APIs 3. Upgrading your application from Ice 3.2 or earlier releases - Compatibility - Migrating IceStorm databases @@ -54,11 +67,10 @@ New API for Asynchronous Method Invocation (AMI) ------------------------------------------------ This release features a completely new AMI facility for C++, C# and -Java that provides you with much greater flexibility in the ways you -can structure your code. To get a better understanding of the -motivations for this enhancement and how it can improve your own -applications, we encourage you to read the white papers available at -the link below: +Java that allows you to structure your code with much greater +flexibility. To get a better understanding of the motivations for this +enhancement and how it can improve your own applications, we encourage +you to read the white papers available at the link below: http://www.zeroc.com/articles/index.html @@ -100,9 +112,9 @@ install a custom dispatcher to guarantee that all of your servant and callback invocations are made in a thread that can safely update the user interface. -We have updated the MFC-based C++ sample application and added a -Swing-based Java example along with a WPF-based C# example to -demonstrate this new feature. +This technique is demonstrated in a sample application for each of +the language mappings: refer to the "MFC" demo in C++, the "swing" +demo in Java, and the "wpf" demo in C#. Glacier2 utility classes @@ -110,178 +122,103 @@ Glacier2 utility classes Some effort is required to write an application that correctly manages a Glacier2 session. To simplify this task, we have added utility -classes in C++, C# and Java that manage the session for you. +classes in C++, C#, Java and Python that manage the session for you. -All three language mappings include a new subclass of Ice::Application -named Glacier2::Application that is intended to be used by command- -line applications that require a Glacier2 session. The class takes -care of establishing the session, keeping it alive, and recovering -from session failures. +For all of these language mappings, Ice includes a new subclass of +Ice::Application named Glacier2::Application that is intended to be +used by command-line applications that require a Glacier2 session. The +class takes care of establishing the session, keeping it alive, and +recovering from session failures. In Java and C#, Ice also includes the Glacier2.SessionHelper class for -use in graphical applications that performs many of the same tasks as -Glacier2.Application. - - -Using Active Connection Management (ACM) in Glacier2 ----------------------------------------------------- - -TBD - -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. +use in graphical applications. This class performs many of the same +tasks as Glacier2.Application. Default servants ---------------- -TBD - -Added the following operations to the ObjectAdapter API: - - - addDefaultServant - - removeDefaultServant - - findDefaultServant +The traditional way of implementing a default servant was to install a +servant locator that returned the same servant for every request. +However, since default servants are one of the most common use cases +for servant locators, we have made them easier to use by adding new +operations to the ObjectAdapter interface. If you make use of default +servants, you can simplify your code by migrating your application to +this new API. Alternate storage for IceGrid and IceStorm ------------------------------------------ -TBD +IceStorm and the IceGrid registry now have the ability to use a SQL +database instead of Freeze for their persistent storage requirements. +This release supports SQLite on all platforms and PostgreSQL on Unix +platforms. If you would like to see support added for other SQL +servers, please contact info@zeroc.com. -Added the ability to use alternative database storage for IceStorm -and IceGrid other than Freeze. The following SQL databases are -supported: SQLite, PostgresSQL, MySQL and SQL Server. Please see -the manual for more information. - -Connection and Endpoint information +Connection and endpoint information ----------------------------------- -TBD +Ice developers frequently want to obtain information about connections +and endpoints, as evidenced by the numerous inquiries on the user +forum about this issue. For example, the developer may want to know +the IP address of a remote client. This information was available in +prior releases, but not in a form that was easy to manipulate. + +Now it is possible to obtain more details about connections and +endpoints with the addition of the ConnectionInfo and EndpointInfo +class hierarchies. Using these classes, you can discover addresses, +ports, and other attributes of a connection or endpoint. -- ConnectionInfo/EndpointInfo -Added ability to get information from endpoints such as host and -port without having to parse the stringified endpoint. +As always, we caution against using such addressing information for +authentication purposes, as IP addresses can easily be forged. New Slice compiler and API for PHP ---------------------------------- -TBD - -See XXX +Significant changes have been made to the PHP mapping and API. For +example, Ice for PHP now uses static translation via the new slice2php +compiler, and the language mapping is now more consistent with that +of Python and Ruby. For more information on migrating your PHP +application, please refer to the section titled "PHP changes" below. Slice comments -------------- -TBD - -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. +This release offers several improvements that will be appreciated by +developers, especially those that use integrated development +environments (IDEs): + +* The Slice compilers for Java, C#, and Python now preserve Slice + comments in the generated code. -slice2java now preserves javadoc comments that appear in the Slice -source and writes them through to the corresponding APIs in the -generated code. +* Doc comments have been added to the native Ice APIs. -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 JAR files for Ice and Freeze include source code to allow IDEs + such as Eclipse to browse the Ice source code and to display javadoc + comments. -The build for Ice now generates the <assembly>.xml file for each -assembly and installs it, so Visual C# displays tooltips for Ice -APIs. - -Slice comments are now converted into Python docstrings in the -generated code. +* For C# users that compile generated Slice code into an assembly, you + can now instruct Visual C# to emit documentation comments into an + XML file for your assembly. This enables the IDE to display tooltips + for your Slice definitions. Ice generates these XML files for its + own assemblies so that you can view tooltips for the Ice APIs as + well. Properties in the Windows registry ---------------------------------- -TBD - -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. - - -Features added with 3.3.1 -========================= - - -Java and .NET serialization ---------------------------- - -This release adds support for Java and .NET serializable classes. You -can now enable the serialization, transmission, and deserialization -of Java and .NET classes with a simple metadata directive. As an -example, the Slice definition shown below specifies the name of a -serializable Java class: - -// Slice -["java:serializable:Demo.MyGreeting"] sequence<byte> Greeting; - -This definition allows you to transfer instances of Demo.MyGreeting as -a byte sequence while Ice handles the low-level serialization chores. - -You can read more about this feature in the Ice manual. We have also -included a new sample program for each of the supported languages. - - -Background locator updates --------------------------- - -For an indirect proxy, the Ice run time queries the locator and caches -the resulting endpoints. By default, Ice caches these endpoints -indefinitely unless the proxy is configured with a cache timeout, in -which case Ice must update the cached endpoints after the timeout -expires by issuing a new locator query. This update occurs upon the -next invocation on the proxy, and in previous releases the update -would delay the invocation until the new endpoints were obtained from -the locator. - -This update can now be performed in the background by setting the new -property Ice.BackgroundLocatorCacheUpdates to 1. With this feature -enabled, Ice allows the invocation that triggered the update to use -the previously-cached endpoints while the locator query completes in -the background. - - -Glacier2 session destruction ----------------------------- - -Glacier2 now automatically destroys 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). - - -Java Applets ------------- - -It is now possible to use Ice for Java in an applet. Additionally, -IceSSL can now obtain keystores, truststores, and RNG seeds from class -path resources using configuration properties or programmatically -using input streams. +Ice configuration properties can now be loaded from the Windows +registry by specifying a registry key as the value of the Ice.Config +property. Ice programs that run as Windows services are likely to make +use of this feature because it avoids the need to hard-code properties +in the application, eliminates the dependency on a configuration file, +and allows the program's configuration settings to be edited using +familiar registry tools. New sample programs @@ -289,146 +226,65 @@ New sample programs This release adds the following sample programs: - - serialize (.NET, Java) - - Shows how to transfer serializable classes with Ice. - - - nrvo (C++) - - Highlights the benefits of Named Return Value Optimization (NRVO). - See the section titled "Upgrading your application from Ice 3.3.0" - for more information on NRVO. - - - applet (Java) - - Shows how to use asynchronous invocations in an applet and how to - configure IceSSL using class path resources. - - - Database (Java) - - A client/server application in which the server accesses MySQL via - the JDBC API. - - -Features added with 3.3.0 -========================= - - -AMI ---- - -AMI requests are now guaranteed non-blocking. New proxy methods, -ice_flushBatchRequests and ice_flushBatchRequests_async, allow -flushing of requests batched for a connection. The latter method -is guaranteed to not block. AMI requests can now be sent oneway. - - -Threads -------- - -The Ice thread pool now supports serialization of requests received -over a connection. - - -Exceptions ----------- - -Exceptions thrown from collocation-optimized invocations are now fully -transparent, so a collocated invocation raises the same exception as a -remote invocation. (Previously, a collocated invocation raised the -original exception whereas the corresponding remote invocation raised -an unknown exception.) - -Servant locators now can throw a user exception from the locate and -finished operations. - - -Transports ----------- - -The run time now tries to connect to multi-homed hosts on all IP -addresses returned by the DNS. - -Ice.TCP.Backlog allows control of the incoming connection backlog. - -Ice now supports IPv6. - -Ice now supports UDP multicast. - -A new adapter operation, refreshPublishedEndpoints, permits you to -update an adapter's published endpoints after a change to the -available network interfaces or an update to the PublishedEndpoints -property. - -Ice now listens on INADDR_ANY for endpoints that do not specify a -host, instead of listening only on the interfaces that were present -when the adapter was created. - - -IceBox ------- - -IceBox can now recursively start and stop other IceBox services. - -IceBox properties can now be defined on the command line. - -Setting IceBox.ServiceManager.Endpoints is now optional. - - -IceStorm --------- + - map_filesystem (C++, Java) -IceStorm now supports master/slave replication with automatic -failover. + Shows how to implement the filesystem application using a Freeze + map. -IceStorm now has a transient mode that allows it to run without a -database. + - interleaved (C++) -IceStorm subscriptions are now persistent (except in transient mode). + Uses interleaved asynchronous invocations to achieve maximum + throughput. -A new QoS parameter, retryCount, allows you to control after how many -soft failures a subscription is removed. + - plugin (C++, Java, C#) -A new replication2 demo illustrates how to manually configure -replication. + Demonstrates how to write an Ice plug-in. -IceStorm now guarantees ordering by default even for oneway proxies. + - chat (Java, C#) + A graphical chat client that uses Glacier2 to communicate with + a C++ server. -Freeze ------- + - swing (Java) + wpf (C#) -The existing evictor is now named BackgroundSaveEvictor. A new -evictor, TransactionalEvictor, makes updates in a transaction. + Graphical versions of the hello client. + - hello (PHP) -IceGrid -------- + A Glacier2 client that demonstrates the use of registered + communicators. -A new secure demo illustrates how to secure an IceGrid deployment. +====================================================================== +2. Upgrading your application from Ice 3.3 +====================================================================== -Miscellaneous features ----------------------- - -Ice for Java now supports the ICE_CONFIG environment variable. +Ice 3.4 does not maintain backward binary compatibility with +applications built using Ice 3.3, but every effort was made to +preserve source compatibility. Note however that Ice always maintains +protocol ("on the wire") compatibility with prior releases. -Ice.Application now supports signal handling with Mono. +The requirements for upgrading depend on the language mapping used by +your application: -Improved marshaling performance with Ice for .NET. +- For statically-typed languages (C++, Java, .NET), the application + must be recompiled. -Ice for .NET now supports C# 2.0 generics for sequences and -dictionaries. +- For scripting languages that use static translation, your Slice + files must be recompiled. -Ice for Python now includes a converter demo that illustrates -how to use the C++ string converter plug-in. +If your application uses IceStorm or IceGrid, please refer to the +relevant sections below for migration instructions. -Ice for Python now supports blobjects. - - -====================================================================== -2. Upgrading your application from Ice 3.3 -====================================================================== +Finally, certain APIs that were deprecated in previous Ice releases +have been removed in this release. If your application relied on one +of these APIs, it may no longer compile or execute correctly. A list +of the removed APIs is provided in the section titled "Removed APIs" +along with a description of their replacements. Furthermore, the +section "Deprecated APIs" discusses APIs that are deprecated as of +this release; we encourage you to update your applications and +eliminate the use of these APIs as soon as possible. Java language mapping changes @@ -1195,192 +1051,81 @@ implications for existing applications: IceSSL::NativeConnectionInfoPtr::dynamicCast(con->getInfo()); -================ -OLD -================ - -Since Ice 3.3.1 maintains binary compatibility with Ice 3.3.0, it is -not necessary for you to recompile your Slice files or your program -code, nor is it necessary to relink your application. The database -formats used by Ice services such as IceGrid and IceStorm have not -changed, therefore no database migration is required. Finally, this -release has not removed or deprecated any APIs. Generally speaking, -you are free to use any combination of Ice 3.3.0 or Ice 3.3.1 -applications and Ice services. - -The subsections below provide additional information about upgrading -to Ice 3.3.1, including administrative procedures for the supported -platforms. - - -NRVO in C++ ------------ - -Named Return Value Optimization (NRVO) is a C++ compiler feature that -can improve the marshaling performance of Ice applications that -return large data structures. The Slice-to-C++ compiler (slice2cpp) in -Ice 3.3.1 generates code for client-side stubs with a structure that -is slightly different than in previous Ice releases to make the code -eligible for NRVO with GNU C++ (GCC). - -Note that this enhancement to the generated code in Ice 3.3.1 only -affects client-side stubs, and is only necessary to satisfy the NRVO -requirements for GCC. If you use GCC and you wish to take advantage of -this optimization in your client-side invocations, you must recompile -your Slice files as well as the resulting generated code, and then -relink your application. No action is necessary for Visual C++ users. - - -RPMs (Linux) ------------- - -For RPM installations, you can use the Ice 3.3.1 RPMs to upgrade an -existing installation of Ice 3.3.0. - -For a Java application, no additional steps are necessary if your -CLASSPATH refers to /usr/share/java/Ice.jar, which is a symbolic link -that points to the actual version-specific JAR file. - -For a Mono application, the ice-mono RPM for Ice 3.3.1 installs the -updated Ice run time assemblies into the Global Assembly Cache (GAC) -along with policy assemblies that enable backward compatibility with -Ice 3.3.0. - - -Windows -------- - -The file names of the Ice for C++ run time DLLs do not contain the -patch number of a release. For example, the core Ice DLL uses the same -name (ice33.dll) for both Ice 3.3.0 and Ice 3.3.1. As a result, you -can simply substitute the 3.3.1 DLLs for the 3.3.0 DLLs. If you -install the 3.3.1 DLLs in a different directory, you will typically -need to adjust the PATH setting of a C++ application so that it can -locate the new libraries. This also applies to Python, Ruby, and PHP -applications because they use the Ice for C++ DLLs. - -For a Java application, you can replace the existing Ice.jar file -with the one from Ice 3.3.1, or you can adjust the CLASSPATH setting -to point to the new JAR file. - -For a .NET application, Ice for .NET includes policy assemblies that -supply the .NET run time with the required compatibility information. -Policy assemblies have names of the form policy.3.3.<package>.dll. -For example, the policy assembly for IceBox is policy.3.3.IceBox.dll. -One way to upgrade an existing .NET application to a new patch release -while maintaining binary compatibility is to install the policy -assemblies into the Global Assembly Cache (GAC) using one of the -following methods: - - - Open Windows Explorer and navigate to the directory - C:\WINDOWS\assembly. Next, drag and drop (or copy and paste) the - assemblies into the right-hand pane to install them in the GAC. - - - Use gacutil from the command line: - - > gacutil -i <policy.dll> - -Another option is to modify the .config file of your application to -add bindingRedirect directives, as explained in the links below: - - http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx - http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx - -For example, in the .config file of an application you can modify the -configuration of the Ice assembly as follows: - - <dependentAssembly> - <assemblyIdentity name="Ice" culture="neutral" - publicKeyToken="cdd571ade22f2f16"/> - <bindingRedirect oldVersion="3.3.0.0" newVersion="3.3.1.0"/> - <codeBase version="3.3.1.0" href="...\Ice.dll"/> - </dependentAssembly> +Removed APIs +============ -The advantage of installing the policy assemblies into the GAC is that -they establish binary compatibility for all Ice applications, whereas -modifying a .config file must be done for each application -individually. +Release 3.4.0 removed a number of APIs. These APIs are no longer +available. -On a development system, it is not necessary to remove your existing -Ice installation prior to installing Ice 3.3.1 unless you intend to -install Ice 3.3.1 in the same directory as your existing installation. -You may need to update your PATH setting and modify your Visual C++ -directory configurations to reflect the installation directory for -Ice 3.3.1. +* Glacier2.AddUserToAllowCategories +* Glacier2.AllowCategories +* Ice.UseEventLog + These properties were deprecated in Ice 3.2. -Binary Archives (Mac OS X, Solaris) ------------------------------------ +* Communicator::setDefaultContext +* Communicator::getDefaultContext +* ObjectPrx:ice_defaultContext -The README file included in each binary distribution archive -describes how to configure your environment so that the embedded -path names in the Ice for C++ shared libraries are resolved correctly. -For example, if you extracted the binary distribution for Ice 3.3.0 -into /opt/Ice-3.3.0, the README file instructs you to create the -following symbolic link: + These operations were deprecated in Ice 3.2. - /opt/Ice-3.3 -> /opt/Ice-3.3.0 +* nonmutating keyword -To upgrade to Ice 3.3.1, you simply extract the binary distribution -archive into /opt/Ice-3.3.1 and reset the symbolic link to point to -the new installation: + This keyword is no longer supported. - /opt/Ice-3.3 -> /opt/Ice-3.3.1 +* Freeze.UseNonmutating -No additional steps are necessary for a Java application if its -CLASSPATH refers to the JAR file via the symbolic link: + Support for this property was removed along with the nonmutating + keyword. - export CLASSPATH=/opt/Ice-3.3/lib/Ice.jar +* Ice::NegativeSizeException -This also applies for Python and Ruby applications: + The run time now throws UnmarshalOutOfBoundsException or + MarshalException instead. - export PYTHONPATH=/opt/Ice-3.3/python - export RUBYLIB=/opt/Ice-3.3/ruby +* slice2docbook + This utility is no longer included in Ice. -Source Distribution (Linux, Mac OS X, Solaris) ----------------------------------------------- +* Ice::AMD_Array_Object_ice_invoke -If you compiled an Ice 3.3.0 source distribution and installed it via -"make install", the installation process created a symbolic link in -the target directory (/opt by default) that points to the 3.3.0 -subdirectory: + A new overloading of ice_response in the AMD_Object_ice_invoke class + makes AMD_Array_Object_ice_invoke obsolete. - /opt/Ice-3.3 -> /opt/Ice-3.3.0 +* Java2 mapping -When you build and install an Ice 3.3.1 source distribution, this -symbolic link is reset to point to the 3.3.1 installation: + The Java2 mapping is no longer supported. - /opt/Ice-3.3 -> /opt/Ice-3.3.1 -If an application resolves its Ice run time via the symbolic link, -that application will automatically use the Ice 3.3.1 run time for its -next execution. The relevant environment variables for each language -mapping are detailed below. +Deprecated APIs +--------------- -C++, Ruby, Python, PHP: +The Ice APIs and components listed below are deprecated. We encourage +you to update your applications and eliminate the use of these APIs as +soon as possible. - export LD_LIBRARY_PATH=/opt/Ice-3.3/lib (32-bit Linux & 32-bit Solaris) - export LD_LIBRARY_PATH=/opt/Ice-3.3/lib64 (64-bit Linux) - export LD_LIBRARY_PATH_64=/opt/Ice-3.3/lib/amd64 (64-bit Solaris Intel) - export LD_LIBRARY_PATH_64=/opt/Ice-3.3/lib/sparcv9 (64-bit Solaris SPARC) - export DYLD_LIBRARY_PATH=/opt/Ice-3.3/lib (Mac OS X) +* Asynchronous Method Invocation (AMI) interface -Python: + The AMI interface in Ice 3.3 and earlier is now deprecated for C++, + Java, and C#. - export PYTHONPATH=/opt/Ice-3.3/python +* Glacier2.AddSSLContext -Ruby: + Replaced by Glacier2.AddConnectionContext. - export RUBYLIB=/opt/Ice-3.3/ruby +* Standard platform methods should be used instead of the following: -Java: + Ice.Object.ice_hash() // Use hashCode + Ice.ObjectPrx.ice_getHash() // Use hashCode + Ice.ObjectPrx.ice_toString() // Use toString - export CLASSPATH=/opt/Ice-3.3/lib/Ice.jar + In Java, use hashCode and toString. In C#, use GetHashCode and + ToString. In Ruby, use hash instead of ice_getHash. -Mono: +* Ice.Util.generateUUID() - export MONO_PATH=/opt/Ice-3.3/bin + In Java use java.util.UUID.randomUUID().toString(). In C# use + System.Guid.NewGuid.ToString(). ====================================================================== |