0% found this document useful (0 votes)
65 views22 pages

Remote Method Invocation: Based On Notes by D. Hollinger Also Based On Sun's Online Java Tutorial

1) Remote Method Invocation (RMI) allows developers to develop Java applications and move some objects to remote machines to access them, without having to deal with network communication details. 2) RMI provides natural method call semantics for remote objects, making remote calls behave similar to local calls. Developers only need to handle a few additional exceptions. 3) The RMI registry allows clients to lookup remote objects by name, simplifying how clients specify the location of remote objects.

Uploaded by

Gaurav Sharma
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
65 views22 pages

Remote Method Invocation: Based On Notes by D. Hollinger Also Based On Sun's Online Java Tutorial

1) Remote Method Invocation (RMI) allows developers to develop Java applications and move some objects to remote machines to access them, without having to deal with network communication details. 2) RMI provides natural method call semantics for remote objects, making remote calls behave similar to local calls. Developers only need to handle a few additional exceptions. 3) The RMI registry allows clients to lookup remote objects by name, simplifying how clients specify the location of remote objects.

Uploaded by

Gaurav Sharma
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 22

Remote Method Invocation

Based on Notes by D. Hollinger


Also based on Sun’s Online Java
Tutorial

Netprog 2002 Java RMI 1


Network Programming
Paradigms
• Sockets programming: design a
protocol first, then implement clients
and servers that support the protocol.
• RMI: Develop an application, then
(statically) move some objects to
remote machines.
– Not concerned with the details of the actual
communication between processes –
everything is just method calls.
Netprog 2002 Java RMI 2
Call Semantics
• Method Call Semantics – what does it mean to
make a call to a method?
– How many times is the method run?
– How do we know the method ran at all?
• RMI does a great job of providing natural call
semantics for remote objects/methods.
– Simply a few additional Exceptions that you need to
handle.
– Objects implementing the Remote interface are
passed by reference. Non-remote (serializable)
objects and primitive types are passed by value.
Netprog 2002 Java RMI 3
Finding Remote Objects
• It would be awkward if we needed to include
a hostname, port and protocol with every
remote method invocation.
• RMI provides a Naming Service through the
RMI Registry that simplifies how programs
specify the location of remote objects.
– This naming service is a JDK utility called
rmiregistry that runs at a well known address
(by default).

Netprog 2002 Java RMI 4


RMI Adds a few layers

Client App. Server App.


Stubs Skeleton
Remote Reference Remote Reference
Transport Transport

Netprog 2002 Java RMI 5


Remote Object References
• The client acquires a reference to a remote
object.
– This part is different from creating a local object.

• The client calls methods on the remote object


– No (syntactic) difference!
– Just need to worry about a few new exceptions.

Netprog 2002 Java RMI 6


Overview of RMI
Programming
• Define an interface that declares the methods that
will be available remotely.
• The server program must include a class that
implements this interface.
• The server program must create a remote object and
register it with the naming service.

• The client program creates a remote object by asking


the naming service for an object reference.

Netprog 2002 Java RMI 7


Java Interfaces
• Similar to Class
• No implementation! All methods are
abstract (virtual for C++ folks).
• Everything is public.
• No fields defined, just Methods.
• No constructor
• an Interface is an API that can be
implemented by a Class.
Netprog 2002 Java RMI 8
Interfaces and Inheritance
• In Java a class can only extend a single
superclass (single inheritance).
• A class can implement any number of
interfaces.
– end result is very similar to multiple
inheritance.

Netprog 2002 Java RMI 9


Sample Interface
public interface Shape {
public double getArea();
public void draw();
public void fill(Color c);
}

Netprog 2002 Java RMI 10


Implementing an Interface
public class Circle implements Shape {
private double radius;
private Point center;

// define a constructor and other


// methods

// MUST define the methods:


// getArea();
// draw();
// fill(Color c);
}

Netprog 2002 Java RMI 11


Server Details – extending
Remote
• Create an interface the extends the
java.rmi.Remote interface.
– This new interface includes all the public methods
that will be available as remote methods.

import java.rmi.*;
public interface MyRemote extends Remote {
public int foo(int x) throws RemoteException;
public String blah(int y) throws RemoteException;
. . .
}

Netprog 2002 Java RMI 12


How the interface will be used
Remote Interface RemoteServer Class
provides methods
extends needed by extends
Your Interface UnicastRemoteObject
implements
extends

Class implementing
your remote service

Netprog 2002 Java RMI 13


Server Details –
Implementation Class
• Create a class that implements the
interface.
– The class should extend UnicastRemoteObject*
• This class needs a constructor that throws
RemoteException !
• This class is now used by rmic to create
the stub and skeleton code.
*It doesn’t have to extend UnicastRemoteObject, there is another way…

Netprog 2002 Java RMI 14


Remote Object Implementation Class
public class MyRemoteImpl extends
UnicastRemoteObject implements MyRemote {

public MyRemoteImpl() throws RemoteException


{}

public int foo(int x) {


return(x+1);
}
public String blah(int y) {
return(“Your number is “ + y);
}
}
Netprog 2002 Java RMI 15
Generating stubs and skeleton
• Compile the remote interface and
implementation:

> javac MyRemote.java MyRemoteImpl.java

• Use rmic to generate MyRemoteImpl_stub.class,


MyRemoteImpl_skel.class

> rmic MyRemoteImpl

Netprog 2002 Java RMI 16


Server Detail – main()
• The server main() needs to:
– create a remote object.
– register the object with the Naming service.

public static void main(String args[]) {


try {
MyRemoteImpl r = new MyRemoteImpl();
Naming.bind(“joe”,r);
} catch (RemoteException e) {
. . .
Netprog 2002 Java RMI 17
Client Details
• The client needs to ask the naming service
for a reference to a remote object.
– The client needs to know the hostname or IP
address of the machine running the server.
– The client needs to know the name of the remote
object.
• The naming service uses URIs to identify
remote objects.

Netprog 2002 Java RMI 18


Using The Naming service
• Naming.lookup() method takes a string
parameter that holds a URI indicating the
remote object to lookup.
rmi://hostname/objectname

• Naming.lookup() returns an Object!


• Naming.lookup() can throw
– RemoteException
– MalformedURLException
Netprog 2002 Java RMI 19
Getting a Remote Object
try {
Object o =
Naming.lookup(“rmi://monica.cs.rpi.edu/joe”);

MyRemote r = (MyRemote) o;
// . . . Use r like any other Java object!
} catch (RemoteException re) {
. . .
} catch (MalformedURLException up) {
throw up;
}

Netprog 2002 Java RMI 20


Starting the Server
• First you need to run the Naming
service server:
rmiregistry
• Now run the server:
java MyRemoteImpl

Netprog 2002 Java RMI 21


Sample Code
• There is sample RMI code on the
course homepage:
– BankAccount: remote access to a bank
account
– SimpleRMI: remote integer arithmetic
– AlternativeSimpleRMI: Implementation
class doesn’t extend UnicastRemoteObject
– RemoteSort: remote sort server – uses
Java List objects
Netprog 2002 Java RMI 22

You might also like