java.rmi: The Remote Method Invocation Guide

From the Book: "There can be nothing intermediate between that which undergoes and that which causes alteration. " Aristotle, Physics, Book VII, §2. About this book This book is about Remote Method Invocation (RMI) in Java. It both clarifies and extends the information in the RMI Specification. While it is primarily aimed at software developers and students, it will be useful to Java applications architects and designers as well. The book has grown from our own experience in designing, writing, and deploying RMI applications, and from a detailed observation of common questions, difficulties, and discussions on the Internet and in "cyberspace" generally, especially the Java-networking and RMI mailing lists. We feel confident that it addresses many of the real-world issues facing Java developers programming in distributed environments. This book is an accurate account of Java RMI as at Java 2 Java Development Kit (JDK) 1.3. It documents RMI as it really is. To this end, we have noted a number of errors and inconsistencies in the specifications and documentation which are distributed with the JDK. Where possible we have confined our discussion to matters defined in the RMI Specification for JDK 1.3. However, in practice there are a number of areas of RMI which are unspecified, underspecified, or which cannot be understood without reference to an implementation: in these cases we have referred to Sun's implementation, taking care to clearly mark such excursions. How it is organized The first two chapters introduce RMI and set it within the context of Java and object-oriented programming. While this book assumes that you are familiar with Java and distributed computing, these first chapters can help to reacquaint you with some relevant concepts. Along with a brief introduction to the principles of RMI, Chapter 1 also introduces a simple RMI service which is used throughout the book for illustrative purposes. Chapters 3 to 9 provide the fundamental building blocks for getting up and running with RMI. They discuss what you need to know about serialization, remote interfaces, clients, the RMI registry, servers, security, and mobile code. Chapters 10 to 14 build on the topics discussed in earlier chapters. These chapters move toward more advanced concepts in RMI such as activation, socket factories, and design patterns. These chapters may be especially useful to those already familiar with RMI and its implementation. The remaining chapters provide additional information for developers looking for alternatives to the standard RMI implementation, or extensions to it, such as JNDI naming services, Jini, CORBA/IIOP, and SSL. These chapters also discuss peripheral issues which may interest those wanting to go deeper into RMI including firewalls, performance, conversational security, and debugging. In the appendices we have listed all the exceptions that can arise in RMI, and all the system properties which can modify its behaviour. Further appendices list our references and other resources, and provide a comprehensive glossary of terms. Prerequisite knowledge We have assumed that you have a reasonable knowledge of the Java programming language (specifically the concepts class, abstract, object, interface, method, parameter, argument, result, and exception), and of the basic principles of object-oriented programming (inheritance and polymorphism). All this can be found in the standard reference Arnold, Gosling, and Holmes, The Java Programming Language, 3rd edition, Addison-Wesley, 2000. We have also assumed that you have an elementary understanding of networking in Java: specifically the java.net package (in particular the classes Socket and ServerSocket), and of the standard Java exception classes. Terminology and conventions In this manual, Java code samples and extracts are given in this font. Indented paragraphs in a smaller font size, such as the following paragraph, contain detailed matter which can be skipped on a first reading. This is an example of an indented paragraph providing greater detail about the preceding material. It can be skipped on a first reading. Syntax is specified in the usual metalanguage, where square brackets and contain optional syntax elements, and ellipses denote optional repetitions. For example: rmi://host:port/directory /name Throughout this book, we have used the terms "base class" and "derived class", rather than the counter-intuitive terms "superclass" and "subclass". Examples All the source code examples in this book have been compiled and executed on Windows and Solaris platforms, and in many cases have interoperated between both platforms. Exercises The exercises are all feasible, but vary in difficulty from trivial upwards. Some few are of a more theoretical nature. The examples and exercises are designed to promote understanding of the concepts, rather than to provide "lift-out" code which can be immediately deployed. Colophon This book is set in Times New Roman PS MT produced by Adobe Systems Incorporated, and Arial Monospaced MT produced by Monotype Corporation. The book was written in Adobe FrameMaker on Apple and PC platforms, and typeset with Adobe FrameMaker, Distiller, and Acrobat, and submitted to the publisher in PDF format. Thanks to Adobe for making these tools. The Almanac was produced by javadoc and Sun's unsupported MIF Doclet: thanks to Doug Kramer and his team, the people who mind these tools, for assistance and advice, and especially for implementing some of our requests in time for our deadlines. Acknowledgements This book could not have been written without the assistance of Sun Microsystems Inc, firstly in producing Java and the RMI package to provide us with our subject, and secondly in offering much valuable assistance and advice. Thanks especially to: Helen Maclean, our typesetter extraordinaire our colleagues at Pearson Education: our supervising editor Alison Birtwell, for the opportunity, and our production editor, Sally Carter many respected colleagues on the RMI Mailing List, especially Brian Maso and Adrian Colley the Melbourne office of Sun Microsystems Australia, for supplying Solaris test facilities for the sample programs. Thanks finally to our anonymous reviewers who diligently scrutinized our draft manuscript and made many valuable comments and suggestions. Any errors that remain are of course our responsibility. Sun, Java, and many Java-related terms are trademarks of Sun Microsystems Incorporated, Santa Clara, California. Any other trademarks referred to in this book remain property of their respective owners. From Kathy Thank you Esmond for knowing so much about RMI. Thanks to Andra Bruveris for directions in style and to Gavin Arndt for his never-ending technical support. To my boys Pete, Frank, and Roythanks for your love and patience. To the little one for waiting until my deadline was met. Kathy McNiff Northcote, Victoria, Australia, August 2000 From Esmond Thanks Kath for being ever-engaging and unfailingly helpful, and for subtly project-managing this book. Thanks to my valued professional colleagues: to John Marquet for providing the initial conditions which made this book possible; to Neil Belford for clear thinking, encouragement, wit, and advice; and to Gavin Arndt for all the amusement. Finally, thanks to Tilly and to all my family for their understanding and support. Esmond Pitt Great Ocean Road, Lorne, Victoria, Australia, July 2000