Table of Contents Chapter 1 Introduction 1.1 Introduction 1.2 The Internet Communications Engine (Ice) 1.3 Organization of this Book 1.4 Typographical Conventions 1.5 Source Code Examples 1.6 Contacting the Authors 1.7 Ice Support Chapter 2 Ice Overview 2.1 Chapter Overview 2.2 The Ice Architecture 2.3 Ice Services 2.4 Architectural Benefits of Ice 2.5 A Comparison with CORBA Chapter 3 A Hello World Application 3.1 Chapter Overview 3.2 Writing a Slice Definition 3.3 Writing an Ice Application with C++ 3.4 Writing an Ice Application with Java 3.5 Writing an Ice Application with C# 3.6 Writing an Ice Application with Visual Basic 3.7 Writing an Ice Application with Python 3.8 Writing an Ice Application with Ruby 3.9 Summary Chapter 4 The Slice Language 4.1 Chapter Overview 4.2 Introduction 4.3 Compilation 4.4 Source Files 4.5 Lexical Rules 4.6 Modules 4.7 The Ice Module 4.8 Basic Slice Types 4.9 User-Defined Types 4.10 Interfaces, Operations, and Exceptions 4.11 Classes 4.12 Forward Declarations 4.13 Type IDs 4.14 Operations on Object 4.15 Local Types 4.16 Names and Scoping 4.17 Metadata 4.18 Deprecating Slice Definitions 4.19 Using the Slice Compilers 4.20 Slice Checksums 4.21 A Comparison of Slice and CORBA IDL 4.22 Generating Slice Documentation 4.23 Summary Chapter 5 Slice for a Simple File System 5.1 Chapter Overview 5.2 The File System Application 5.3 Slice Definitions for the File System 5.4 The Complete Definition Chapter 6 Client-Side Slice-to-C++ Mapping 6.1 Chapter Overview 6.2 Introduction 6.3 Mapping for Identifiers 6.4 Mapping for Modules 6.5 The Ice Namespace 6.6 Mapping for Simple Built-In Types 6.7 Mapping for User-Defined Types 6.8 Mapping for Constants 6.9 Mapping for Exceptions 6.10 Mapping for Run-Time Exceptions 6.11 Mapping for Interfaces 6.12 Mapping for Operations 6.13 Exception Handling 6.14 Mapping for Classes 6.15 slice2cpp Command-Line Options 6.16 Using Slice Checksums 6.17 A Comparison with the CORBA C++ Mapping Chapter 7 Developing a File System Client in C++ 7.1 Chapter Overview 7.2 The C++ Client 7.3 Summary Chapter 8 Server-Side Slice-to-C++ Mapping 8.1 Chapter Overview 8.2 Introduction 8.3 The Server-Side main Function 8.4 Mapping for Interfaces 8.5 Parameter Passing 8.6 Raising Exceptions 8.7 Object Incarnation 8.8 Summary Chapter 9 Developing a File System Server in C++ 9.1 Chapter Overview 9.2 Implementing a File System Server 9.3 Summary Chapter 10 Client-Side Slice-to-Java Mapping 10.1 Chapter Overview 10.2 Introduction 10.3 Mapping for Identifiers 10.4 Mapping for Modules 10.5 The Ice Package 10.6 Mapping for Simple Built‑In Types 10.7 Mapping for User-Defined Types 10.8 Mapping for Constants 10.9 Mapping for Exceptions 10.10 Mapping for Run-Time Exceptions 10.11 Mapping for Interfaces 10.12 Mapping for Operations 10.13 Exception Handling 10.14 Mapping for Classes 10.15 Customizing the Java Mapping 10.16 slice2java Command-Line Options 10.17 Using Slice Checksums Chapter 11 Developing a File System Client in Java 11.1 Chapter Overview 11.2 The Java Client 11.3 Summary Chapter 12 Server-Side Slice-to-Java Mapping 12.1 Chapter Overview 12.2 Introduction 12.3 The Server-Side main Function 12.4 Mapping for Interfaces 12.5 Parameter Passing 12.6 Raising Exceptions 12.7 Tie Classes 12.8 Object Incarnation 12.9 Summary Chapter 13 Developing a File System Server in Java 13.1 Chapter Overview 13.2 Implementing a File System Server 13.3 Summary Chapter 14 Client-Side Slice-to-C# Mapping 14.1 Chapter Overview 14.2 Introduction 14.3 Mapping for Identifiers 14.4 Mapping for Modules 14.5 The Ice Namespace 14.6 Mapping for Simple Built‑In Types 14.7 Mapping for User-Defined Types 14.8 Mapping for Dictionaries 14.9 Mapping for Constants 14.10 Mapping for Exceptions 14.11 Mapping for Interfaces 14.12 Mapping for Operations 14.13 Exception Handling 14.14 Mapping for Classes 14.15 C#-Specific Metadata Directives 14.16 slice2cs Command-Line Options 14.17 Using Slice Checksums Chapter 15 Developing a File System Client in C# 15.1 Chapter Overview 15.2 The C# Client 15.3 Summary Chapter 16 Server-Side Slice-to-C# Mapping 16.1 Chapter Overview 16.2 Introduction 16.3 The Server-Side Main Method 16.4 Mapping for Interfaces 16.5 Parameter Passing 16.6 Raising Exceptions 16.7 Tie Classes 16.8 Object Incarnation 16.9 Summary Chapter 17 Developing a File System Server in C# 17.1 Chapter Overview 17.2 Implementing a File System Server 17.3 Summary Chapter 18 Client-Side Slice-to-Visual Basic Mapping 18.1 Chapter Overview 18.2 Introduction 18.3 Mapping for Identifiers 18.4 Mapping for Modules 18.5 The Ice Namespace 18.6 Mapping for Simple Built‑In Types 18.7 Mapping for User-Defined Types 18.8 Mapping for Dictionaries 18.9 Mapping for Constants 18.10 Mapping for Exceptions 18.11 Mapping for Interfaces 18.12 Mapping for Operations 18.13 Exception Handling 18.14 Mapping for Classes 18.15 VB-Specific Metadata Directives 18.16 slice2vb Command-Line Options 18.17 Using Slice Checksums Chapter 19 Developing a File System Client in Visual Basic 19.1 Chapter Overview 19.2 The VB Client 19.3 Summary Chapter 20 Server-Side Slice-to-Visual Basic Mapping 20.1 Chapter Overview 20.2 Introduction 20.3 The Server-Side Main Method 20.4 Mapping for Interfaces 20.5 Parameter Passing 20.6 Raising Exceptions 20.7 Tie Classes 20.8 Object Incarnation 20.9 Summary Chapter 21 Developing a File System Server in Visual Basic 21.1 Chapter Overview 21.2 Implementing a File System Server 21.3 Summary Chapter 22 Client-Side Slice-to-Python Mapping 22.1 Chapter Overview 22.2 Introduction 22.3 Mapping for Identifiers 22.4 Mapping for Modules 22.5 The Ice Module 22.6 Mapping for Simple Built‑In Types 22.7 Mapping for User-Defined Types 22.8 Mapping for Constants 22.9 Mapping for Exceptions 22.10 Mapping for Run-Time Exceptions 22.11 Mapping for Interfaces 22.12 Mapping for Operations 22.13 Exception Handling 22.14 Mapping for Classes 22.15 Code Generation 22.16 Using Slice Checksums Chapter 23 Developing a File System Client in Python 23.1 Chapter Overview 23.2 The Python Client 23.3 Summary Chapter 24 Server-Side Slice-to-Python Mapping 24.1 Chapter Overview 24.2 Introduction 24.3 The Server-Side main Program 24.4 Mapping for Interfaces 24.5 Parameter Passing 24.6 Raising Exceptions 24.7 Object Incarnation 24.8 Summary Chapter 25 Developing a File System Server in Python 25.1 Chapter Overview 25.2 Implementing a File System Server 25.3 Thread Safety 25.4 Summary Chapter 26 Client-Side Slice-to-Ruby Mapping 26.1 Chapter Overview 26.2 Introduction 26.3 Mapping for Identifiers 26.4 Mapping for Modules 26.5 The Ice Module 26.6 Mapping for Simple Built‑In Types 26.7 Mapping for User-Defined Types 26.8 Mapping for Constants 26.9 Mapping for Exceptions 26.10 Mapping for Run-Time Exceptions 26.11 Mapping for Interfaces 26.12 Mapping for Operations 26.13 Exception Handling 26.14 Mapping for Classes 26.15 Code Generation 26.16 Using Slice Checksums Chapter 27 Developing a File System Client in Ruby 27.1 Chapter Overview 27.2 The Ruby Client 27.3 Summary Chapter 28 Ice Extension for PHP 28.1 Chapter Overview 28.2 Introduction 28.3 Configuration 28.4 Client-Side Slice-to-PHP Mapping Chapter 29 Developing a File System Client in PHP 29.1 Chapter Overview 29.2 The PHP Client 29.3 Summary Chapter 30 Ice Properties and Configuration 30.1 Chapter Overview 30.2 Properties 30.3 Configuration Files 30.4 Setting Properties on the Command Line 30.5 The Ice.Config Property 30.6 Command-Line Parsing and Initialization 30.7 The Ice.ProgramName property 30.8 Using Properties Programmatically 30.9 Summary Chapter 31 Threads and Concurrency with C++ 31.1 Chapter Overview 31.2 Introduction 31.3 Library Overview 31.4 Mutexes 31.5 Recursive Mutexes 31.6 Read-Write Recursive Mutexes 31.7 Timed Locks 31.8 Monitors 31.9 Efficiency Considerations 31.10 Threads 31.11 Portable Signal Handling 31.12 Summary Chapter 32 The Ice Run Time in Detail 32.1 Introduction 32.2 Communicators 32.3 Communicator Initialization 32.4 Object Adapters 32.5 Object Identity 32.6 The Ice::Current Object 32.7 Servant Locators 32.8 Server Implementation Techniques 32.9 The Ice Threading Models 32.10 Proxies 32.11 The Ice::Context Parameter 32.12 Connection Timeouts 32.13 Oneway Invocations 32.14 Datagram Invocations 32.15 Batched Invocations 32.16 Testing Proxies for Dispatch Type 32.17 Location Services 32.18 The Ice::Logger Interface 32.19 The Ice::Stats Interface 32.20 Location Transparency 32.21 C++ String Conversion 32.22 A Comparison of the Ice and CORBA Run Time 32.23 Summary Chapter 33 Asynchronous Programming 33.1 Chapter Overview 33.2 Introduction 33.3 Using AMI 33.4 Using AMD 33.5 Summary Chapter 34 Facets and Versioning 34.1 Introduction 34.2 Concept and APIs 34.3 The Versioning Problem 34.4 Versioning with Facets 34.5 Facet Selection 34.6 Behavioral Versioning 34.7 Design Considerations 34.8 Summary Chapter 37 The Ice Protocol 37.1 Chapter Overview 37.2 Data Encoding 37.3 Protocol Messages 37.4 Compression 37.5 Protocol and Encoding Versions 37.6 A Comparison with IIOP Chapter 36 Connection Management 36.1 Chapter Overview 36.2 Introduction 36.3 Connection Establishment 36.4 Active Connection Management 36.5 Obtaining a Connection 36.6 Connection Closure 36.7 Bidirectional Connections 36.8 Summary Chapter 35 Dynamic Ice 35.1 Chapter Overview 35.2 Streaming Interface 35.3 Dynamic Invocation and Dispatch 35.4 Asynchronous Dynamic Invocation and Dispatch 35.5 Summary Chapter 38 IceGrid 38.1 Chapter Overview 38.2 Introduction 38.3 IceGrid Architecture 38.4 Getting Started 38.5 Well-known Objects 38.6 Templates 38.7 IceBox Integration 38.8 Object Adapter Replication 38.9 Load Balancing 38.10 Sessions 38.11 Registry Replication 38.12 Application Distribution 38.13 Dynamic Monitoring 38.14 Glacier2 Integration 38.15 XML Reference 38.16 Variable and Parameter Semantics 38.17 Property Set Semantics 38.18 XML Features 38.19 Server Reference 38.20 Administrative Utilities 38.21 Server Activation 38.22 Solving Problems 38.23 Summary Chapter 39 Freeze 39.1 Chapter Overview 39.2 Introduction 39.3 The Freeze Map 39.4 Using a Freeze Map in the File System Server 39.5 The Freeze Evictor 39.6 Using the Freeze Evictor in a File System Server 39.7 The Freeze Catalog 39.8 Summary Chapter 40 FreezeScript 40.1 Chapter Overview 40.2 Introduction 40.3 Database Migration 40.4 Transformation Descriptors 40.5 Using transformdb 40.6 Database Inspection 40.7 Using dumpdb 40.8 Descriptor Expression Language 40.9 Summary Chapter 41 IceSSL 41.1 Chapter Overview 41.2 Introduction 41.3 Using IceSSL 41.4 Configuring IceSSL 41.5 Programming with IceSSL 41.6 Advanced Topics 41.7 Setting up a Certificate Authority 41.8 Summary Chapter 42 Glacier2 42.1 Chapter Overview 42.2 Introduction 42.3 Using Glacier2 42.4 Callbacks 42.5 Router Security 42.6 Session Management 42.7 Dynamic Filtering 42.8 Request Buffering 42.9 Request Contexts 42.10 Firewalls 42.11 Advanced Client Configurations 42.12 IceGrid Integration 42.13 Summary Chapter 43 IceBox 43.1 Chapter Overview 43.2 Introduction 43.3 The Service Manager 43.4 Developing a Service 43.5 Starting IceBox 43.6 Summary Chapter 44 IceStorm 44.1 Chapter Overview 44.2 Introduction 44.3 Concepts 44.4 IceStorm Interface Overview 44.5 Using IceStorm 44.6 Publishing to a Specific Subscriber 44.7 IceStorm Administration 44.8 Topic Federation 44.9 Quality of Service 44.10 Delivery Mode 44.11 Configuring IceStorm 44.12 Summary Chapter 45 IcePatch2 45.1 Chapter Overview 45.2 Introduction 45.3 Using icepatch2calc 45.4 Running the Server 45.5 Running the Client 45.6 Object Identities 45.7 Creating a Custom Client 45.8 Summary Appendix A Slice Keywords Appendix B Slice API Reference Appendix C Properties C.1 Ice Configuration Property C.2 Ice Trace Properties C.3 Ice Warning Properties C.4 Ice Object Adapter Properties C.5 Ice Plugin Properties C.6 Ice Thread Pool Properties C.7 Ice Default and Override Properties C.8 Ice Proxy Properties C.9 Ice Miscellaneous Properties C.10 IceSSL Properties C.11 IceBox Properties C.12 IceGrid Properties C.13 IceGrid Administrative Client Properties C.14 IceStorm Properties C.15 Glacier2 Properties C.16 Freeze Properties C.17 IcePatch2 Properties Appendix D Proxies and Endpoints D.1 Proxies D.2 Endpoints Appendix E License Information E.1 Definitions E.2 Fair Use Rights E.3 License Grant E.4 Restrictions E.5 Representations, Warranties and Disclaimer E.6 Limitation on Liability E.7 Termination E.8 Miscellaneous Bibliography