Java RMI contains a wealth of experience in designing and implementing Java's Remote Method Invocation. If you're a novice reader, you will quickly be brought up to speed on why RMI is such a powerful yet easy to use tool for distributed programming, while experts can gain valuable experience for constructing their own enterprise and distributed systems. With Java RMI, you'll learn tips and tricks for making your RMI code excel. The book also provides strategies for working with serialization, threading, the RMI registry, sockets and socket factories, activation, dynamic class downloading, HTTP tunneling, distributed garbage collection, JNDI, and CORBA. In short, a treasure trove of valuable RMI knowledge packed into one book.
William Grosso is a well-known speaker, Java SIG chair, and software architect currently residing in the San Francisco Bay area. He's been working with distributed systems since 1995, lectures for the University of California Berkeley Extension on Enterprise APIs, and is the principal engineer at Hipbone Inc. A former mathematician, he got into programming because it seemed like easy money. He got into distributed computing because he noticed that client-server gurus got the big bucks. And then he started programming in Java because he figured that's where the REAL money was. Having learned the error of his ways, he decided to write a book instead. When not programming or writing, he spends most of his time hiking, drumming, and trying to remember that it was he was about to say.
Preface Part I. Designing and Building: The Basics of RMI Applications 1. Streams The Core Classes Viewing a File Layering Streams Readers and Writers 2. Sockets Internet Definitions Sockets ServerSockets Customizing Socket Behavior Special-Purpose Sockets Using SSL 3. A Socket-Based Printer Server A Network-Based Printer The Basic Objects The Protocol The Application Itself Evolving the Application 4. The Same Server, Written Using RMI The Basic Structure of RMI The Architecture Diagram Revisited Implementing the Basic Objects The Rest of the Server The Client Application Summary 5. Introducing the Bank Example The Bank Example Sketching a Rough Architecture The Basic Use Case Additional Design Decisions A Distributed Architecture for the Bank Example Problems That Arise in Distributed Applications 6. Deciding on the Remote Server A Little Bit of Bias Important Questions When Thinking About Servers Should We Implement Bank or Account? 7. Designing the Remote Interface Important Questions When Designing Remote Interfaces Building the Data Objects Accounting for Partial Failure 8. Implementing the Bank Server The Structure of a Server Implementing the Server Generating Stubs and Skeletons 9. The Rest of the Application The Need for Launch Code Our Actual Launch Code Build Test Applications Build the Client Application Deploying the Application Part II. Drilling Down: Scalability 10. Serialization The Need for Serialization Using Serialization How to Make a Class Serializable The Serialization Algorithm Versioning Classes Performance Issues The Externalizable Interface 11. Threads More Than One Client Basic Terminology Threading Concepts Support for Threads in Java Deadlock Threading and RMI 12. Implementing Threading The Basic Task Guidelines for Threading Pools: An Extended Example Some Final Words on Threading 13. Testing a Distributed Application Testing the Bank Application 14. The RMI Registry Why Use a Naming Service? The RMI Registry The RMI Registry Is an RMI Server Examining the Registry Limitations of the RMI Registry Security Issues 15. Naming Services Basic Design, Terminology, and Requirements Requirements for Our Naming Service Federation and Threading The Context Interface The Value Objects ContextImpl Switching Between Naming Services The Java Naming and Directory Interface (JNDI) 16. The RMI Runtime Reviewing the Mechanics of a Remote Method Call Distributed Garbage Collection RMI's Logging Facilities Other JVM Parameters 17. Factories and the Activation Framework Resource Management Factories Implementing a Generic Factory A Better Factory Persistence and the Server Lifecycle Activation A Final Word About Factories Part III. Advanced Topics 18. Using Custom Sockets Custom Socket Factories Incorporating a Custom Socket into an Application 19. Dynamic Classloading Deploying Can Be Difficult Classloaders How Dynamic Classloading Works The Class Server Using Dynamic Classloading in an Application 20. Security Policies A Different Kind of Security Problem Permissions Security Managers Setting Up a Security Policy 21. Multithreaded Clients Different Types of Remote Methods Handling Printer-Type Methods Handling Report-Type Methods Generalizing from These Examples 22. HTTP Tunneling Firewalls CGI and Dynamic Content HTTP Tunneling A Servlet Implementation of HTTP Tunneling Modifying the Tunneling Mechanism The Bank via HTTP Tunneling Drawbacks of HTTP Tunneling Disabling HTTP Tunneling 23. RMI, CORBA, and RMI/IIOP How CORBA Works The Bank Example in CORBA A Quick Comparison of CORBA and RMI RMI on Top of CORBA Converting the Bank Example to RMI/IIOP Index