1. Trang chủ
  2. » Công Nghệ Thông Tin

Advanced corba programming with c++

885 720 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 885
Dung lượng 4,77 MB

Nội dung

Here is the CORBA book that every C++ software engineer has been waiting for. Advanced CORBA® Programming with C++provides designers and developers with the tools required to understand CORBA technology at the architectural, design, and source code levels. This book offers handson explanations for building efficient applications, as well as lucid examples that provide practicaladvice on avoiding costly mistakes. With this book as a guide, programmers will find the support they needto successfully undertake industrialstrength CORBA development projects. The content is systematicallyarranged and presented so the book may be used as both a tutorial and a reference. The rich example programs in this definitive text show CORBA developers how to write clearer code that ismore maintainable, portable, and efficient. The authors’ detailed coverage of the IDLtoC++ mapping moves beyond the mechanics of the APIs to discuss topics such as potential pitfalls and efficiency. An indepth presentation of the new Portable Object Adapter (POA) explains how to take advantage of its numerous features to create scalable and highperformance servers. In addition, detailed discussion of advanced topics, such as garbage collection and multithreading, provides developers with the knowledge theyneed to write commercial applications.

Advanced CORBA® Programming with C++ Michi Henning Steve Vinoski Publisher: Addison Wesley First Edition February 12, 1999 ISBN: 0-201-37927-9, 1120 pages Book for “Rain Manager”, IT-SC IT-SC book: Advanced CORBA® Programming with C++ Enjoy the life together IT-SC book: Advanced CORBA® Programming with C++ Review Here is the CORBA book that every C++ software engineer has been waiting for Advanced CORBA® Programming with C++ provides designers and developers with the tools required to understand CORBA technology at the architectural, design, and source code levels This book offers hands-on explanations for building efficient applications, as well as lucid examples that provide practical advice on avoiding costly mistakes With this book as a guide, programmers will find the support they need to successfully undertake industrial-strength CORBA development projects The content is systematically arranged and presented so the book may be used as both a tutorial and a reference The rich example programs in this definitive text show CORBA developers how to write clearer code that is more maintainable, portable, and efficient The authors’ detailed coverage of the IDL-to-C++ mapping moves beyond the mechanics of the APIs to discuss topics such as potential pitfalls and efficiency An in-depth presentation of the new Portable Object Adapter (POA) explains how to take advantage of its numerous features to create scalable and high-performance servers In addition, detailed discussion of advanced topics, such as garbage collection and multithreading, provides developers with the knowledge they need to write commercial applications Other highlights: In-depth coverage of IDL, including common idioms and design trade-offs Complete and detailed explanations of the Life Cycle, Naming, Trading, and Event Services Discussion of IIOP and implementation repositories Insight into the dynamic aspects of CORBA, such as dynamic typing and the new DynAny interfaces Advice on selecting appropriate application architectures and designs Detailed, portable, and vendor-independent source code IT-SC book: Advanced CORBA® Programming with C++ Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks Where those designations appear in this book and AddisonWesley was aware of the trademark claim, the designations have been printed in initial caps or all caps The authors and publisher have taken care in the preparation of this book, but make no expressed or implied warranty of any kind and assume no responsibility for errors or omissions No liability is assumed for incidental or consequential damages in connection with or arising out of the use of the information or programs contained herein The publisher offers discounts on this book when ordered in quantity for special sales For more information, please contact: Corporate, Government, and Special Sales Addison Wesley Longman, Inc One Jacob Way Reading, Massachusetts 01867 (781) 944-3700 Library of Congress Catalog-in-Publication Data Henning, Michi Advanced CORBA® Programming with C++ / Michi Henning, Steve Vinoski p cm — (Addison-Wesley professional computing series) Includes bibliographical references and index ISBN 0-201-37927-9 C++ (Computer program language) CORBA (Computer architecture) I Vinoski, Steve II Title III Series QA76.73.C153 H4581999 005.13'3—dc21 98-49077 CIP IT-SC book: Advanced CORBA® Programming with C++ Copyright © 1999 by Addison Wesley Longman, Inc All rights reserved No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form, or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior consent of the publisher Printed in the United States of America Published simultaneously in Canada Text printed on recycled and acid-free paper 10—CRS—0302010099 Third printing, August 1999 IT-SC book: Advanced CORBA® Programming with C++ Dedication To Anni and Harry, for setting me on the path To Jocelyn, for letting me follow it —Michi To Cindy, my wife and best friend—for your sacrifices, your support, your patience, and your love —Steve IT-SC book: Advanced CORBA® Programming with C++ Preface Prerequisites Scope of this Book Acknowledgments Michi's Acknowledgments Steve's Acknowledgments Introduction 1.1 Introduction 1.2 Organization of the Book 1.3 CORBA Version 1.4 Typographical Conventions 1.5 Source Code Examples 1.6 Vendor Dependencies 1.7 Contacting the Authors I: Introduction to CORBA An 2.1 2.2 2.3 2.4 2.5 2.6 2.7 Overview of CORBA Introduction The Object Management Group Concepts and Terminology CORBA Features Request Invocation General CORBA Application Development Summary A Minimal CORBA Application 3.1 Chapter Overview 3.2 Writing and Compiling an IDL Definition 3.3 Writing and Compiling a Server 3.4 Writing and Compiling a Client 3.5 Running Client and Server 3.6 Summary II: Core CORBA The OMG Interface Definition Language 4.1 Chapter Overview 4.2 Introduction 4.3 Compilation 4.4 Source Files 4.5 Lexical Rules 4.6 Basic IDL Types 4.7 User-Defined Types 4.8 Interfaces and Operations 4.9 User Exceptions 4.10 System Exceptions 4.11 System Exceptions or User Exceptions? 4.12 Oneway Operations 4.13 Contexts 4.14 Attributes IT-SC book: Advanced CORBA® Programming with C++ 4.15 4.16 4.17 4.18 4.19 4.20 4.21 4.22 Modules Forward Declarations Inheritance Names and Scoping Repository Identifiers and pragma Directives Standard Include Files Recent IDL Extensions Summary IDL for a Climate Control System 5.1 Chapter Overview 5.2 The Climate Control System 5.3 IDL for the Climate Control System 5.4 The Complete Specification Basic IDL-to-C++ Mapping 6.1 Chapter Overview 6.2 Introduction 6.3 Mapping for Identifiers 6.4 Mapping for Modules 6.5 The CORBA Module 6.6 Mapping for Basic Types 6.7 Mapping for Constants 6.8 Mapping for Enumerated Types 6.9 Variable-Length Types and _var Types 6.10 The String_var Wrapper Class 6.11 Mapping for Wide Strings 6.12 Mapping for Fixed-Point Types 6.14 Mapping for Sequences 6.15 Mapping for Arrays 6.16 Mapping for Unions 6.17 Mapping for Recursive Structures and Unions 6.18 Mapping for Type Definitions 6.19 User-Defined Types and _var Classes 6.20 Summary Client-Side C++ Mapping 7.1 Chapter Overview 7.2 Introduction 7.3 Mapping for Interfaces 7.4 Object Reference Types 7.5 Life Cycle of Object References 7.6 Semantics of _ptr References 7.7 Pseudo-Objects 7.8 ORB Initialization 7.9 Initial References 7.10 Stringified References 7.11 The Object Pseudo-Interface 7.12 _var References 7.13 Mapping for Operations and Attributes 7.14 Parameter Passing Rules 7.15 Mapping for Exceptions 7.16 Mapping for Contexts IT-SC book: Advanced CORBA® Programming with C++ 7.17 Summary Developing a Client for the Climate Control System 8.1 Chapter Overview 8.2 Introduction 8.3 Overall Client Structure 8.4 Included Files 8.5 Helper Functions 8.6 The main Program 8.7 The Complete Client Code 8.8 Summary Server-Side C++ Mapping 9.1 Chapter Overview 9.2 Introduction 9.3 Mapping for Interfaces 9.4 Servant Classes 9.5 Object Incarnation 9.6 Server main 9.7 Parameter Passing Rules 9.8 Raising Exceptions 9.9 Tie Classes 9.10 Summary 10 Developing a Server for the Climate Control System 10.1 Chapter Overview 10.2 Introduction 10.3 The Instrument Control Protocol API 10.4 Designing the Thermometer Servant Class 10.5 Implementing the Thermometer Servant Class 10.6 Designing the Thermostat Servant Class 10.7 Implementing the Thermostat Servant Class 10.8 Designing the Controller Servant Class 10.9 Implementing the Controller Servant Class 10.10 Implementing the Server main Function 10.11 The Complete Server Code 10.12 Summary 11 The Portable Object Adapter 11.1 Chapter Overview 11.2 Introduction 11.3 POA Fundamentals 11.4 POA Policies 11.5 POA Creation 11.6 Servant IDL Type 11.7 Object Creation and Activation 11.8 Reference, ObjectId , and Servant 11.9 Object Deactivation 11.10 Request Flow Control 11.11 ORB Event Handling 11.12 POA Activation 11.13 POA Destruction 11.14 Applying POA Policies IT-SC book: Advanced CORBA® Programming with C++ 11.15 Summary 12 Object Life Cycle 12.1 Chapter Overview 12.2 Introduction 12.3 Object Factories 12.4 Destroying, Copying, and Moving Objects 12.5 A Critique of the Life Cycle Service 12.6 The Evictor Pattern 12.7 Garbage Collection of Servants 12.8 Garbage Collection of CORBA Objects 12.9 Summary III: CORBA Mechanisms 13 GIOP, IIOP, and IORs 13.1 Chapter Overview 13.2 An Overview of GIOP 13.3 Common Data Representation 13.4 GIOP Message Formats 13.5 GIOP Connection Management 13.6 Detecting Disorderly Shutdown 13.7 An Overview of IIOP 13.8 Structure of an IOR 13.9 Bidirectional IIOP 13.10 Summary 14 Implementation Repositories and Binding 14.1 Chapter Overview 14.2 Binding Modes 14.3 Direct Binding 14.4 Indirect Binding via an Implementation Repository 14.5 Migration, Reliability, Performance, and Scalability 14.6 Activation Modes 14.7 Race Conditions 14.8 Security Considerations 14.9 Summary VI: Dynamic CORBA 15 C++ Mapping for Type any 15.1 Chapter Overview 15.2 Introduction 15.3 Type any C++ Mapping 15.4 Pitfalls in Type Definitions 15.5 Summary 16 Type Codes 16.1 Chapter Overview 16.2 Introduction 16.3 The TypeCode Pseudo-Object 16.4 C++ Mapping for the TypeCode Pseudo-Object 16.5 Type Code Comparisons 10 IT-SC book: Advanced CORBA® Programming with C++ extern "C" int ICP_offline(unsigned long id) { // Look for id in state map StateMap::iterator pos = dstate.find(id); if (pos == dstate.end()) return -1; // No such device dstate.erase(id); return 0; } // -// vary_temp() simulates the variation in actual temperature // around a thermostat The function randomly varies the // temperature as a percentage of calls as follows: // // degrees too cold: 5% // degrees too hot: 5% // degrees too cold: 10% // degrees too hot: 10% // degree too cold: 15% // degree too hot: 15% // exact temperature: 40% static short vary_temp(short temp) { long r = lrand48() % 50; long delta; if (r < 5) delta = 3; else if (r < 15) delta = 2; else if (r < 30) delta = 1; else delta = 0; if (lrand48() % 2) delta = -delta; return temp + delta; } // -// Function object Locates a thermostat that is in the same room // as the device at position pos class ThermostatInSameRoom { public: ThermostatInSameRoom( const StateMap::iterator & pos ) : m_pos(pos) {} bool operator()( pair & p ) const { return( p.second.type == thermostat && p.second.location == m_pos->second.location 871 IT-SC book: Advanced CORBA® Programming with C++ } ); private: const StateMap::iterator & m_pos; }; // -// actual_temp() is a helper function to determine the actual // temperature returned by a particular thermometer or thermostat // The pos argument indicates the device // // The function locates all thermostats that are in the same room // as the device denoted by pos and computes the average of all // the thermostats' nominal temperatures (If no thermostats are // in the same room as the device, the function assumes that the // average of the nominal temperatures is DFLT_TEMP.) // // The returned temperature varies from the average as // determined by vary_temp() static short actual_temp(const StateMap::iterator & pos) { long sum = 0; long count = 0; StateMap::iterator where = find_if( dstate.begin(), dstate.end(), ThermostatInSameRoom(pos) ); while (where != dstate.end()) { count++; sum += where->second.nominal_temp; where = find_if( ++where, dstate.end(), ThermostatInSameRoom(pos) ); } return vary_temp(count == ? DFLT_TEMP : sum / count); } // -// ICP_get() returns an attribute value of the device with the // given id The attribute is named by the attr parameter The // value is copied into the buffer pointed to by the value // pointer The len parameter is the size of the passed buffer, // so ICP_get() can avoid overrunning the buffer // // By default, thermometers report a temperature that varies // somewhat around DFLT_TEMP However, if there is another // thermostat in the same room as the thermometer, the // thermometer reports a temperature that varies around that // thermostat's temperature For several thermostats that are in // the same room, the thermometer reports a temperature that // varies around the average nominal temperature of all the // thermostats // // Attempts to read from a non-existent device or to read a // non-existent attribute return -1 A return value of zero // indicates success If the supplied buffer is too short to hold 872 IT-SC book: Advanced CORBA® Programming with C++ // a value, ICP_get() silently truncates the value and // returns success extern "C" int ICP_get( unsigned long id, const char * attr, void * value, size_t len) { // Look for id in state map StateMap::iterator pos = dstate.find(id); if (pos == dstate.end()) return -1; // No such device // Depending on the attribute, return the // corresponding piece of state if (strcmp(attr, "model") == 0) { strncpy((char *)value, pos->second.model, len); } else if (strcmp(attr, "location") == 0) { strncpy((char *)value, pos->second.location.c_str(), len); } else if (strcmp(attr, "nominal_temp") == 0) { if (pos->second.type != thermostat) return -1; // Must be thermostat memcpy( value, &pos->second.nominal_temp, min(len, sizeof(pos->second.nominal_temp)) ); } else if (strcmp(attr, "temperature") == 0) { short temp = actual_temp(pos); memcpy(value, &temp, min(len, sizeof(temp))); } else if (strcmp(attr, "MIN_TEMP") == 0) { memcpy(value, &MIN_TEMP, min(len, sizeof(MIN_TEMP))); } else if (strcmp(attr, "MAX_TEMP") == 0) { memcpy(value, &MAX_TEMP, min(len, sizeof(MAX_TEMP))); } else { return -1; // No such attribute } return 0; // OK } // -// ICP_set() sets the attribute specified by attr to the // value specified by value for the device with ID id Attempts to // write a string longer than MAXSTR bytes (including the // terminating NUL) result in silent truncation of the string // Attempts to access a non-existent device or attribute // return -1 Attempts to set a nominal temperature outside the // legal range also return -1 A zero return value // indicates success extern "C" int ICP_set(unsigned long id, const char * attr, const void * value) { // Look for id in state map StateMap::iterator pos = dstate.find(id); if (pos == dstate.end()) return -1; // No such device // Change either location or nominal temp, depending on attr 873 IT-SC book: Advanced CORBA® Programming with C++ { } if (strcmp(attr, "location") == 0) { pos->second.location.assign( (const char *)value, MAXSTR - ); } else if (strcmp(attr, "nominal_temp") == 0) if (pos->second.type != thermostat) return -1; // Must be thermostat short temp; memcpy(&temp, value, sizeof(temp)); if (temp < MIN_TEMP || temp > MAX_TEMP) return -1; pos->second.nominal_temp = temp; } else { return -1; // No such attribute } return 0; // OK A.3 Persistent Simulator Code The persistent simulator applies to the server implementations discussed in Chapter 12 and later chapters This version of the simulator stores the state of the ICP network in the text file /tmp/CCS_DB, so the server can shut down and start up again without losing previous changes made to the network The text file contains multiline records using one line for each device attribute: Asset number Device type (zero indicates a thermometer, indicates a thermostat) Location Nominal temperature (for thermometers only) Here is a small example file containing a thermometer record followed by a thermostat record: 1027 ENIAC 3032 Colossus 68 To keep the /tmp/CCS_DB file up-to-date, we use a global class instance mydb At start-up, the constructor of mydb reads the contents of the file and initializes the dstate map; at shutdown, the destructor writes the entire map contents back to the file This design is not terribly elegant, but it has the advantage that the existence of the ICP simulator is hidden from the rest of the source code 874 IT-SC book: Advanced CORBA® Programming with C++ For simplicity, we keep error checking to a minimum Also note that state changes are written out only if the server terminates cleanly If the server terminates abnormally—for example, with a core dump or by calling _exit—the destructor of mydb never runs and all state changes are lost To add persistence to the implementation in Section A.2, we append the following code: #include class ICP_Persist { public: ICP_Persist(const char * file); ~ICP_Persist(); private: string m_filename; }; // Read device state from a file and initialize the dstate map ICP_Persist:: ICP_Persist(const char * file) : m_filename(file) { // Open input file, creating it if necessary fstream db(m_filename.c_str(), ios::in|ios::out, 0666); if (!db) { cerr < "Error opening " < m_filename < endl; exit(1); } // Read device details, one attribute per line DeviceState ds; unsigned long id; while (db >> id) { // Read device type and set model string accordingly int dtype; db >> dtype; ds.type = dtype == thermometer ? thermometer : thermostat; ds.model = dtype == thermometer ? "Sens-A-Temp" : "Select-A-Temp"; char loc[MAXSTR]; db.get(loc[0]); // Skip newline db.getline(loc, sizeof(loc)); // Read location ds.location = loc; if (ds.type == thermostat) db >> ds.nominal_temp; // Read temperature dstate[id] = ds; // Add entry to map } db.close(); if (!db) { cerr < "Error closing " < m_filename < endl; exit(1); } } // Write device state to the file ICP_Persist:: ~ICP_Persist() { // Open input file, truncating it 875 IT-SC book: Advanced CORBA® Programming with C++ ofstream db(m_filename.c_str()); if (!db) { cerr < "Error opening " < m_filename < endl; exit(1); } // Write the state details for each device StateMap::iterator i; for (i = dstate.begin(); i != dstate.end(); i++) { db < i->first < endl; db < i->second.type < endl; db < i->second.location < endl; if (i->second.type == thermostat) db < i->second.nominal_temp < endl; } if (!db) { cerr < "Error writing " < m_filename < endl; exit(1); } db.close(); if (!db) { cerr < "Error closing " < m_filename < endl; exit(1); } } // Instantiate a single global instance of the class static ICP_Persist mydb("/tmp/CCS_DB"); 876 IT-SC book: Advanced CORBA® Programming with C++ Appendix B CORBA Resources B.1 World Wide Web There are a number of useful Web sites where you can find more information on all aspects of CORBA OMG Web site: This is the number one place to turn to for information You can download electronic copies of the adopted specifications and see the work in progress on new technologies and revisions of the standards The site also contains a wealth of other information, such as CORBA success stories, press releases, latest news, overview material on CORBA, links to other CORBA-related sites, a "CORBA for Beginners" section, and so on Douglas Schmidt's Home Page: A very informative site with research papers, tutorials, links to CORBA-related information and products, and a host of other material Of particular interest are papers related to ORB performance and real-time CORBA Cetus Links on Objects and Components: A jump site with thousands of links to information on all aspects of object-oriented computing, spanning various engineering disciplines, technologies, and programming languages B.2 Newsgroups There are several newsgroups relevant to CORBA programming comp.object.corba The main CORBA discussion group Topics range from the simple to the highly advanced and span all aspects of CORBA Even though the number of articles per day has been steadily rising, the signal-to-noise ratio is still good Often, this group is the best available resource when you are stuck on a specific programming problem comp.lang.java.corba Mainly for discussion of Java-related aspects of CORBA However, discussions often cover topics that apply more generally comp.object A general discussion group for object-oriented topics, not limited to CORBA comp.lang.c++.moderated 877 IT-SC book: Advanced CORBA® Programming with C++ The newsgroup to read if you are interested in C++ Not many topics are directly related to CORBA; instead, the discussions cover every imaginable aspect of general C++ programming The group is moderated, and discussions are usually relevant and on topic, despite the high volume B.3 Mailing Lists You can subscribe to a number of mailing lists relevant to CORBA Alan Pope's CORBA Mailing List: Wide-ranging discussions on all aspects of CORBA Moderated, low-volume, highquality list To subscribe, e-mail with "subscribe corba-dev" in the message body Ron Resnick's Distributed obj@distributedcoalition.org> Objects Mailing List: [...]... improvement You can send e-mail to us at 22 IT-SC book: Advanced CORBA Programming with C++ Part I: Introduction to CORBA 23 IT-SC book: Advanced CORBA Programming with C++ Chapter 2 An Overview of CORBA 2.1 2.2 2.3 2.4 2.5 2.6 2.7 Introduction The Object Management Group Concepts and Terminology CORBA Features Request Invocation General CORBA Application Development Summary 2.1 Introduction... an ISO/IEC C++ Standard [9] environment and uses a number of ISO/IEC C++ features, such as namespaces and the C++ bool and string types However, if you do not have access to a standard C++ compiler, you should find it easy to convert the code to whatever subset of C++ is available to you (although you will need at least C++ exception support) 21 IT-SC book: Advanced CORBA Programming with C++ In a number... about various aspects of CORBA 20 IT-SC book: Advanced CORBA Programming with C++ 1.3 CORBA Version At the time of this writing, CORBA 2.3 is in the final stages of review, so this book describes CORBA as of revision 2.3 We try to point out when we use newer CORBA features in our examples in case those features are not yet supported by your particular ORB We do not describe CORBA 3.0 because at the... is all about making you CORBA- literate and giving you the information you need to be able to write production-quality CORBA- based systems 19 IT-SC book: Advanced CORBA Programming with C++ 1.2 Organization of the Book The book is divided into six parts and two appendices Part I, Introduction to CORBA, provides an overview of CORBA and presents the source code for a minimal CORBA application After... Simulator A.1 Overview A.2 Transient Simulator Code A.3 Persistent Simulator Code B CORBA Resources B.1 World Wide Web B.2 Newsgroups B.3 Mailing Lists B.4 Magazines Bibliography 12 IT-SC book: Advanced CORBA Programming with C++ Preface For years, both of us have been (and still are) teaching CORBA programming with C++ to software engineers all over the world One of the most frequently asked questions... 28 IT-SC book: Advanced CORBA Programming with C++ nor can they access or modify the contents of an object reference An object reference refers only to a single CORBA object A servant is a programming language entity that implements one or more CORBA objects Servants are said to incarnate CORBA objects because they provide bodies, or implementations, for those objects Servants exist within the context... invoke 30 IT-SC book: Advanced CORBA Programming with C++ In CORBA, object interfaces are defined in the OMG Interface Definition Language (IDL) Unlike C++ or Java, IDL is not a programming language, so objects and applications cannot be implemented in IDL The sole purpose of the IDL is to allow object interfaces to be defined in a manner that is independent of any particular programming language This... many ways As most C++ programmers know, C++ is a multiparadigm language that supports varied approaches to application development, including structured programming, data abstraction, OO programming, and generic programming The proprietary C++ mappings reflected this diversity; each of them mapped different CORBA data types and interfaces into different (sometimes very different) C++ types and classes... backgrounds of the developers but also the ways they intended to use CORBA to build systems as diverse as software integration middleware, operating systems, and even desktop tool kits 18 IT-SC book: Advanced CORBA Programming with C++ When the Object Management Group (OMG) issued a Request For Proposals (RFP) for a standard mapping of CORBA to C++, these developers and other groups submitted their mappings... IDL definitions 33 IT-SC book: Advanced CORBA Programming with C++ Developers writing applications in statically typed languages such as C++ usually prefer to use the static invocation approach because it provides a more natural programming model The dynamic approach can be useful for applications, such as gateways and bridges, that must receive and forward requests without having compile-time knowledge ... at 22 IT-SC book: Advanced CORBA Programming with C++ Part I: Introduction to CORBA 23 IT-SC book: Advanced CORBA Programming with C++ Chapter An Overview of CORBA 2.1...IT-SC book: Advanced CORBA Programming with C++ Enjoy the life together IT-SC book: Advanced CORBA Programming with C++ Review Here is the CORBA book that every C++ software engineer... invoke 30 IT-SC book: Advanced CORBA Programming with C++ In CORBA, object interfaces are defined in the OMG Interface Definition Language (IDL) Unlike C++ or Java, IDL is not a programming language,

Ngày đăng: 04/02/2016, 11:12

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] See Section 19.7.3 for an exception to this rule. In addition to having a name and a type, properties have a mode. The mode of a property is one of the following.NormalThe property is both optional and modifiable. An exporter that creates a new service offer need not include a value for this property. The property can be modified in place while the service offer is stored in the trader.Read-onlyThe property is optional and read-only. An exporter that creates a new service offer need not include a value for this property. After the service offer has been created by an exporter, the trader will reject attempts to modify the value of the property; the value of the property is "frozen" at export time.Mandatory Sách, tạp chí
Tiêu đề: frozen
19.6 The Trader Interfaces The 11 trader interfaces are all part of the CosTrading module. They provide the functionality to import and export service offers, export proxy service offers, modify the federation structure, and configure a trader. Following is an outline of the IDL structure.//File: CosTrading.idl#pragma prefix "omg.org"module CosTrading {interface TraderComponents { /* ... */ }; // Abstract interface SupportAttributes { /* ... */ }; // Abstract interface ImportAttributes { /* ... */ }; // Abstract interface LinkAttributes { /* ... */ }; // Abstract interface Lookup :TraderComponents, SupportAttributes,ImportAttributes { /* ... */ };interface Register Sách, tạp chí
Tiêu đề: omg.org
19.5 The Service Type Repository The service type repository defined by the CosTradingRepos module is a database of service type definitions. The trader uses the repository when it requires type information about service offers (such as when it evaluates a search or when an exporter creates a new service offer). The relationship between the service type repository and the trader is shown in Figure 19.1 Khác
19.5.2 Service Type Inheritance The CCS::Controllers service type defined in Section 19.5.1 does not inherit from any other service type. Suppose we want to create service offers for other kinds of controllers—for example, multiprotocol and wireless controllers. We assume that these controllers have the same description as ordinary controllers but also provide additional information about their functionality. We can use inheritance to express this. We make the multiprotocol and wireless controllers derived services types, as shown in Figure 19.2 Khác
19.5.3 IDL for the Service Type Repository The IDL for the service type repository is large, so we present it here in several sections.CosTradingRepos contains a single interface called ServiceTypeRepository.All the definitions for the type repository are part of this interface, so the overall structure of the IDL is as follows.//File: CosTypeRepos.idl#include &lt;CosTrading.idl&gt;#include &lt;orb.idl&gt;#pragma prefix "omg.org&#34 Khác
[2] This is another defect that we hope will be addressed in a future version of the specification. The inverse of mask_type is provided by the unmask_type operation:void unmask_type(in CosTrading::ServiceTypeName name ) raises(CosTrading::IllegalServiceType, CosTrading::UnknownServiceType,NotMasked);Unmasking a type that is not masked raises the NotMasked exception Khác
19.5.4 Using the Service Type Repository with C++ Using the type repository from C++ is a simple matter of calling operations on the ServiceTypeRepository interface. However, before you can do this, you need a reference to the service type repository Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w