Transcript Lesson 12
HANDOUT 14
Remote Method Invocation (RMI)
THIS DOCUMENT CAN NOT BE REPRODUCED
OR DISTRIBUTED WITHOUT TH E WRITTEN
PERMISSION OF THE AUTHOR
BY GEORGE KOUTSOGIANNAKIS
1
Remote Method Invocation
(RMI)
• 1.0 DEFINITION
• THE REMOTE METHOD INVOCATION API ENABLES CLIENT
AND SERVER COMMUNICATIONS OVER THE NET
• RMI ALLOWS JAVA (ONLY) OBJECTS , RESIDING ON THE
SAME OR DIFFERENT COMPUTERS ,TO COMMUNICATE
WITH ONE ANOTHER VIA REMOTE METHOD CALLS OVER
THE NETWORK.
• RMI PROVIDES FOR TRANSFER OF OBJECTS VIA OBJECT
SERIALIZATION.
– SERIALIZATION ALLOWS OBJECTS TO CARRY ALL THEIR
ATTRIBUTES (FIELDS) WITH THEM OVER THE NETWORK
BY GEORGE KOUTSOGIANNAKIS
2
Remote Method Invocation
(RMI)
• OBJECT SERIALIZATION IS USED TO SEND THE ARGUMENTS
(PROPERTIES) OF A METHOD INVOCATION FROM THE
CLIENT OBJECT TO THE REMOTE OBJECT
• OBJECT SERIALIZATION IS ALSO USED TO RETURN THE
VALUES FROM THE SERVER OBJECT BACK TO THE CLIENT
OBJECT.
• OBJECTS ARE CONVERTED INTO A STREAM OF BYTES THAT
CAN BE TRASMITTED OVER THE NETWORK BY USING THE
ObjectOutputStream CLASS.
• OBJECTS ARE RECONSTRUCTED AFTER TRANSMISSION BY
USING THE ObjectInputStream CLASS.
BY GEORGE KOUTSOGIANNAKIS
3
Remote Method Invocation
(RMI)
• THE SERIALIZATION USED BY RMI IS TRANSPARENT TO THE
CLIENT AND SERVER OBJECTS.
• APPLICATIONS USING TCP SOCKETS ARE RESPONSIBLE FOR
SERIALIZING AND DESERIALIZING OBJECTS VIA INPUT AND
OUTPUT STREAMS.
• SECURITY IS AN ISSUE.
– JAVA OFFERS SECURITY VIA THE SECURITY PACKAGE.
• THE IMPLEMENTATION OF THE INTERFACE METHOD AT THE
SERVER HAS TO IMPLEMENT THE SERIALIZABLE
INTERFACE.
BY GEORGE KOUTSOGIANNAKIS
4
Remote Method Invocation
(RMI)
• TO OPEN A STREAM AND READ FROM AN INTERNET SITE:
• BufferedReader in = new BufferedReader ( new InputStreamReader
( url.openStream ( ) );
– url is an object of the URL class that carries the url of the site you want to
connect (URL implements serializable interface)
– openStream ( ) is a method of the URL class that Opens a connection to
this URL and returns an InputStream object for reading from that
connection.
– InputStreamReader class constructor creates an object that translates the
InputStream bytes to UNICODE characters.
– The InputStreamReader object is now passed to BufferedReader
constructor that creates a stream that is buffered so that one line at a time
can be read out of the buffer.
BY GEORGE KOUTSOGIANNAKIS
5
Remote Method Invocation
(RMI)
• LOCAL OBJECTS ARE OBJECTS THAT EXECUTE ON A
PARTICULAR HOST.
• REMOTE OBJECTS ARE OBJECTS THAT EXECUTE ON ALL
OTHER HOSTS.
• REMOTE OBJECTS HAVE TO BE EXPORTED.
• AN OBJECT ITSELF EXPORTS ITSELF BY REGISTERING WITH
A REMOTE REGISTRY SERVER.
• RMI MAKES USE OF STUBS AND SKELETONS (1.2.2 USES
ONLY SKELETONS).
– A STUB IS A LOCAL OBJECT THAT ACTS AS A PROXY FOR A
REMOTE OBJECT
BY GEORGE KOUTSOGIANNAKIS
6
Remote Method Invocation
(RMI)
– THE STUB PROVIDES THE SAME METHODS AS THE REMOTE
OBJECT.
– LOCAL METHODS INVOKE THE METHODS OF THE STUB AS IF
THEY WERE METHODS OF THE REMOTE OBJECT.
– THE SKELETON IS THE SAME AS THE STUB BUT ON THE
REMOTE HOST SIDE (SERVER).
BY GEORGE KOUTSOGIANNAKIS
7
Remote Method Invocation
(RMI)
• RMI AVOIDS THE NEED FOR PROGRAMMERS TO LEARN A
SEPARATE IDL (INTERFACE DEFINITION LANGUAGE).
• SUPPORT FOR CROSS LANGUAGES IS VIA A NEW RELEASE
OF RMI CALLED RMI OVER IIOP (INTERNET INTER ORB
PROTOCOL)
– Using RMI-IIOP, objects can be passed both by reference and by value
over IIOP.
With RMI over IIOP, developers can write remote interfaces in the Java
programming language and implement them just using Java technology
and the Java RMI APIs. These interfaces can be implemented in any other
language that is supported by an OMG mapping and a vendor supplied
ORB for that language.
8
Remote Method Invocation
(RMI)
• The Remote Method Invocation (RMI) over
Internet Inter-Orb Protocol (IIOP) lets existing
RMI code reference and look up an object
using the CORBA CosNaming service. This gives
you greater interoperability between
architectures.
• A separate compiler is needed.
9
Remote Method Invocation
(RMI)
• 2.0 HOW RMI WORKS
Client
Default port 1099
Access to remote object requested
by name
Server
Object
registry
Local object
Object
is invoked
Remote object
Remote
object
registers its
name
BY GEORGE KOUTSOGIANNAKIS
10
Remote Method Invocation
(RMI)
• BEFORE THE CLIENT IS STARTED THE RMI REGISTRY HAS
TO BE STARTED.
– RMI REGISTRY IS A SERVER SIDE NAMING REPOSITORY THAT
ALLOWS REMOTE CLIENTS TO GET A REFERENCE TO A
REMOTE SERVER OBJECT.
• ALSO THE SERVER PROGRAM HAS TO BE STARTED BEFORE
THE CLIENT.
BY GEORGE KOUTSOGIANNAKIS
11
Remote Method Invocation
(RMI)
• RMI IS IMPLEMENTED BY 5 PACKAGES:
– java.rmi PROVIDES THE REMOTE INTERFACE, A CLASS FOR
ACCESSING REMOTE OBJECTS AND SECURITY MANAGER FOR
RMI.
– Java.rmi.registry PROVIDES CLASSES AND INTERFACES THAT
ARE USED BY THE REMOTE REGISTRY.
– java.rmi.server PROVIDES CLASSES AND INTERFACES USED TO
IMPLEMENT REMOTE OBJECTS AND STUBS AND TO SUPPORT
RMI COMMUNICATIONS.
– java.rmi.activation SUPPORTS PERSISTENT OBJECT REFERENCES
AND REMOTE OBJECT ACTIVATION
– java.rmi.dgc SUPPORTS RMI DISTRIBUTED GARBAGE
COLLECTOR.
BY GEORGE KOUTSOGIANNAKIS
12
Remote Method Invocation
(RMI)
• EXAMPLE OF AN RMI APPLICATION (TemperatureServerImpl)
• LET US DEVELOP AN APPLICATION THAT WILL MONITOR
THE WEATHER INFORMATION OVER THE INTERNET FROM
THE WEATHER BUREAU WEB SITE TWICE A DAY.
• THE APPLICATION , FOR THE SHAKE OF THE
PRESENTATION, WILL RUN LOCALLY (I HAVE COPIED THE
PAGE Traveler.html OF THE SITE TO THE WWWROOT
DIRECTORY IN MY LAPTOP).
• IT IS ASSUMED THAT WE HAVE A LOCAL NETWORK. THE
SERVER GETS THE WEATHER INFORMATION FROM THE
INETRNET AND THE CLIENTS OF THE LOCAL NETWORK
CAN ACCESS THE INFORMATION FROM THE SERVER VIA
REMOTE METHOD INVOCATION
BY GEORGE KOUTSOGIANNAKIS
13
Remote Method Invocation
(RMI)
• 4.0 SUMMARY OF TEMPERATURESERVER EXAMPLE:
//host:port/RemoteObjectName
client
Info from server
retrieved
whenever client
wishes
internet
Remote server
rmi
Unicast (point-point)
communications
between objects via
method calls.
Aquire
information
from weather
forecast
site and store
it
http
Web server
Weather
forecast site
•Info is stored in an array of objects
•Info is downloaded when
server program starts and gets repeated twice a day.
14
Remote Method Invocation
(RMI)
• 3.0 IMPLEMENTING THE RMI APPLICATION
• AT THE SERVER SIDE:
– REMOTE OBJECTS ARE REFERENCED VIA INTERFACES.
YOU CREATE AN INTERFACE FOR EACH OBJECT.
• THE INTERFACE MUST BE PUBLIC AND MUST EXTEND
INTERFACE Remote .
• DEFINE THE REMOTE METHODS THAT YOU WANT TO
INVOKE WITHIN THE INTERFACE. THE METHODS MUST
THROW RemoteException .
• IN OUR EXAMPLE THERE THE INTERFACE is:
– public interface TemperatureServer extends Remote {
» (See code)
BY GEORGE KOUTSOGIANNAKIS
15
Remote Method Invocation
(RMI)
• The interface will invoke method getWeatherInfo() which returns an
array of objects.
• Extending the interface Remote implies that our objects can be
remotely accessed by any JVM that has network connection to the
server and the appropriate stubs.
– CREATE A CLASS THAT IMPLEMENTS THE INTERFACE
(TemperatureServerImpl).
• THE CLASS EXTENDS UnicastRemoteObject CLASS (SUBCLASS
OF RemoteServer CLASS). (SEE TemperatureServerImpl extends
UnicastRemoteObject implements TemperatureServer, Runnable)
– UnicastRemoteObject CLASS ALLOWS THE REMOTE OBJECT TO
WAIT FOR A CLIENT CONNECTION ON AN ANONYMOUS PORT
NUMBER.
16
Remote Method Invocation
(RMI)
• THE CLASS SHOULD HAVE A CONSTRUCTOR THAT CREATES ,
INITIALIZES THE REMOTE OBJECT
• IT SHOULD IMPLEMENT ALL THE METHODS DEFINED IN THE
REMOTE INTERFACE (SEE public WeatherInfo[] getWeatherInfo () )
• IT SHOULD HAVE A main METHOD THAT CAN BE EXECUTED AS A
REMOTE CLASS.
– IT SHOULD REGISTER A NAME BY WHICH IT CAN BE REMOTELY
REFERENCED WITH THE REMOTE REGISTRY. ( SEE String
serverObjectName= “//localhost/TempServer”; )
– THE NAME OF THE OBJECT USED BY THE MAIN SHOULD BE BOUND TO
THE NAME USED BY THE CLIENT. (SEE Naming.rebind ( serverObjectName,
temp) ).
• USE rmic COMPILER TO CREATE A STUB AT THE SERVER
– rmic -v1.2 TemperatureServerImpl.
– THIS COMMAND GENERATED THE FILE TemperatureServerImp_stub.class
BY GEORGE KOUTSOGIANNAKIS
17
Remote Method Invocation
(RMI)
– THIS FILE MUST BE AVAILABLE TO THE CLIENT
– START THE REMOTE REGISTRY SERVER. THIS PROGRAM
LISTENS ON THE DEFAULT PORT 1099 FOR INCOMING
REQUESTS TO ACCESS NAMED OBJECTS. ON THE COMMAND
WINDOW TYPE
– start rmiregistry
– LEAVE REGISTRY SERVER RUNNING.
– BOUND REMOTE SERVER OBJECT TO THE REGISTER. RUN THE
COMPILED OBJECT IMPLEMENTATION CLASS
» java TewmperatureServerImpl
» This is a server and shpuld be left running
• AT THE CLIENT
– WRITE A CLIENT PROGRAM THAT WILL CALL THE REMOTE
OBJECT ( THE IMPLEMENTATION OF THE INTERFACE).
BY GEORGE KOUTSOGIANNAKIS
18
Remote Method Invocation
(RMI)
– THE IP ADDRESS OF THE MACHINE THAT THE REMOTE OBJECT
RESIDES SHOULD BE USED (OR THE REMOTE HOST’S NAME).
– Naming.lookup ( serverObjectName) IS USED TO INTERACT WITH
THE RMI REGISTRY TO HELP THE CLIENT OBTAIN A
REFERENCE TO THE REMOTE OBJECT.
– A COPY OF THE INTERFACE STUB SHOULD BE COPIED TO THE
SAME DIRECTORY AS THE CLIENT PROGRAM.
• Start the client prgram by calling;
• java TemperatureClient
BY GEORGE KOUTSOGIANNAKIS
19
Remote Method Invocation
(RMI)
• CLASSES USED:
SERVER
CLIENT
Rmi registry
TemperatureClient.class
Weatheritem.class
TemperatureServerImpl_Stub.class
TemperatureClient$1.class
TemperatureServer.class
temperatureServerImpl.class
WeatherInfo.class
TempeartureServerImpl$timeDelay.class
BY GEORGE KOUTSOGIANNAKIS
20
Remote Method Invocation
(RMI)
• Objects
1) gt (TemperatureClient)
passes ip address of server or
uses localhost
2) remote method call to
object TempServer
3) TemperatureServerImpl_Stub
receives method call and
passes it to the java RMI system
which performs the network
connections
4) requets a reference to
TempServer object from rmi
registry
1)rmi registry server is running
2)temp object calls
UnicastRemoteObject which
exports the remote object
3)name of remote object TempServer
is bound to registry
4)updateWeatherConditions method
stores data from internet site into
WeatherInfo objects (array)
5) client calls getWeatherInfo method
via the interface which in turn returns
a reference to theWeatherInfo array.
6) array objects are passed to client.
BY GEORGE KOUTSOGIANNAKIS
21