Remote Method Invocation - SPARCS - KAIST

farflungconvyancerΛογισμικό & κατασκευή λογ/κού

2 Δεκ 2013 (πριν από 3 χρόνια και 6 μήνες)

290 εμφανίσεις

Remote Method
Invocation

1/2

“Hello World”

August 8, 1997

SPARCS, KAIST

dgtgrade@sparcs.kaist.ac.kr

dgtgrade@SPARCS.KAIST
.ac.kr

2

Table of Contents


What is?


Security


Object Serialization


Under the Hood



dgtgrade@SPARCS.KAIST
.ac.kr

3

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

4


needs threaded Server


RPC( Remote Procedure Call )


external data representation, such as
XDR


does not translate well into
distributed object systems

Cont’d

dgtgrade@SPARCS.KAIST
.ac.kr

5

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

6

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

7


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’d

cont

dgtgrade@SPARCS.KAIST
.ac.kr

8


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

Cont’d

dgtgrade@SPARCS.KAIST
.ac.kr

9

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

10


Compatibility with existing Java
programs, Transparency to the
programmer


Cont’d

Server Program
Skeleton
Remote Reference Layer
Transport Layer
Client
Program
Stub
Remote Reference Layer
Transport Layer
The Internet

Logical Path

cont

dgtgrade@SPARCS.KAIST
.ac.kr

11


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


Cont’d

dgtgrade@SPARCS.KAIST
.ac.kr

12

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

13

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

14

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

15

Cont’d


package examples.hello;

public interface Hello extends java.rmi.Remote {


String sayHello() throws java.rmi.RemoteException;

}

Program Source

dgtgrade@SPARCS.KAIST
.ac.kr

16

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

17

Cont’d


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!";


}











Program Source

cont

dgtgrade@SPARCS.KAIST
.ac.kr

18










implements a interface


java.rmi.server.UnicastRemot
eObject
extends
java.rmi.server.RemoteServer

extends
java.rmi.server.RemoteObject


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();


}


}

}


cont

dgtgrade@SPARCS.KAIST
.ac.kr

19


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’d

cont

dgtgrade@SPARCS.KAIST
.ac.kr

20


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

Cont’d

dgtgrade@SPARCS.KAIST
.ac.kr

21

Client Applet






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);


}

}



Program Source

dgtgrade@SPARCS.KAIST
.ac.kr

22

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


dgtgrade@SPARCS.KAIST
.ac.kr

23

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

24

Talking to registry



Stub

Hello Client

HelloImpl_Skel.class

HelloImpl_Stub.class

Registry

HelloImpl.class

Client

Server

lookup()

where’s Hello

Hello is here

Send the stub

Here’s the Stub

sayHello()

“Hello”

dgtgrade@SPARCS.KAIST
.ac.kr

25

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