Download Distributed Object

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
Distributed Object-Based Systems
Distributed Objects
Invoking remote objects
using:
Architecture
• CORBA
Distributed Objects
• RMI
Persistent and Transient Objects
• ...
Compile-Time Objects
RMI
- same language (Java) for the objects
Enterprise Java Beans
RMI example
Runtime Objects
CORBA
Interface specification language
- Different languages for the objects
1 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
2 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Persistent and Transient Objects
Enterprise Java Beans
Used in many distributed system systems.
Persistent objects will survive even if their server is shut down.
Transient objects dies if their server is shut down.
Enterprise Java Beans (EJB)
Java objects that is hosted in a special server:
Stateless session beans
Stateful session beans
Is it enough with transient objects?
Entity beans
some people thinks so since persistent data normally is stored in a database anyway.
Message-driven beans
can more or less automatically be bound to different services:
RMI
JDBC (SQL database)
JNDI (naming)
JMS (messaging)
3 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
4 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Stateless Session Beans
Transient object:
Stateful Session Beans
An object that maintains client-related state.
• Invoked once
Remembers client data
e.g. what a client clicks and writes on web forms when shopping on Internet.
• does its work
• is then discarded
Is discarded when the client is ready
e.g. an SQL query.
5 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
6 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Entity Beans
A long-lived persistent object.
Message-Driven Beans
Objects that should react to incoming messages.
Contains information that should be stored even after both client and server are shut down.
Not directly invoked by clients.
Normally put in a database.
Publish-subscribe invocation (call-back).
7 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
8 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
RMI Example - Local System
RMI Example - Distributed System
By using a “super computer” we will get much better performance.
This is an example with RMI that could not be done using CORBA.
But we want to do it transparently from our local computer.
We are working on our local computer and want to compute π
Send the computation to the super computer using RMI
< <Interf ace>>
We’ve got a class Pi that carries out the computation with the requested number of decimals:
< <Interf ace> >
Task
Compute
Object execut e()
Execut etask (Task t )()
ComputePi
Pi
Pi
Execut e()
creat e()
Execute()
create()
Comput ePi
If we want many decimals we will get bad performance on our local computer.
ComputeEngine
execut eTask ()
9 (25) - DISTRIBUTED SYSTEMS
10 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
RMI — Remote Method Invocation
RMI —
Uses a Proxy called stub to access a “remote” object
Marshalling
Marshalling
transforms method calls to a format that can be sent to another process.
:ComputePi
:ComputeEngine
transforms parameters to a format that can be sent to another process.
Interface
:ComputeEngineStub
transforms return values to a format that can be sent to another process.
Un-Marshalling
:Skeleton
Marshalling
transforms back to the original object at the receiver.
Create a proxy (stub).
:ORB/RRL
:ORB/RRL
TCP/IP
11 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Transport
Serializes the objects
into sendable bytes.
12 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Sending Objects by RMI
Rules for object transmission
Parameters or return values from “remote methods” can be of most types:
• local object,
• “remote” object
• primitive types.
i.e. everything that is a primitive type, a “remote object” or a serializable object.
(implements the interface java.io.Serializable)
Some few object can not be sent, e.g.
• file descriptor,
• encapsulate information that makes sense only within a single address space.
Most of the important classes in Java are serializable.
e.g. in
Local JVM
Remote JVM
primitive typs
by value
by value
object
by reference
by value
remote object
by reference
by reference
NB. The difference between objects that are sent locally or remote.
An object of type Vector will be copied if it is sent remote. A copy will be referred to at the remote
site.
An object of type Remote will on the other hand instead be referred remotely-
• java.lang
• java.util
13 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
14 (25) - DISTRIBUTED SYSTEMS
Creating a “remote” object
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Pi Example
Compute Engine's interface, Compute:
package compute;
import java.rmi.*;
public interface Compute extends Remote
{
Object executeTask(Task t) throws RemoteException;
}
An object will be “remote” by implementing a remote interface:
A remote interface extends the interface java.rmi.Remote.
Each method of the interface throws java.rmi.RemoteException.
15 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
16 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Client’s interface, Task:
Implementing the remote objects
package compute;
import java.io.Serializable;
public interface Task extends Serializable
{
Object execute();
}
A remote object must implement a remote interface.
Additionally it must implement whatever is needed locally.
Declare the remote interfaces being implemented
Define the constructor for the remote object
Provide an implementation for each remote method in the remote interfaces
Task extends java.io.Serializable interface.
RMI uses “object serialization mechanism” for the transport of objects among JVMs.
The server needs to create and to install the remote objects.
The definition shows that
an object of type Compute can receive an object of type Task.
an object of type Task has the method execute().
Compute then can execute a Task.
17 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
18 (25) - DISTRIBUTED SYSTEMS
Implementing Remote Interfaces
Could be done in different ways
by extending
java.rmi.server.UnicastRemoteObject
or by calling
UnicastRemoteObject.exportObject(Remote Object)
or other.
public class ComputeEngine extends UnicastRemoteObject
implements Compute
The superclass UnicastRemoteObject supplies implementations for a number of
java.lang.Object methods (equals, hashCode, toString) so that they are defined
appropriately for remote objects. UnicastRemoteObject also includes constructors and static
methods used to export a remote object, that is, make the remote object available to receive incoming calls
from clients.
19 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Pi Example
package engine;
import java.rmi.*;
import java.rmi.server.*;
import compute.*;
public class ComputeEngine extends UnicastRemoteObject
implements Compute
{
public ComputeEngine() throws RemoteException
{
super(); //Important! Here the class becones remote
}
public Object executeTask(Task t)
{
return t.execute();
}
20 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Implementing the Clients
public static void main(String[] args)
{
if (System.getSecurityManager() == null)
{
System.setSecurityManager(
new RMISecurityManager()
);
}
String name = "//host/Compute";
try
{
Compute engine = new ComputeEngine();
Naming.rebind(name, engine);
System.out.println("ComputeEngine bound");
}
catch (Exception e)
{
System.err.println("ComputeEngine exception: " +
e.getMessage());
e.printStackTrace();
}
}
}
21 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Compute comp = (Compute) Naming.lookup(name);
Pi task = new Pi(Integer.parseInt(args[1]));
BigDecimal pi =
(BigDecimal) (comp.executeTask(task));
System.out.println(pi);
}
catch (Exception e)
{
System.err.println("ComputePi exception: " +
e.getMessage());
e.printStackTrace();
}
}
}
23 (25) - DISTRIBUTED SYSTEMS
In our example the class Pi will be sent to be run at the server.
Subsequently it must implement the Task interface.
Since it should not be called “remote” it does not have to be made “remote”.
The class ComputePi will contact the server, sent the work, and then take care of the result.
package client;
import java.rmi.*;
import java.math.*;
import compute.*;
public class ComputePi
{
public static void main(String args[])
{
if (System.getSecurityManager() == null)
{
System.setSecurityManager(new RMISecurityManager());
}
try
{
String name = "//" + args[0] + "/Compute";
22 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
The class Pi
package client;
import compute.*;
import java.math.*;
public class Pi implements Task
{
int digits;
// ....
public Pi(int digits)
{
this.digits = digits;
}
// .......
public Object execute()
{
return computePi(digits);
}
public static BigDecimal computePi(int digits)
{
// ...
}
// ...
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
24 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering
Pi example
<<Int erf ace>>
<<Int erf ace>>
java.io.Serializable
j ava.rmi.Remote
<<Int erf ace>>
<<Int erf ace>>
Task
Compute
Object execut e()
Execut et ask (Task t )()
java.rmi.server.UnicastRemoteObject
Pi
Execut e()
creat e()
ComputePi
Comput eEngine
execut eTask ()
25 (25) - DISTRIBUTED SYSTEMS
Distributed Object-Based Systems - Sven Arne Andreasson - Computer Science and Engineering