| The code for the server classes RMIExampleServer 
              and RMIExampleImpl and the interface RMIExampleInterface 
              described in the book is shown below. Also, the policy files and 
              support files are includes. Note that RMIExampleServer belongs to 
              the package javatech.rmi18.server.impl 
              and so must reside in the client subdirectory as shown by this path:  
              javatech|
 |__ rmi18
 |
 |__ server
 |
 |-- 
                impl
  
              
                 
                  | RMIExampleServer.java |   
                  |  // RMIExampleServer.java
 package javatech.rmi18.server.impl;
 
 import java.net.MalformedURLException;
 import java.rmi.*;
 
 /** The server class that will get run to start up the remote
 * implementation class and bind it into the 
                      RMI registry. **/
 public class RMIExampleServer
 {
 public static void main (String[] args) {
 
 // Create and install a security 
                      manager
 if (System.getSecurityManager() 
                      == null) {
 System.setSecurityManager(new 
                      RMISecurityManager());
 }
 
 // Instantiate an RMIExampleImpl 
                      implementation class and bind
 // into the registry.
 try {
 // Instantiate.
 System.err.println ("Constructing 
                      an RMIExampleImpl");
 RMIExampleImpl impl 
                      = new RMIExampleImpl ();
 
 // Bind into the registry 
                      using the java.rmi.Naming API.
 System.err.println ("(re)binding 
                      it");
 Naming.rebind ("//localhost:3001/rmi-example-server", 
                      impl);
 System.err.println (
 "RMIExampleServer 
                      ready and waiting on clients"
 );
 }
 catch (RemoteException re) {
 System.err.println (re);
 }
 catch (MalformedURLException mue) 
                      {
 System.err.println (mue);
 }
 } // main
 } // class RMIExampleServer
 |    In the same directory as above:  
              
                 
                  | RMIExampleImpl.java |   
                  |  // RMIExampleImpl.java
 package javatech.rmi18.server.impl;
 
 import java.rmi.Remote;
 import java.rmi.RemoteException;
 import java.rmi.server.UnicastRemoteObject;
 
 import javatech.rmi18.server.*; // This is where the 
                      remote interface lives
 
 /** The implementation class that implements the remote 
                      methods declared
 * in the RMIExampleInterface interface. 
                      **/
 public class RMIExampleImpl
 extends UnicastRemoteObject
 implements RMIExampleInterface
 {
 // The default constructor will not work since 
                      UnicastRemoteObject,
 // which we extend, throws RemoteException, 
                      which the default
 // constructor provided by the compiler does 
                      not. Therefore, we must
 // implement a default constructor that throws 
                      RemoteException even
 // if the constructor does nothing at all. It 
                      will, of course,
 // automatically call its superclass constructor.
 
 /** Constructor. Must be declared to throw RemoteException. 
                      **/
 public RMIExampleImpl () throws RemoteException 
                      {}
 
 /** Echoes on the server side the input string 
                      provided by the
 * client. **/
 public void method1 (String s) {
 System.out.println ("RMIExampleImpl.method1: 
                      " + s);
 } // method1
 
 /** Adds the input parameters and returns the 
                      sum. **/
 public int add (int a, int b) {
 System.out.println ("RMIExampleImpl.add: 
                      computing sum of " +
 a 
                      + " and " + b);
 return a + b;
 } // add
 
 /** Does something locally. There is no way 
                      to call this method
 * remotely since it does not appear in 
                      the list of remote methods
 * in the RMIExampleInterface 
                      interface. **/
 public void doSomethingLocal (float x) {
 System.err.println ("RMIExampleImpl.doSomethingLocal: 
                      local only");
 } // doSomethingLocal
 } // class RMIExampleImpl
 |    The interface is in the following path:  
              javatech|
 |__ rmi18
 |
 |__ server
 
  
              
                 
                  | RMIExampleInterface.java |   
                  | // RMIExampleInterface.java
 package javatech.rmi18.server;
 
 import java.rmi.Remote;
 import java.rmi.RemoteException;
 
 /** The remote interface for use with the RMI Example in 
                      chapter 18. **/
 public interface RMIExampleInterface extends Remote 
                      {
 public void method1 (String s) throws RemoteException;
 public int add (int i, int j) throws RemoteException;
 } // interface RMIExampleInterface
 
 |      See the RMI example support files page 
              for the policy file plus the build and run command files for the 
              client. Most recent update: Oct.12, 2005 |