|
Preface |
6 |
|
|
Contents |
7 |
|
|
1 Preliminaries |
14 |
|
|
1.1 Organization of the Book |
14 |
|
|
1.2 Additional Material |
15 |
|
|
1.3 Conventions Used in This Book |
16 |
|
|
1.4 How to Read This Book |
16 |
|
|
2 Introduction |
17 |
|
|
2.1 Object-Oriented Paradigm |
18 |
|
|
2.2 Distributed Systems |
20 |
|
|
3 Concepts of the CORBA Standard |
24 |
|
|
3.1 Object Management Group |
24 |
|
|
3.2 Object Management Architecture |
24 |
|
|
3.5 Procedural Steps in Developing a CORBA-Based Application |
31 |
|
|
3.6 Remote Invocations |
32 |
|
|
3.7 Interoperability in the CORBA Standard |
33 |
|
|
4 Introduction to the Interface Definition Language |
37 |
|
|
4.1 Lexical Elements of IDL |
37 |
|
|
4.2 IDL Types |
42 |
|
|
4.4 Exceptions |
57 |
|
|
4.5 Interface Declarations |
58 |
|
|
4.6 Value Types |
63 |
|
|
4.7 Module Declarations |
66 |
|
|
4.8 Scoping |
67 |
|
|
4.9 Concluding Remarks |
70 |
|
|
4.10 Exercises |
71 |
|
|
5 IDL to Java Mapping |
74 |
|
|
5.1 Introductory Remarks |
74 |
|
|
5.2 Names |
74 |
|
|
5.3 Mapping for Basic Data Types |
75 |
|
|
5.4 Holder Classes |
76 |
|
|
5.5 Helper Classes |
78 |
|
|
5.6 Mapping for Modules |
79 |
|
|
5.7 Mapping for Constants |
80 |
|
|
5.8 Mapping for typedefs |
81 |
|
|
5.9 Mapping for structs |
81 |
|
|
5.10 Mapping for enums |
83 |
|
|
5.11 Mapping for Sequences |
84 |
|
|
5.12 Mapping for Arrays |
84 |
|
|
5.13 Mapping for Exceptions |
84 |
|
|
5.15 Mapping for Value Types |
89 |
|
|
5.16 Mapping for anys |
93 |
|
|
5.17 Mapping for in, inout, and out Parameters |
95 |
|
|
5.18 Mapping for Attributes |
95 |
|
|
5.19 Mapping for Operations |
96 |
|
|
5.20 Exercises |
96 |
|
|
6 Important Elements of the ORB Runtime |
98 |
|
|
6.1 Initializing a CORBA Application |
98 |
|
|
6.2 Pseudo Interface |
99 |
|
|
6.3 Portable Object Adapter |
106 |
|
|
6.4 Pseudo Interface |
119 |
|
|
6.6 Dynamic Invocation Interface |
123 |
|
|
6.7 Dynamic Skeleton Interface |
133 |
|
|
6.9 Exercises |
137 |
|
|
7 A First Example |
139 |
|
|
7.1 JDK’s IDL Compiler |
140 |
|
|
7.2 JacORB’s IDL Compiler |
141 |
|
|
7.3 OpenORB’s IDL Compiler |
142 |
|
|
7.4 Recommended File Organization |
143 |
|
|
7.6 Implementing the Server Application for the Inheritance Approach |
146 |
|
|
7.7 Compiling the Server Application |
148 |
|
|
7.8 Implementing the Client Application |
149 |
|
|
7.9 Compiling the Client Application |
151 |
|
|
7.10 Running the Application |
151 |
|
|
7.11 Implementing Counter Using the Delegation Approach |
152 |
|
|
7.12 Implementing the Server Application for the Delegation Approach |
153 |
|
|
7.13 A GUI for the Client Application |
155 |
|
|
7.14 Using Different ORBs |
157 |
|
|
7.15 Modules |
157 |
|
|
7.16 Exercises |
159 |
|
|
8 Generating Remote Objects |
161 |
|
|
8.1 Implementing the CounterFactory Servant |
162 |
|
|
8.2 Implementing the CounterFactory Server |
164 |
|
|
8.3 Implementing the CounterFactory Client |
165 |
|
|
8.4 Running the Application |
167 |
|
|
8.5 Exercises |
167 |
|
|
9 Alternatives for Designing IDL Interfaces |
169 |
|
|
9.1 Attributes vs. Operations |
169 |
|
|
9.2 Returning Results From an Operation |
172 |
|
|
9.3 Exercises |
176 |
|
|
10 Inheritance and Polymorphism |
178 |
|
|
10.1 IDL Definition of DateTimeServer |
179 |
|
|
10.2 Implementing the Inheritance Approach |
180 |
|
|
10.3 Implementing the Example with the Delegation Approach |
184 |
|
|
10.4 An Example for Polymorphism |
187 |
|
|
10.5 Exercises |
191 |
|
|
11 Implementing Distributed Callbacks |
193 |
|
|
11.1 Defining IDL Interfaces |
194 |
|
|
11.2 Implementing the Counter Servant |
194 |
|
|
11.3 Implementing the CBCount Server |
196 |
|
|
11.4 Implementing the CounterClient Servant |
197 |
|
|
11.5 Implementing the Client Application |
197 |
|
|
11.6 Further Usages of the Callback Technique |
200 |
|
|
11.7 Exercise |
200 |
|
|
12 Utilizing Value Types |
202 |
|
|
12.1 Defining IDL Module PublishSubscribe |
203 |
|
|
12.2 Implementing Value Type Filter |
204 |
|
|
12.3 Implementing Class PublisherImpl |
209 |
|
|
12.4 Implementing the Server Application |
210 |
|
|
12.5 Implementing Class SubscriberImpl |
212 |
|
|
12.6 Implementing the Client Application |
212 |
|
|
13 Utilizing Interfaces of the DynamicAny Module |
216 |
|
|
13.1 Usage of Anys and TypeCodes |
216 |
|
|
13.2 DynamicAny API |
219 |
|
|
13.3 Usage of the DynamicAny API in Java |
231 |
|
|
13.4 Exercises |
238 |
|
|
14 Dynamic Invocation Interface |
239 |
|
|
14.1 Dynamic Counter Client |
240 |
|
|
14.2 Dynamic TimeServer Clients |
243 |
|
|
14.3 Deferred Synchronous Invocations |
251 |
|
|
14.4 Exercises |
255 |
|
|
15 Dynamic Skeleton Interface |
258 |
|
|
15.1 Defining IDL Module Bank |
258 |
|
|
15.2 Implementing the Servant |
259 |
|
|
15.3 Implementing the Server Application |
262 |
|
|
15.4 Implementing the Client Application |
263 |
|
|
15.5 Exercises |
264 |
|
|
16 Implementing Different POAs |
265 |
|
|
16.1 Counter Example |
266 |
|
|
16.2 Implementing ServantLocator |
267 |
|
|
16.3 Implementing the Server Application |
268 |
|
|
16.4 Exercise |
270 |
|
|
17 CORBA’s Naming Service |
271 |
|
|
17.1 Basics |
272 |
|
|
17.2 IDL Definition of the Naming Service |
274 |
|
|
17.3 Bootstrapping Problem |
276 |
|
|
17.4 Binding and Resolving a Name with the Naming Service |
278 |
|
|
17.5 Utilizing Naming Contexts |
284 |
|
|
17.6 BindingIterators |
289 |
|
|
17.7 NamingContextExt Interface |
291 |
|
|
17.8 Concluding Remarks |
296 |
|
|
17.9 Exercises |
296 |
|
|
18 CORBA’s Event Service |
298 |
|
|
18.1 Event Service Basics |
299 |
|
|
18.2 IDL Specification of the Event Service |
301 |
|
|
18.3 Using OpenORB’s Event Service |
305 |
|
|
18.4 Push-Style Publish-Subscribe Example |
308 |
|
|
Appendix A – IDL Grammar |
319 |
|
|
Appendix B – IDL to Java: Mapping of IDL Standard Exceptions |
325 |
|
|
Appendix C – Naming Service IDL |
326 |
|
|
Appendix D – Event Service IDL |
328 |
|
|
Appendix E – ORB Product Installation |
330 |
|
|
Acronyms |
334 |
|
|
References |
335 |
|
|
Index |
337 |
|
|
More eBooks at www.ciando.com |
0 |
|