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
Remote Method Invocation 1/2 “Hello World” August 8, 1997 SPARCS, KAIST [email protected] Table of Contents • • • • What is? Security Object Serialization Under the Hood [email protected] T.ac.kr 2 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 cont – applications-level protocols to encode and decode messages [email protected] T.ac.kr 3 Cont’d – needs threaded Server • RPC( Remote Procedure Call ) – external data representation, such as XDR – does not translate well into distributed object systems [email protected] T.ac.kr 4 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 [email protected] T.ac.kr 5 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 [email protected] T.ac.kr 6 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 [email protected] T.ac.kr 7 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 [email protected] T.ac.kr 8 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 [email protected] T.ac.kr 9 Cont’d • Compatibility with existing Java programs, Transparency to the programmer Server Program Logical Path Skeleton Remote Reference Layer Transport Layer Client Program Stub Remote Reference Layer Transport Layer The Internet cont [email protected] T.ac.kr 10 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 [email protected] T.ac.kr 11 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 [email protected] T.ac.kr 12 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 [email protected] T.ac.kr 13 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 [email protected] T.ac.kr 14 Cont’d Program Source package examples.hello; public interface Hello extends java.rmi.Remote { String sayHello() throws java.rmi.RemoteException; } [email protected] T.ac.kr 15 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 [email protected] T.ac.kr 16 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 [email protected] T.ac.kr 17 Cont’d 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(); } } } • implements a interface – java.rmi.server.UnicastRemot eObject extends java.rmi.server.RemoteServer extends java.rmi.server.RemoteObject cont [email protected] T.ac.kr 18 Cont’d • define a constructor – super( ) • java.rmi.server.UnicastRemote Object, 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 [email protected] T.ac.kr 19 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 [email protected] T.ac.kr 20 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); } } [email protected] T.ac.kr 21 Generate Stubs and Skeletons • rmic – rmic -d $HOME/public_html/codeba se examples.hello.HelloImpl – it makes two files • HelloImpl_Stub.class • HelloImpl_Skel.class [email protected] T.ac.kr 22 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 & [email protected] T.ac.kr 23 Talking to registry lookup() where’s Hello Client Hello Client Server Registry Hello is here HelloImpl_Stub.class Send the stub Here’s the Stub Stub HelloImpl_Skel.class sayHello() HelloImpl.class “Hello” [email protected] T.ac.kr 24 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 [email protected] T.ac.kr 25