Download Remote Method Invocation - SPARCS

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
T.ac.kr
14
Cont’d
Program Source
package examples.hello;
public interface Hello extends java.rmi.Remote {
String sayHello() throws java.rmi.RemoteException;
}
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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);
}
}
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
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 &
dgtgrade@SPARCS.KAIS
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”
dgtgrade@SPARCS.KAIS
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
dgtgrade@SPARCS.KAIS
T.ac.kr
25