Does there exist a minimal "Hello" kind of an example for getting started with the Remote Object Activation feature of RMI?
Created May 4, 2012
Getting this code to run consists of executing the following steps:
- Step 1: Compile all class files
- Step 2: On the server side, run rmic on the HelloImpl class and copy the stub over to the client side.
- Step 3: On the server side, execute the shell file activate.sh.
- Step 4: On the client side, execute the bat file runclient.bat.
Since I used a Solaris machine as a server and an NT machine as a client, for command line invocations I have a shell file on the server side and a bat file on the client side. Although these files are trivial in this example and are not really needed, I have included them so that the reader can compare the simple invocations here with those found elsewhere in the remote object activation tutorials.
For a detailed discussion of the classes and methods used in the code shown below, the reader is referred to the RMI Specification document and to the remote object activation tutorials.
////// server and client file: Hello.java ////// import java.rmi.*; public interface Hello extends Remote { public String sayHello() throws RemoteException; } ////// server file: HelloImpl.java ////// import java.rmi.*; import java.rmi.activation.*; public class HelloImpl extends Activatable implements Hello { public HelloImpl( ActivationID id, MarshalledObject data ) throws RemoteException { super( id, 0 ); } public String sayHello() { return "Hello from Avi Kak"; } } ////// server file: ActivationSetup.java ////// import java.rmi.*; import java.rmi.activation.*; public class ActivationSetup { public static void main( String[] args ) throws Exception { ActivationGroupID agi = ActivationGroup.getSystem().registerGroup( new ActivationGroupDesc( null, null ) ); ActivationDesc desc = new ActivationDesc( agi, "HelloImpl", null, null ); Hello helloserver = (Hello) Activatable.register( desc ); Naming.rebind( "rmi://localhost/HelloServer", helloserver ); System.exit(0); } } ////// server file: activate.sh ////// rmid -C-Djava.rmi.server.logCalls=true & rmiregistry & sleep 1 java ActivationSetup ////// client file: HelloClient.java ////// import java.rmi.*; public class HelloClient { public static void main( String[] args ) throws Exception { Hello server = ( Hello ) Naming.lookup( "rmi://RVL4.ecn.purdue.edu/HelloServer" ); System.out.println( server.sayHello() ); } } /////// client file: runclient.bat /////// java HelloClient