Available:*
Library | Item Barcode | Call Number | Material Type | Item Category 1 | Status |
---|---|---|---|---|---|
Searching... | 30000003592197 | QA76.9.D5 P82 2006 | Open Access Book | Book | Searching... |
On Order
Summary
Summary
Middleware is the bridge that connects distributed applications across different physical locations, with different hardware platforms, network technologies, operating systems, and programming languages. This book describes middleware from two different perspectives: from the viewpoint of the systems programmer and from the viewpoint of the applications programmer. It focuses on the use of open source solutions for creating middleware and the tools for developing distributed applications. The design principles presented are universal and apply to all middleware platforms, including CORBA and Web Services. The authors have created an open-source implementation of CORBA, called MICO, which is freely available on the web. MICO is one of the most successful of all open source projects and is widely used by demanding companies and institutions, and has also been adopted by many in the Linux community.
Author Notes
Arno Puder received his master's degree in computer science from the University of Kaiserslautern and his Ph.D. from the University of Frankfurt/Main, Germany. After working for Deutsche Telekom AG and AT&T Labs, he is currently a professor of computer science at San Francisco State University. His special interests include distributed systems and wireless sensor networks.
Kay R#65533;mer is currently a senior researcher and lecturer at ETH Zurich (Switzerland). He received his Ph.D. in computer science from ETH with a thesis on sensor networks. Kay holds a master's degree in computer science from the University of Frankfurt/Main, Germany. His research interests encompass sensor networks, software infrastructures for ubiquitous computing, and middleware for distributed systems.
Frank Pilhofer received his masters in computer science from the University of Frankfurt/Main, Germany. After completing MICO's CORBA Components implementation, he joined Mercury Computer Systems, where he now works on component-based, real-time data streaming middleware for Software Radio.
Table of Contents
About the Authors | p. viii |
Preface | p. ix |
1 Introduction | p. 1 |
1.1 Infrastructures for Distributed Applications | p. 1 |
1.2 Thematic Organization | p. 3 |
1.3 Target Group | p. 3 |
1.4 Chapter Overviews | p. 4 |
1.5 Ancillary Materials | p. 5 |
2 Basic Concepts | p. 7 |
2.1 Distributed Systems | p. 7 |
2.1.1 Characterization | p. 7 |
2.1.2 Transparency | p. 9 |
2.1.3 Communication Mechanisms | p. 10 |
2.1.4 Client/Server Model | p. 12 |
2.1.5 Failure Semantics | p. 14 |
2.2 Object Model | p. 16 |
2.2.1 Characterization | p. 16 |
2.2.2 Terminology | p. 17 |
2.3 Middleware | p. 21 |
2.3.1 Middleware Tasks | p. 21 |
2.3.2 The Structure of a Middleware Platform | p. 22 |
2.3.3 Standardization of a Middleware | p. 23 |
2.3.4 Portability and Interoperability | p. 24 |
2.4 Sample Application | p. 25 |
2.4.1 The Account Example | p. 25 |
2.4.2 C++ Implementation | p. 27 |
2.4.3 Distribution of the Sample Application | p. 29 |
2.5 Summary | p. 30 |
3 Introduction to CORBA | p. 33 |
3.1 Object Management Architecture | p. 34 |
3.2 Overview of CORBA | p. 35 |
3.2.1 CORBA Object Model | p. 37 |
3.2.2 Interface Definition Language | p. 37 |
3.2.3 IDL-Language Mappings | p. 38 |
3.2.4 Object Request Broker | p. 38 |
3.2.5 Invocation and Object Adapters | p. 39 |
3.2.6 Interoperability | p. 39 |
3.3 The Creation Process of a CORBA Application | p. 40 |
3.4 Application Development in C++ | p. 42 |
3.4.1 IDL Specification | p. 42 |
3.4.2 IDL Language Mapping for C++ | p. 43 |
3.4.3 C++ Server Implementation | p. 44 |
3.4.4 C++ Client Implementation | p. 48 |
3.5 Compiling and Executing the Application | p. 50 |
3.5.1 Compiling the Application | p. 50 |
3.5.2 Executing the Application | p. 51 |
3.6 Application Development in Java | p. 53 |
3.6.1 Java Server Implementation | p. 53 |
3.6.2 Java Client Implementation | p. 56 |
3.6.3 Compiling and Executing the Java Implementation | p. 56 |
3.7 The Bootstrapping Problem | p. 57 |
3.7.1 File-Based Bootstrapping | p. 58 |
3.7.2 Object URLs | p. 58 |
3.7.3 Command Line Arguments | p. 58 |
3.8 Naming Service | p. 59 |
3.8.1 Overview | p. 59 |
3.8.2 Name Server Daemon | p. 60 |
3.8.3 Example | p. 61 |
3.9 Summary | p. 64 |
4 [mu]ORB | p. 65 |
4.1 [mu]ORB Architecture | p. 65 |
4.2 Transport Layer | p. 67 |
4.3 Presentation Layer | p. 70 |
4.3.1 Value Ranges of Types | p. 70 |
4.3.2 Representation of Type Instances | p. 71 |
4.3.3 Modeling of the Presentation Layer | p. 74 |
4.4 Interoperability Layer | p. 75 |
4.4.1 Protocol for Remote Operation Invocation | p. 75 |
4.4.2 Structure of Protocol Data Units | p. 77 |
4.4.3 Modeling of Protocol Data Units | p. 79 |
4.5 Proxies | p. 81 |
4.6 Object Services | p. 83 |
4.6.1 Life Cycle of an Object | p. 83 |
4.6.2 Object References | p. 84 |
4.6.3 Services on the Server Side | p. 86 |
4.7 Summary | p. 88 |
5 ORB Design | p. 91 |
5.1 ORB Functionality | p. 92 |
5.2 ORB Architectures | p. 93 |
5.3 Design of Mico's ORB | p. 94 |
5.3.1 Invocation Adapter Interface | p. 95 |
5.3.2 Object Adapter Interface | p. 98 |
5.3.3 Invocation Table | p. 99 |
5.3.4 Scheduler | p. 100 |
5.3.5 Object Generation | p. 106 |
5.3.6 Bootstrapping | p. 106 |
5.3.7 Dynamic Extensibility | p. 108 |
5.4 Summary, Evaluation, and Alternatives | p. 108 |
6 Interoperability | p. 111 |
6.1 Model | p. 111 |
6.2 Inter-ORB Protocols | p. 113 |
6.2.1 Interoperable Object References | p. 114 |
6.2.2 General Inter-ORB Protocol | p. 115 |
6.2.3 Environment-Specific Inter-ORB Protocols | p. 116 |
6.3 Design of Mico's Interoperability | p. 117 |
6.3.1 Framework | p. 117 |
6.3.2 GIOP | p. 121 |
6.4 Summary, Evaluation, and Alternatives | p. 124 |
7 Object Adapters | p. 125 |
7.1 Terminology | p. 125 |
7.2 Functionality | p. 127 |
7.2.1 Object Management | p. 128 |
7.2.2 Servant Management | p. 130 |
7.2.3 Generation of Object References | p. 130 |
7.2.4 Mapping Objects to Servants | p. 131 |
7.2.5 Execution of Method Invocations | p. 131 |
7.3 The Portable Object Adapter | p. 133 |
7.3.1 Overview | p. 133 |
7.3.2 Policies | p. 135 |
7.3.3 POA Manager | p. 137 |
7.3.4 Request Processing | p. 138 |
7.3.5 Persistence | p. 141 |
7.4 Design of Mico's POA | p. 143 |
7.4.1 Object Key Generation | p. 144 |
7.4.2 Persistence | p. 146 |
7.4.3 POA Mediator | p. 146 |
7.4.4 Collocation | p. 149 |
8 Invocation Adapters | p. 153 |
8.1 Functionality | p. 153 |
8.1.1 Representation of IDL Data Types | p. 154 |
8.1.2 Type Checking | p. 155 |
8.2 Dynamic Invocation Interface | p. 156 |
8.3 Static Invocation Interface | p. 157 |
8.4 Design of Mico's DII | p. 159 |
8.5 Design of Mico's SII | p. 161 |
8.6 Summary | p. 162 |
9 IDL Compiler | p. 163 |
9.1 Invocation Adapters | p. 163 |
9.1.1 Dynamic versus Static Invocation Adapters | p. 164 |
9.1.2 Support of Static Invocation Adapters | p. 165 |
9.1.3 Mico's Static Invocation Adapter | p. 166 |
9.2 Compiler Fundamentals | p. 168 |
9.2.1 Formal Languages and Grammars | p. 168 |
9.2.2 Parse Trees | p. 170 |
9.2.3 Structure of a Compiler | p. 170 |
9.3 Abstract Syntax Tree for IDL Specifications | p. 172 |
9.4 Mico's IDL Compiler | p. 175 |
9.4.1 Class Structure | p. 175 |
9.4.2 Front End | p. 177 |
9.4.3 Back End | p. 179 |
9.5 Summary, Evaluation, and Alternatives | p. 180 |
10 CORBA and Beyond | p. 183 |
10.1 CORBA Components | p. 183 |
10.1.1 Component-Based Development | p. 183 |
10.1.2 The CORBA Component Model | p. 185 |
10.1.3 An Example Component | p. 192 |
10.1.4 Implementation Overview | p. 199 |
10.1.5 Discussion | p. 201 |
10.2 Web Services | p. 206 |
10.2.1 Overview of XML | p. 207 |
10.2.2 Service Descriptions through WSDL | p. 208 |
10.2.3 Server-Side Mapping | p. 211 |
10.2.4 Interoperability through SOAP | p. 213 |
10.2.5 Service Lookup through UDDI | p. 214 |
10.2.6 CORBA or Web Services? | p. 216 |
10.3 Middleware for Ubiquitous Computing | p. 217 |
10.3.1 Ubiquitous Computing in a Nutshell | p. 217 |
10.3.2 Middleware Challenges | p. 219 |
10.3.3 Case Study: Sensor Networks | p. 223 |
10.3.4 Conclusions | p. 228 |
10.4 Summary | p. 229 |
A Mico Installation | p. 231 |
A.1 Installing Mico on UNIX | p. 231 |
A.2 Installing Mico on Windows | p. 234 |
A.3 Road Map | p. 235 |
B Mico Implementation Overview | p. 237 |
B.1 ORB | p. 237 |
B.2 Interface Repository | p. 243 |
B.3 Portable Object Adapter | p. 244 |
B.3.1 Mico Daemon | p. 245 |
B.3.2 Implementation Repository | p. 246 |
B.4 IDL Compiler | p. 249 |
B.5 Compiler and Linker Wrappers | p. 253 |
B.5.1 Examples | p. 254 |
C Mico Implementation Details | p. 257 |
C.1 Path of an Operation Invocation through an ORB | p. 257 |
C.1.1 Client Side | p. 259 |
C.1.2 Server Side | p. 262 |
C.2 Integration of a New Invocation Adapter | p. 266 |
C.3 Integration of a New Object Adapter | p. 269 |
C.4 Integration of a New Transport Mechanism | p. 272 |
C.4.1 XAddress | p. 273 |
C.4.2 XAddressParser | p. 274 |
C.4.3 XProfile | p. 275 |
C.4.4 XProfileDecoder | p. 277 |
C.4.5 XTransport | p. 277 |
C.4.6 XTransportServer | p. 279 |
C.4.7 Dispatcher | p. 280 |
C.4.8 Initialization | p. 283 |
C.5 The Structure of Generated Program Code | p. 284 |
D Sample Application | p. 291 |
D.1 Stand-alone Application in C++ | p. 291 |
D.2 IDL Specification | p. 293 |
D.3 Implementation of the Server in C++ | p. 293 |
D.4 Implementation of the Client in C++ | p. 295 |
D.5 Implementation of the Server in Java | p. 296 |
D.6 Implementation of the Client in Java | p. 298 |
List of Figures | p. 301 |
Acronyms | p. 305 |
Glossary | p. 309 |
Bibliography | p. 313 |
Index | p. 317 |