Download - An Introduction to Java RMI
![Page 1: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/1.jpg)
95-702 Distributed Systems
Distributed Objects and Java RMI
95-702 Distributed Systems Distributed Objects & Java RMI
1
![Page 2: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/2.jpg)
Learning Objectives:• Understand distributed objects (Chapter 5 of
Coulouris)• Understand Java RMI (Chapter 5 Case study)• Be able to describe the functional and non-
functional characteristics of a distributed object system
• Be able to compare and contrast distributed objects with web services (which is faster?, which is more interoperable?, which is more popular in the industry?)
• Understand Martin Fowler’s First Law of Distributed Objects
95-702 Distributed Systems Distributed Objects & Java RMI
2
![Page 3: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/3.jpg)
3
Review: What is Middleware?
Applications
MiddlewarelayersRequest reply protocol
External data representation
Operating System
RMI, RPC and events
• Applications (clients and services) speak to the middleware.
• TCP/IP is provided by the operating system.• UDP/IP is provided by the operating system.95-702 Distributed Systems Distributed
Objects & Java RMI3
![Page 4: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/4.jpg)
4
Review: external data representation
• External data representation – an agreed standard for the representation of data structures and primitive values
• Marshalling – the process of taking a collection of data itemsand assembling them into a form suitable for transmission in a message
• Unmarshalling – is the process of disassembling them on arrival into an equivalent representation at the destination
• The marshalling and unmarshalling are intended to be carriedout by the middleware layer
95-702 Distributed Systems Distributed Objects & Java RMI
4
![Page 5: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/5.jpg)
Review: Examples of external data representation:
• CORBA’s CDR binary data may be used by different programming languages when CORBA middleware is present
• Java RMI and .Net Remoting use object serialization. These are platform specific (that is, Java on both sides or .Net on both sides) and binary. For Java RMI, we have a JVM running on both sides.
• XML and JSON are primarily textual formats, verbose when compared to binary but interoperable. Why?These are not tied to a particular language or machine architecture.
95-702 Distributed Systems Distributed Objects & Java RMI
5
![Page 6: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/6.jpg)
Review: Generic Request-Reply message structure
messageType
requestId
objectReferencemethodId
arguments
int (0=Request, 1= Reply)
int
RemoteObjectRef
int or Method
array of bytes
95-702 Distributed Systems Distributed Objects & Java RMI
6
![Page 7: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/7.jpg)
Review: generic remote object reference
Internet address port number time object number interface of remote object
32 bits 32 bits 32 bits 32 bits
A remote object reference is an identifier for a remote object.May be returned by or passed to a remote method.
How do these references differ from local references?
95-702 Distributed Systems Distributed Objects & Java RMI
7
![Page 8: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/8.jpg)
895-702 Distributed Systems Distributed Objects & Java RMI
Review: UDP Style Request-Reply Communication
Request
ServerClient
doOperation
(wait)
(continuation)
Replymessage
getRequest
executemethod
messageselect object
sendReply
![Page 9: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/9.jpg)
995-702 Distributed Systems Distributed Objects & Java RMI
UDP Style Request-Reply Communication and the Two Army Problem (1)
Attack at midnight
ServerClient
doOperation
(wait)
(continuation)
getRequest
executemethod
select object
sendReply
Why does this not work?
OK
The server is not sure the client received the message.
![Page 10: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/10.jpg)
1095-702 Distributed Systems Distributed Objects & Java RMI
UDP Style Request-Reply Communication and the Two Army Problem (2)
Attack at midnight
ServerClient
doOperation
(wait)
(continuation)
getRequest
executemethod
select object
sendReply
Why does this not work?
OK
The client is not sure the server received the Ack.
Ack
![Page 11: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/11.jpg)
1195-702 Distributed Systems Distributed Objects & Java RMI
UDP Style Request-Reply Communication and the Two Army Problem (3)
Attack at midnight
ServerClient
doOperation
(wait)
(continuation)
getRequest
executemethod
select object
sendReplyOK
Ack
Consider a minimum sized protocol that solves this problem. If itslast message is lost then agreement has not been achieved or (if it has) this must not be a minimum sized protocol.
![Page 12: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/12.jpg)
Review: What is an IDL?• Definition: An interface definition language (IDL) provides a
notation for defining interfaces in which each of the parameters of a method may be described as for input or output in addition to having its type specified.
• These may be used to allow objects written in different languages to invoke one another. Think Code Generation
• In Java RMI, we use a Java interface.• See also WSDL, WADL, and AIDL• Does REST need an IDL?
95-702 Distributed Systems Distributed Objects & Java RMI
12
![Page 13: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/13.jpg)
13
How would you build this?Dealer ’s computer
Informationprovider
Dealer
Externalsource
Externalsource
Informationprovider
Dealer
DealerDealer
Notification
Notification
Notification
Notification
NotificationNotification
Notification
Notification
Dealer ’s computer
Dealer ’s computerDealer ’s computerNotification
Notification
95-702 Distributed Systems Distributed Objects & Java RMI
13
![Page 14: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/14.jpg)
14
Alternative architectures for distributed event notification
subscriberobserverobject of interest
Event service
object of interest
object of interest observer
subscriber
subscriber
3.
1.
2. notification
notification
notification
notification
95-702 Distributed Systems Distributed Objects & Java RMI
14
![Page 15: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/15.jpg)
What are the goals of Java RMI?• Distributed Java • Almost the same syntax and semantics used by non-
distributed applications• Promote separation of concerns – the implementation is
separate from the interface • The transport layer is TCP/IP
95-702 Distributed Systems Distributed Objects & Java RMI
15
![Page 16: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/16.jpg)
The traditional object model (OOP 101)
• Each object is a set of data and a set of methods. • Object references are assigned to variables.• Interfaces define an object’s methods.• Actions are initiated by invoking methods.• Exceptions may be thrown for unexpected or illegal
conditions.• Garbage collection may be handled by the developer
(C++) or by the runtime (.NET and Java).• We have inheritance and polymorphism.• We want similar features in the distributed case
95-702 Distributed Systems Distributed Objects & Java RMI
16
![Page 17: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/17.jpg)
The distributed object model
• Having client and server objects in different processes enforces encapsulation. You must call a method to change its state.
• Methods may be synchronized to protect against conflicting access by multiple clients.
• Objects are accessed remotely through RMI orobjects are copied to the local machine (if the object’sclass is available locally) and used locally.
• Remote object references are analogous to local ones in that:
1. The invoker uses the remote object reference to identify the object and2. The remote object reference may be passed as an argument to or return value from a local or remote method.
95-702 Distributed Systems Distributed Objects & Java RMI
17
![Page 18: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/18.jpg)
We may use both remote and local method invocations
invocation invocationremote
invocationremote
locallocal
localinvocation
invocationA B
C
D
E
F
95-702 Distributed Systems Distributed Objects & Java RMI
18
Level of transparency issues:
Remote calls should have a syntaxthat is close to local calls.
But it should probably be clear to the programmer that a remote call is beingmade. Remote calls are orders of magnitude slower.
![Page 19: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/19.jpg)
A remote object and its remote interface
interfaceremote
m1m2m3
m4m5m6
Data
implementation
remoteobject
{ of methods
95-702 Distributed Systems Distributed Objects & Java RMI
19
Enterprise Java Beans (EJB’s) provide a remote and local interface.EJB’s are a component based middleware technology. EJB’s live in a container. The container provides a managed server side hosting environment ensuring that non-functional properties are achieved.Middleware supporting the container pattern is called an application server.Quiz: Describe some non-functional concerns that would be handled.Java RMI presents us with plain old distributed objects. Fowler’s First Law of Distributed Objects: “Don’t distribute your objects”.
![Page 20: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/20.jpg)
Generic RMI
object A object BskeletonRequest
proxy for B
Reply
CommunicationRemote Remote referenceCommunicationmodulemodulereference module module
for B’s class& dispatcher
remoteclient server
95-702 Distributed Systems Distributed Objects & Java RMI
20
![Page 21: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/21.jpg)
Generic remote reference module
object A object BskeletonRequest
proxy for B
Reply
CommunicationRemote Remote referenceCommunicationmodulemodulereference module module
for B’s class& dispatcher
remoteclient server
The remote reference module holds a table that records the correspondencebetween local object references in that process and remote object references(which are system wide).
95-702 Distributed Systems Distributed Objects & Java RMI
21
![Page 22: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/22.jpg)
Generic communication module
object A object BskeletonRequest
proxy for B
Reply
CommunicationRemote Remote referenceCommunicationmodulemodulereference module module
for B’s class& dispatcher
remoteclient server
Coordinate to provide a specified invocation semantics. On the server side, the communication module selects the dispatcher for the class of the object to be invoked, passing on the remote object’s local reference.
95-702 Distributed Systems Distributed Objects & Java RMI
22
![Page 23: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/23.jpg)
Generic proxies
object A object BskeletonRequestproxy for B
Reply
CommunicationRemote Remote referenceCommunicationmodulemodulereference module module
for B’s class& dispatcher
remoteclient server
On the client, the proxy makes the RMI transparent to the caller. It marshals and unmarshals parameters. There is one proxy for each remote object. Proxies hold the remote object reference. A proxy may be automatically created from the IDL.
95-702 Distributed Systems Distributed Objects & Java RMI
23
![Page 24: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/24.jpg)
Generic dispatchers and skeletons (1)
object A object BskeletonRequest
proxy for B
Reply
CommunicationRemote Remote referenceCommunicationmodulemodulereference module module
for B’s class& dispatcher
remoteclient server
The server has one dispatcher and skeleton for each class representing a remote object. A request message with a methodID is passed from the communication module. The dispatcher calls the method in the skeleton passing the request message. The skeleton implements the remote object’s interface in much the same way that a proxy does. The remote reference module may be asked for the local location associated with the remote reference.
95-702 Distributed Systems Distributed Objects & Java RMI
24
![Page 25: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/25.jpg)
Generic dispatchers and skeletons (2)
object A object BskeletonRequest
proxy for B
Reply
CommunicationRemote Remote referenceCommunicationmodulemodulereference module module
for B’s class& dispatcher
remoteclient server
The communication module selects the dispatcher based upon the remote objectreference. The dispatcher selects the method to call in the skeleton. The skeletonunmarshalls parameters and calls the method in the remote object.
95-702 Distributed Systems Distributed Objects & Java RMI
25
![Page 26: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/26.jpg)
Registries promote space decoupling
object A object BskeletonRequest
proxy for B
Reply
CommunicationRemote Remote referenceCommunicationmodulemodulereference module module
for B’s class& dispatcher
remoteclient server
Java uses the rmiregistry
CORBA uses the CORBA Naming Service
Binders allow an object to be named and registered.
Before interacting with the remote object, the RMI registry is used.95-702 Distributed Systems Distributed
Objects & Java RMI26
![Page 27: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/27.jpg)
Registries promote space decoupling
Slide from Sun Microsystems Java RMI documentation
27
![Page 28: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/28.jpg)
Java RMI• On the client side, the RMI Registry is accessed through
the static class Naming. It provides the method lookup() that a client uses to query a registry.
• The registry is not the only source of remote object references. A remote method may return a remote reference.
• The registry returns references when given a registered name. It may also return stubs to the client. You don’t see the stubs in recent editions of Java.
95-702 Distributed Systems Distributed Objects & Java RMI
28
![Page 29: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/29.jpg)
ClientVirtual Machine
ServerVirtual Machine
method calls withparametersreturn values andexceptions
The roles of client and server only apply to a single method call.It is entirely possible for the roles to be reversed. Before thisinteraction, the registry is queried for the remote reference.
Java RMI
95-702 Distributed Systems Distributed Objects & Java RMI
29
![Page 30: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/30.jpg)
Serving a remoteobject
Example: Asynchronous Chat (1)rmiregistry
WriterClient.java
ReaderClient.java
Serving a remoteobject
rebindlookup
The registry is only used on start up.The server names the remote objectand each type of client does a singlelookup.
95-702 Distributed Systems Distributed Objects & Java RMI
30
![Page 31: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/31.jpg)
Serving a remoteobject
Example: Asynchronous Chat (2)rmiregistry
WriterClient.java
ReaderClient.java
Serving a remoteobject
comments
register
comments
The ReaderClient calls the register method on the serverside remote object. It passesa remote object reference.
95-702 Distributed Systems Distributed Objects & Java RMI
31
![Page 32: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/32.jpg)
The proxy design pattern (used to talk to the service and the registry)
Service Proxy Service Implementation
Client
Service Proxy(stub) Service Implementation
Service Interface
95-702 Distributed Systems Distributed Objects & Java RMI
32
![Page 33: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/33.jpg)
A simple Java RMI client import java.rmi.*;
public class ProductClient {
public static void main(String args[]) {
System.setSecurityManager( new RMISecurityManager());
String url = "rmi://localhost/";
95-702 Distributed Systems Distributed Objects & Java RMI
33
![Page 34: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/34.jpg)
try { // get remote referencesProduct c1 = (Product)Naming.lookup(url + "toaster");Product c2 = (Product)Naming.lookup(url + "microwave");// make calls on local stubs// get two String objects from serverSystem.out.println(c1.getDescription());System.out.println(c2.getDescription());
}catch( Exception e) {
System.out.println("Error " + e);
}System.exit(0);
}}
Note: In this example, theserver passes twoString objects to the client. The registry passes a remote objectreference to the client.
95-702 Distributed Systems Distributed Objects & Java RMI
34
![Page 35: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/35.jpg)
Notes about the client(1)
• The default behavior when running a Java application is thatno security manager is installed. A Java application can readand write files, open sockets, start print jobs and so on.
• Applets, on the other hand, immediately install a securitymanager that is quite restrictive.
• A security manager may be installed with a call to the staticsetSecurityManager method in the System class.
95-702 Distributed Systems Distributed Objects & Java RMI
35
![Page 36: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/36.jpg)
Notes about the client(2)• Any time you load code from another source (as this clientmight be doing by dynamically downloading the stub class), it’s wise to use a security manager.
• By default, the RMISecurityManager restricts all code in theprogram from establishing network connections. But, this program needs network connections.
-- to reach the RMI registry-- to contact the server objects
• So, Java requires that we inform the security managerthrough a policy file.
95-702 Distributed Systems Distributed Objects & Java RMI
36
![Page 37: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/37.jpg)
Notes about the client(3)• The Naming class provides methods for storing and
obtaining references to remote objects in the remote object registry.
• Callers on a remote (or local) host can lookup the remote object by name, obtain its reference, and then invoke remote methods on theobject.
• lookup is a static method of the Naming class that returns a reference to an object that implements theremote interface. Its single parameter contains a URLand the name of the object.
95-702 Distributed Systems Distributed Objects & Java RMI
37
![Page 38: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/38.jpg)
Notes about the client(4)The object references c1 and c2 do not actually refer to objects on theserver. Instead, these references refer to a stub class that must existon the client. The stub holds the remote object reference.
Product c1 = (Product)Naming.lookup(url + "toaster");Product c2 = (Product)Naming.lookup(url + "microwave");
The stub class is in charge of object serialization and transmission.it’s the stub object that actually gets called by the client with theline
System.out.println(c1.getDescription());
95-702 Distributed Systems Distributed Objects & Java RMI
38
![Page 39: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/39.jpg)
File client.policy
grant { permission java.net.SocketPermission
"*:1024-65535", "connect";};
This policy file allows an application to make any networkconnection to a port with port number at least 1024. (The RMIport is 1099 by default, and the server objects also use ports>= 1024.)
95-702 Distributed Systems Distributed Objects & Java RMI
39
![Page 40: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/40.jpg)
Notes About the client(5)
When running the client, we must set a system propertythat describes where we have stored the policy.
javac ProductClient.java java –Djava.security.policy=client.policy ProductClient
95-702 Distributed Systems Distributed Objects & Java RMI
40
![Page 41: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/41.jpg)
Files on the Server Product.java
// Product.java is also available on the client. Why?
import java.rmi.*;
public interface Product extends Remote {
String getDescription() throws RemoteException;
}
95-702 Distributed Systems Distributed Objects & Java RMI
41
![Page 42: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/42.jpg)
Notes on Product Interface• This interface must reside on both the client
and the server. Both need the interface before compilation. The use of interfaces promotes separation of concerns.
• All interfaces for remote objects must extend remote.
• Each method requires the caller to handle a RemoteException (if any network problems occur).
95-702 Distributed Systems Distributed Objects & Java RMI
42
![Page 43: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/43.jpg)
Files on the Server ProductImpl.java
// ProductImpl.javaimport java.rmi.*;import java.rmi.server.*;
public class ProductImpl extends UnicastRemoteObjectimplements Product {
private String name;
public ProductImpl(String n) throws RemoteException {name = n;
}public String getDescription() throws RemoteException {
return "I am a " + name + ". Buy me!";}
}95-702 Distributed Systems Distributed
Objects & Java RMI43
![Page 44: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/44.jpg)
Notes on ProductImpl.java• This file resides on the server.
• It is used to automatically generate the stub class that is requiredby the client. In order to create such a stub class we can use the rmic program on the server:
javac ProductImpl.javarmic –v1.2 ProductImpl
• This creates the file ProductImpl_Stub.class ( skeleton classesare no longer needed in JDK1.2 )
95-702 Distributed Systems Distributed Objects & Java RMI
44
![Page 45: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/45.jpg)
Files on the server ProductServer.java
// ProductServer.javaimport java.rmi.*;import java.rmi.server.*;
public class ProductServer {
public static void main(String args[]) {
try {System.out.println("Constructing server implementations..."); ProductImpl p1 = new ProductImpl("Blackwell Toaster");ProductImpl p2 = new ProductImpl("ZapXpress Microwave");
95-702 Distributed Systems Distributed Objects & Java RMI
45
![Page 46: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/46.jpg)
System.out.println("Binding server implementations to registry...");
Naming.rebind("toaster", p1);
Naming.rebind("microwave",p2);
System.out.println("Waiting for invocations from clients...");
}catch(Exception e) {
System.out.println("Error: " + e);}
}}
95-702 Distributed Systems Distributed Objects & Java RMI
46
![Page 47: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/47.jpg)
Notes on the ProductServer.java
• The server program registers objects with the bootstrapregistry service, and the client retrieves stubs to those objects.
• You register a server object by giving the bootstrap registryservice a reference to the object and a unique name.
ProductImpl p1 = new ProductImpl(“Blackwell Toaster”);Naming.rebind("toaster", p1);
95-702 Distributed Systems Distributed Objects & Java RMI
47
![Page 48: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/48.jpg)
Summary of Activities
1. Compile the java files:javac *.java
2. Run rmic on the ProductImpl.class producing the fileProductImpl_Stub.class (Now, optional)
rmic –v1.2 ProductImpl3. Start the RMI registry
start rmiregistry4. Start the server
start java ProductServer 5. Run the client
java –Djava.security.policy=client.policy ProductClient
95-702 Distributed Systems Distributed Objects & Java RMI
48
![Page 49: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/49.jpg)
Parameter passing in remote methods
When a remote object is passed from the server, theclient receives a stub (or already has one locally):
Product c1 = (Product)Naming.lookup(url + "toaster");
Using the stub, it can manipulate the server object by invoking remote methods. The object, however, remainson the server.
95-702 Distributed Systems Distributed Objects & Java RMI
49
![Page 50: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/50.jpg)
Parameter passing in remote methods
It is also possible to pass and return any objects via a remote method call, not just those that implement theremote interface.
The method call
c1.getDescription()
returned a full blown String object to the client. This thenbecame the client’s String object. It has been copied via Java serialization.
95-702 Distributed Systems Distributed Objects & Java RMI
50
![Page 51: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/51.jpg)
Parameter passing in remote methods
This differs from local method calls where we pass andreturn references to objects.
To summarize, remote objects are passed across the networkas stubs (remote references). Nonremote objects are copied.
Whenever code calls a remote method, the stub makes a package that contains copies of all parameter values and sends it to the server, using the object serialization mechanismto marshall the parameters.
95-702 Distributed Systems Distributed Objects & Java RMI
51
![Page 52: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/52.jpg)
Quiz
• What is a proxy?• What is an interface?• What is an implementation?• What must the client code have at runtime?• What must the client code have at compile time?
95-702 Distributed Systems Distributed Objects & Java RMI
52
![Page 53: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/53.jpg)
Java RMI Example 2 - RMI Whiteboard • See Coulouris Text• Client and Server code stored in separate directories• Stub code available to client and server (in their
classpaths) and so no need for RMISecurity Manager• All classes and interfaces available to both sides
95-702 Distributed Systems Distributed Objects & Java RMI
53
![Page 54: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/54.jpg)
Client DirectoryGraphicalObject.classGraphicalObject.java Shape.classShape.javaShapeList.classShapeList.javaShapeListClient.classShapeListClient.java ShapeListServant_Stub.classShapeServant_Stub.class
Client side stepsThe stub classes werecreated on the server side and copied to the clientjavac *.javajava ShapeListClient
95-702 Distributed Systems Distributed Objects & Java RMI
54
![Page 55: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/55.jpg)
Server DirectoryGraphicalObject.classGraphicalObject.java Shape.class Shape.javaShapeList.class ShapeList.java ShapeListServant.classShapeListServant.java ShapeListServant_Stub.class ShapeListServer.classShapeListServer.java ShapeServant.class ShapeServant.javaShapeServant_Stub.class
Server side stepsjavac *.javarmic –V1.2 ShapeServantrmic –V1.2 ShapeListServantcopy stubs to clientstart rmiregistryjava ShapeListServer
95-702 Distributed Systems Distributed Objects & Java RMI
55
![Page 56: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/56.jpg)
GraphicalObject.java// GraphicalObject.java // Holds information on a Graphical shape
import java.awt.Rectangle;import java.awt.Color;import java.io.Serializable;
public class GraphicalObject implements Serializable{
public String type;public Rectangle enclosing;public Color line;public Color fill;public boolean isFilled;
95-702 Distributed Systems Distributed Objects & Java RMI
56
![Page 57: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/57.jpg)
// constructorspublic GraphicalObject() { }
public GraphicalObject(String aType, Rectangle anEnclosing, Color aLine,Color aFill, boolean anIsFilled) {
type = aType;enclosing = anEnclosing;line = aLine;fill = aFill;isFilled = anIsFilled;
}
public void print(){System.out.print(type);System.out.print(enclosing.x + " , " + enclosing.y + " , "
+ enclosing.width + " , " + enclosing.height);if(isFilled) System.out.println("- filled");else
System.out.println("not filled");}
}
95-702 Distributed Systems Distributed Objects & Java RMI
57
![Page 58: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/58.jpg)
Shape.java// Shape.java // Interface for a Shape
import java.rmi.*;import java.util.Vector;
public interface Shape extends Remote {
int getVersion() throws RemoteException;
GraphicalObject getAllState() throws RemoteException;
}
95-702 Distributed Systems Distributed Objects & Java RMI
58
![Page 59: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/59.jpg)
ShapeServant.java// ShapeServant.java // Remote object that wraps a Shape
import java.rmi.*;import java.rmi.server.UnicastRemoteObject;
public class ShapeServant extends UnicastRemoteObject implements Shape {
int myVersion;GraphicalObject theG;
public ShapeServant(GraphicalObject g, int version)throws RemoteException{theG = g;myVersion = version;}
95-702 Distributed Systems Distributed Objects & Java RMI
59
![Page 60: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/60.jpg)
public int getVersion() throws RemoteException {return myVersion;
}
public GraphicalObject getAllState() throws RemoteException{return theG;
}}
95-702 Distributed Systems Distributed Objects & Java RMI
60
![Page 61: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/61.jpg)
// ShapeList.java // Interface for a list of Shapes
import java.rmi.*;import java.util.Vector;
public interface ShapeList extends Remote {
Shape newShape(GraphicalObject g) throws RemoteException;Vector allShapes()throws RemoteException;int getVersion() throws RemoteException;
}
ShapeList.java
95-702 Distributed Systems Distributed Objects & Java RMI
61
![Page 62: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/62.jpg)
ShapeListServant.java
// ShapeList.java // Remote Object that implements ShapeList
import java.rmi.*;import java.rmi.server.UnicastRemoteObject;import java.util.Vector;
public class ShapeListServant extends UnicastRemoteObject implements ShapeList{
95-702 Distributed Systems Distributed Objects & Java RMI
62
![Page 63: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/63.jpg)
private Vector theList;private int version;
public ShapeListServant()throws RemoteException{theList = new Vector();version = 0;
}
public Shape newShape(GraphicalObject g) throws RemoteException{
version++;Shape s = new ShapeServant( g, version);
theList.addElement(s); return s;
}
95-702 Distributed Systems Distributed Objects & Java RMI
63
![Page 64: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/64.jpg)
public Vector allShapes() throws RemoteException{return theList;
}
public int getVersion() throws RemoteException{return version;
} }
95-702 Distributed Systems Distributed Objects & Java RMI
64
![Page 65: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/65.jpg)
ShapeListServer.java// ShapeListServer.java // Server to install remote objects
// Assume all stubs available to client and server // so no need to create a// RMISecurityManager with java.security.policy
import java.rmi.*;
public class ShapeListServer {
public static void main(String args[]){
System.out.println("Main OK");
95-702 Distributed Systems Distributed Objects & Java RMI
65
![Page 66: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/66.jpg)
try{ShapeList aShapelist = new ShapeListServant();
System.out.println("Created shape list object");System.out.println("Placing in registry");
Naming.rebind("ShapeList", aShapelist);
System.out.println("ShapeList server ready");
}catch(Exception e) {System.out.println("ShapeList server main " +
e.getMessage());}
}}
95-702 Distributed Systems Distributed Objects & Java RMI
66
![Page 67: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/67.jpg)
ShapeListClient.java
// ShapeListClient.java // Client - Gets a list of remote shapes or adds a shape // to the remote list
import java.rmi.*;import java.rmi.server.*;import java.util.Vector;import java.awt.Rectangle;import java.awt.Color;
public class ShapeListClient{95-702 Distributed Systems Distributed
Objects & Java RMI67
![Page 68: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/68.jpg)
public static void main(String args[]){
String option = "Read";String shapeType = "Rectangle";
// read or writeif(args.length > 0) option = args[0];
// specify Circle, Line etcif(args.length > 1) shapeType = args[1];
System.out.println("option = " + option + "shape = " + shapeType);
ShapeList aShapeList = null;
95-702 Distributed Systems Distributed Objects & Java RMI
68
![Page 69: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/69.jpg)
try{aShapeList = (ShapeList)
Naming.lookup("//localhost/ShapeList");
System.out.println("Found server");
95-702 Distributed Systems Distributed Objects & Java RMI
69
![Page 70: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/70.jpg)
Vector sList = aShapeList.allShapes();System.out.println("Got vector");if(option.equals("Read")){
for(int i=0; i<sList.size(); i++){GraphicalObject g =
((Shape)sList.elementAt(i)).getAllState();g.print();
}} else { // write to server
GraphicalObject g = new GraphicalObject(
shapeType, new Rectangle(50,50,300,400),Color.red,Color.blue, false);
System.out.println("Created graphical object");aShapeList.newShape(g);System.out.println("Stored shape");
} 95-702 Distributed Systems Distributed Objects & Java RMI
70
![Page 71: An Introduction to Java RMI](https://reader031.vdocument.in/reader031/viewer/2022020703/61fb40ad2e268c58cd5bf8e8/html5/thumbnails/71.jpg)
}catch(RemoteExceptione) {
System.out.println("allShapes: " + e.getMessage());
}catch(Exception e) {
System.out.println("Lookup: " + e.getMessage());}}
}
95-702 Distributed Systems Distributed Objects & Java RMI
71