Course Overview

The training course covers the Ice object model, Slice definition language, language mappings, object life cycle, threading, and a number of server implementation techniques for a variety of application requirements. In addition, the course covers how to use Glacier2 to allow communication through firewalls, and it describes the use of IceGrid for location transparency and automatic server activation.

Introduction

Overview of Ice object model, programming model, terminology, and services.

The Slice Definition Language

This section covers the use of Slice for single-language and cross-language development, and explores the built-in and user-defined types. It explores the semantics of the object model and shows how to create interfaces and classes with their associated operations, exceptions, and state, including inheritance, polymorphism, late binding, and the differences between pass-by-value and pass-by-reference. A hands-on exercise expores how to create and compile Slice definitions.

Client-Side Mapping

This section covers the C++/Java language mapping in detail and explains how the various language-independent constructs map to programming-language types. It shows how to obtain proxies, make invocation, and handle exceptions, as well as how to initialize and finalize the Ice run time. A hands-on exercise covers how to create a complete working client.

Server-Side Mapping

This section covers the C++/Java language mapping for the server side. This includes how to implement objects and operations, create object adapters and register servants with the Ice run time, and how to initialize and terminate the server-side run time (including reacting to signals). A hands-on exercise shows how to create a complete working server.

Properties and Configuration

This section covers how to configure the Ice run time using the command line, configuration files, and the property API. In addition, it covers how to extend configuration to include application-specific properties. A hands-on exercise explores how to use properties for both Ice and application-specific configuration.

Multi-threaded Ice

This section explores the Ice threading model and how to configure the Ice run time to cater for the threading needs of an application. For C++, it shows how to use the Ice's threading API for platform-independent synchronization and thread handling. The use of threads has a large impact on the performance of applications; the material explores threading strategies required by real-world applications. A hands-on exercise explores thread-safety issues for servers.

Object Life Cycle

This section covers object life cycle, that is, how to correct create and destroy objects, particularly with respect to thread-safety. It explores important issues regarding the object model and how to deal with robustness of servers having to deal with abandoned objects. A hands-on exercise explores how to add life cycle operations to a threaded application.

Glacier2

Glacier2 allows clients to communicate with servers across firewalls. The section explains Glacier2 concepts and configuration, shows how to establish secure sessions, and how to administer Glacier2. Topics include selecting the appropriate forwarding mode, how to deal with timeouts, using custom-session management, and how to make callbacks from server to client over bidirectional connections. A hands-on exercise explores how to modify a client to communicate with a server via Glacier2.

IceGrid

IceGrid (among other things) provides location transparency and automatic server activation and deactivation. This section outlines the IceGrid architecture and covers IceGrid configuration and administration, including security concerns. A hands-on exercise shows how to use IceGrid to achieve location transparency and automatic server activation.

The Ice Run Time in Detail

This section covers advanced aspects of the Ice run time, specifically with respect to scaling an application to millions of objects. It explores a number of implementation techniques that are important for real-world applications such as lazy initialization, caching, stateless server designs, and how to control the speed–memory trade-off with the use of evictors.

Terms of Use | Privacy © 2011 ZeroC, Inc.