1 ///////////////////////////// PassObjectRef.java \\\\\\\\\\\\\\\\\\\\\\\\\\\ 2 import java.rmi.*; 3 interface PassObjectRef extends Remote { 4 void add( int in ) throws RemoteException; 5 String get() throws RemoteException; 6 } 7 /////////////////////////// PassObjectRefImpl.java \\\\\\\\\\\\\\\\\\\\\\\\\ 8 import java.rmi.*; 9 import java.rmi.server.*; 10 public class PassObjectRefImpl extends UnicastRemoteObject 11 implements PassObjectRef { 12 private int[] array = new int[9]; 13 private int total = 0; 14 public PassObjectRefImpl() throws RemoteException { 15 System.out.println( "PassObjectRefImpl ctor" ); 16 } 17 public void add( int in ) { 18 array[total++] = in; 19 } 20 public String get() { 21 StringBuffer sb = new StringBuffer(); 22 sb.append( "[ " ); 23 for (int i=0; i < total; i++) { 24 sb.append( array[i] ); 25 sb.append( ' ' ); 26 } 27 sb.append( "]" ); 28 return sb.toString(); 29 } } 30 ///////////////////////////// PassObjectVal.java \\\\\\\\\\\\\\\\\\\\\\\\\\\ 31 import java.io.*; 32 public class PassObjectVal implements Serializable { 33 private int[] array = new int[9]; 34 private int total = 0; 35 public PassObjectVal() { 36 System.out.println( "PassObjectVal ctor" ); 37 } 38 public void add( int in ) { 39 array[total++] = in; 40 } 41 public String get() { 42 StringBuffer sb = new StringBuffer(); 43 sb.append( "[ " ); 44 for (int i=0; i < total; i++) { 45 sb.append( array[i] ); 46 sb.append( ' ' ); 47 } 48 sb.append( "]" ); 49 return sb.toString(); 50 } } 51 /////////////////////////// PassObjectMaster.java \\\\\\\\\\\\\\\\\\\\\\\\\\ 52 import java.rmi.*; 53 interface PassObjectMaster extends Remote { 54 PassObjectRef getObjRef() throws RemoteException; 55 PassObjectVal getObjVal() throws RemoteException; 56 } 57 ///////////////////////// PassObjectMasterImpl.java \\\\\\\\\\\\\\\\\\\\\\\\ 58 import java.rmi.*; 59 import java.rmi.server.*; 60 public class PassObjectMasterImpl extends UnicastRemoteObject 61 implements PassObjectMaster { 62 private PassObjectRef refObj; 63 private PassObjectVal valObj; 64 public PassObjectMasterImpl() throws RemoteException { 65 refObj = new PassObjectRefImpl(); 66 valObj = new PassObjectVal(); 67 for (int i=1; i < 3; i++) { 68 refObj.add( i ); 69 valObj.add( i ); 70 } 71 System.out.println( "PassObjectMasterImpl ctor" ); 72 } 73 public PassObjectRef getObjRef() { 74 return refObj; 75 } 76 public PassObjectVal getObjVal() { 77 return valObj; 78 } } 79 /////////////////////////// PassObjectServer.java \\\\\\\\\\\\\\\\\\\\\\\\\\ 80 import java.rmi.*; 81 import java.rmi.server.*; 82 public class PassObjectServer { 83 public static void main( String[] args ) { 84 System.setSecurityManager( new RMISecurityManager() ); 85 try { 86 PassObjectMaster master = new PassObjectMasterImpl(); 87 Naming.rebind( "masterObj", master ); 88 System.out.println( "masterObj bound" ); 89 } catch (Exception ex ) { 90 System.out.println( ex ); 91 } } } 92 // PassObjectRefImpl ctor 93 // PassObjectVal ctor 94 // PassObjectMasterImpl ctor 95 // masterObj bound 96 /////////////////////////// PassObjectClient.java \\\\\\\\\\\\\\\\\\\\\\\\\\ 97 import java.rmi.*; 98 import java.rmi.server.*; 99 public class PassObjectClient { 00 public static void main( String[] args ) { 01 System.setSecurityManager( new RMISecurityManager() ); 02 String url = "rmi:///"; 03 try { 04 PassObjectMaster master = 05 (PassObjectMaster) Naming.lookup( url + "masterObj" ); 06 PassObjectRef ref1 = master.getObjRef(); 07 PassObjectVal val1 = master.getObjVal(); 08 System.out.println( "ref1 is " + ref1.get() ); 09 System.out.println( "val1 is " + val1.get() + '\n' ); 10 for (int i=3; i < 5; i++) { 11 ref1.add( i ); 12 val1.add( i ); 13 } 14 System.out.println( "ref1 is " + ref1.get() ); 15 System.out.println( "val1 is " + val1.get() + '\n' ); 16 ref1 = master.getObjRef(); 17 val1 = master.getObjVal(); 18 System.out.println( "ref2 is " + ref1.get() ); 19 System.out.println( "val2 is " + val1.get() ); 20 } catch (Exception ex ) { 21 System.out.println( ex ); 22 } 23 System.exit( 0 ); 24 } } 25 // ref1 is [ 1 2 ] 26 // val1 is [ 1 2 ] 27 // 28 // ref1 is [ 1 2 3 4 ] 29 // val1 is [ 1 2 3 4 ] 30 // 31 // ref2 is [ 1 2 3 4 ] 32 // val2 is [ 1 2 ]