Survey							
                            
		                
		                * Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Lesson 3 Remote Method Invocation (RMI) Mixing RMI and sockets Rethinking out tic-tac-toe game Distributed Objects  Simple idea – objects existing on one machine (server) may be accessed from another machine  Eliminates need to “marshal” and “unmarshal” data sent over sockets  Underneath same process, but is hidden from user  CORBA is alternative technology  RMI is only Java – to –Java, CORBA is language independent (as long as bindings have been defined)  JNI makes this distinction a little less rigid RMI Cartoon1 RMI Cartoon2 Steps for RMI Application  Implement on single machine first (as we do)  Create two directories – client – server  Three files need to be built: – The implementation class – An interface listing the methods in the implementation class which you want to make remote – A server class, which creates one or more implementation objects and posts them to the registry. Creating the interface  Interface file (e.g. Store.java) – Extend java.rmi.Remote – Publish your public methods and be sure they all throw java.rmi.RemoteException  Implementation file (e.g StoreImpl.java) – Import java.rmi.server.UnicastRemoteObject – Implement Store – Extend UnicastRemoteObject – Program implementations – Explicitly add a null construct that calls super() Steps for RMI, cont.  Run rmic –v1.2 on the StoreImpl class – This produces StoreImpl_Stub.class  Server class (e.g. StoreServer.java) – Import java.rmi.Naming; – Create a new object instance – Call Naming.bind(…) to store the register the object with the naming service Steps for RMI, cont.  Create the client – Change to the client dir and copy Store.classand StoreImpl_Stub.class (or you can import them but remember that these will ultimated by on different machines). – Create StoreClient.java and import: java.rmi.Naming; java.rmi.RemoteException; java.net.MalformedURLException; java.rmi.NotBoundException; Steps for rmi, cont. – Call Naming.lookup() to get remote object reference (be sure to cast to interface type). – Be sure to handle imported exceptions – Once you get remote object reference, handle as regular object (there are some subtle differences that we’ll explore later). Deploying the Application  Start the rmiregistry – rmiregistry & (Unix) – start rmiregistry (Windows)  Start the StoreServer class – java StoreServer & (Unix)  Run the client  That’s it! Additional Issues – covered next time  Objects which are not remote are copied (slow!)  Stub and interface codes can be downloaded by client (typical for real distributed systems)  Security issues in real system (see ch. 5 in Core Java 2)  Subtleties with Object methods (clone, etc)  Using callbacks with RMI  Synchronization  Registering multiple objects  Bottom Line: Don’t be too fancy! Examples  tic-tac-toe reorganized as standalone back- end object  single-threaded test of TTT object  multithreaded test of TTT object using polling  client-server TTT using RMI and polling  client-server TTT using RMI over sockets  client-server TTT using RMI callbacks.