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 workof 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
[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