250 likes | 447 Views
Remote Method Invocation 1/2 “Hello World”. August 8, 1997 SPARCS, KAIST dgtgrade@sparcs.kaist.ac.kr. Table of Contents. What is? Security Object Serialization Under the Hood. What is?. Networking moving files and data run programs on another host Remote Method Invocation
E N D
Remote Method Invocation1/2 “Hello World” August 8, 1997 SPARCS, KAIST dgtgrade@sparcs.kaist.ac.kr
Table of Contents • What is? • Security • Object Serialization • Under the Hood dgtgrade@SPARCS.KAIST.ac.kr
What is? • Networking • moving files and data • run programs on another host • Remote Method Invocation • a facility that allows Java programs to call certain methods on a remote server • another virtual machine • search engine • remote objects and methods work just like the local ones • Socket • applications-level protocols to encode and decode messages cont dgtgrade@SPARCS.KAIST.ac.kr
Cont’d • needs threaded Server • RPC( Remote Procedure Call ) • external data representation, such as XDR • does not translate well into distributed object systems dgtgrade@SPARCS.KAIST.ac.kr
Security • Just as an applet • a host can limit what the remote clients can do • SecurityManager • Public key authentication • allow different users different levels of access to a remote object dgtgrade@SPARCS.KAIST.ac.kr
Object Serialization • Object reference • really transferred is a reference to the object • problem • the remote machine can’t read what’s in the memory of the local machine • Two ways around this problem • a special remote reference to the object • when the local machine passes a remote object to the remote machine • a copy of the object • when the local machine passes one of its own objects to the remote machine cont dgtgrade@SPARCS.KAIST.ac.kr
Cont’d • To copy an object • convert the object into a stream of bytes • more difficult than it appears at first glance because objects can include other objects as fields • these bytes can also be written to disk, and read back from disk at a later time • For security reasons, some limitation on serializable • All Java primitive types and remote objects can be serialized • non-remote objects can only be serialized if they implement the java.io.Serializable interface cont dgtgrade@SPARCS.KAIST.ac.kr
Cont’d • Not Serializable • Threads, InputSreams, OutputSreams, Peer classes, JDBC ResultSet, Most of the sun classes • Interface java.io.Serializable • has no methods or fields and serves only to identify the semantics of being serializable dgtgrade@SPARCS.KAIST.ac.kr
Under the Hood • Three different mechanisms to pass arguments to and return resluts • primitive types( int, boolean…) • passed by value • reference to remote objects • remote reference • objects that do not implement the Remote interface • complete copies • Objects that do not allow themselves to be serialized cont dgtgrade@SPARCS.KAIST.ac.kr
Cont’d • Compatibility with existing Java programs, Transparency to the programmer Logical Path The Internet cont dgtgrade@SPARCS.KAIST.ac.kr
Cont’d • Stub • a special object that implements the remote interfaces of the remote object • calling remote object, in fact calling an equivalent method in the stub • passes the invocation into the remote reference layer • Remote Reference Layer • Sometimes refers to multiple virtual machines on multiple hosts dgtgrade@SPARCS.KAIST.ac.kr
Packages • java.rmi • include exceptions that will be visible on the client side • java.rmi.server • include exceptions that will be visible on the client side • java.rmi.registry • java.rmi.dgc • distributed garbage collection dgtgrade@SPARCS.KAIST.ac.kr
Hello World • Four source files • The Java remote interface • The Java remote object (server) which implements the remote interface • The Java applet • The HTML code dgtgrade@SPARCS.KAIST.ac.kr
Remote Interface • Why need? • So many problems in network • Characteristics • must be public • extends java.rmi.Remote • throws java.rmi.RemoteException • A remote object passed as an argument or return value must be declared as the remote interface, not the implementation class cont dgtgrade@SPARCS.KAIST.ac.kr
Cont’d Program Source package examples.hello; public interface Hello extends java.rmi.Remote { String sayHello() throws java.rmi.RemoteException; } dgtgrade@SPARCS.KAIST.ac.kr
Implementation Class • Needs to • implements a interface • define a constructor • implements methods • create and install a SecurityManager • create one or more instances of remote object • register a remote object cont dgtgrade@SPARCS.KAIST.ac.kr
Cont’d Program Source package examples.hello; import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class HelloImpl extends UnicastRemoteObject implements Hello { private String name; public HelloImpl(String s) throws RemoteException { super(); name = s; } public String sayHello() throws RemoteException { return "Hello World!"; } cont dgtgrade@SPARCS.KAIST.ac.kr
public static void main(String args[]) { // Create and install a security manager System.setSecurityManager(new RMISecurityManager()); try { HelloImpl obj = new HelloImpl("HelloServer"); Naming.rebind("//myhost/HelloServer", obj); System.out.println("HelloServer bound in registry"); } catch (Exception e) { System.out.println("HelloImpl err: " + e.getMessage()); e.printStackTrace(); } } } Cont’d • implements a interface • java.rmi.server.UnicastRemoteObject extends java.rmi.server.RemoteServer extends java.rmi.server.RemoteObject cont dgtgrade@SPARCS.KAIST.ac.kr
Cont’d • define a constructor • super( ) • java.rmi.server.UnicastRemoteObject, which "exports" the remote object • java.rmi.RemoteException • implements methods • the methods not specified in the remote interface • can only be invoked within the virtual machine running the service • create and install a SecurityManager cont dgtgrade@SPARCS.KAIST.ac.kr
Cont’d • create one or more instances of remote objects • register a remote object • like URL • default port:1099 • For security reasons, an application can bind or unbind only in the registry running on the same host dgtgrade@SPARCS.KAIST.ac.kr
Client Applet Program Source package examples.hello; import java.awt.*; import java.rmi.*; public class HelloApplet extends java.applet.Applet { String message = ""; public void init() { try { Hello obj = (Hello)Naming.lookup("//" + getCodeBase().getHost() + "/HelloServer"); message = obj.sayHello(); } catch (Exception e) { System.out.println("HelloApplet exception: " + e.getMessage()); e.printStackTrace(); } } public void paint(Graphics g) { g.drawString(message, 25, 50); } } dgtgrade@SPARCS.KAIST.ac.kr
Generate Stubs and Skeletons • rmic • rmic -d $HOME/public_html/codebase examples.hello.HelloImpl • it makes two files • HelloImpl_Stub.class • HelloImpl_Skel.class dgtgrade@SPARCS.KAIST.ac.kr
Start Registry and Server • Start registry • rmiregistry & • rmiregistry 2001 & • must stop and restart the registry any time you modify a remote interface, etc. • Launch the server • java HelloImpl & dgtgrade@SPARCS.KAIST.ac.kr
Talking to registry Server Client lookup() where’s Hello Hello Client Registry Hello is here HelloImpl_Stub.class Send the stub Stub Here’s the Stub HelloImpl_Skel.class sayHello() HelloImpl.class “Hello” dgtgrade@SPARCS.KAIST.ac.kr
References • Java Network Programming • Elliotte Rusty Harold, 1997 O’REILLY • JDK1.1.3 Documentation • JavaSoft, 1997, JavaSoft • www.javasoft.com/ • Client/Server Programming with JAVA and CORBA • Robert Orfali •Dan Harkey, 1997, WILLEY dgtgrade@SPARCS.KAIST.ac.kr