The rise of object-oriented middleware in the mid-nineties was an important step forward toward making distributed computing available to application developers. For the first time, it was possibe to build ...
The rise of object-oriented middleware in the mid-nineties was an important step
forward toward making distributed computing available to application developers.
For the first time, it was possibe to build distributed applications without having to
be a networking guru: the middleware platform took care of the majority of
networking chores, such as marshaling and unmarshaling (encoding and decoding
data for transmission), mapping logical object addresses to physical transport
endpoints, changing the representation of data according to the native machine
architecture of client and server, and automatically starting servers on demand.
Despite these advances, the leading object-oriented middleware platforms
suffered from a number of serious practical limitations that prompted ZeroC to
develop the Internet Communications Engine, or Ice for short.1 The main design
goals of Ice are:
• Provide an object-oriented middleware platform suitable for use in heteroge-
• Provide a full set of features that support development of realistic distributed
applications for a wide variety of domains.
• Avoid unnecessary complexity, making the platform easy to learn and to use.
• Provide an implementation that is efficient in network bandwidth, memory
use, and CPU overhead.
• Provide an implementation that has built-in security, making it suitable for use over insecure public networks.
To be more simplistic, the Ice design goals could be stated as “Let’s build a more
powerful middleware platform that makes the developer’s life easier and avoids
the mistakes of its predecessors.”
This book is divided into four parts and a number of appendixes:
• Part I: Ice Overview provides an overview of the features offered by Ice and
explains the Ice object model. After reading this part, you will understand the
major features and architecture of the Ice platform, its object model and
request dispatch model, and know the basic steps required to build a simple
application in C++, Java, C#, Visual Basic, Objective-C, Python, and Ruby.
• Part II: Slice explains the Slice definition language. After reading this part,
you will have detailed knowledge of how to specify interfaces and types for a
• Part III through Part IX cover language mappings. Each section shows how to
implement an application in your language of choice.
• Part X: Advanced Ice presents many Ice features in detail and covers advanced
aspects of server development, such as properties, threading, object life cycle,
object location, persistence, and asynchronous as well as dynamic method
invocation and dispatch. After reading this part, you will understand the
advanced features of Ice and how to effectively use them to find the correct
trade-off between performance and resource consumption as appropriate for
your application requirements.
• Part XI: Ice Services covers the services provided with Ice, such as IceGrid (a
sophisticated deployment tool), Glacier2 (the Ice firewall solution), IceStorm
(the Ice messaging service), and IcePatch2 (a software patching service).2
• Appendixes contain Ice reference material and explain the feature differences
between Ice and Ice-E (the version of Ice for embedded systems).