Transcript Notes
Proxy Pattern
What’s a Proxy?
• A remote proxy acts as a local
representative of a remote object
• Remote Object: instantiated in a different
JVM heap (a different address space)
• The proxy looks like the remote object, but
isn’t
• The proxy takes method calls and handles
all the details of network communication
to the remote object
What’s a Proxy?
Proxy
Remote
Object
Client
Code
Local Heap
Remote Heap
RMI
• Luckily, we don’t have to write the code to
handle network communications
• RMI: Remote Method Invocation
• Java provides packages that we can easily
use to make our current code ready for
network communication with very few
changes
• The book provides a very detailed guide to
this process
Proxy, pretends to be the
actual service.
Packs requests and handles
network communications
Client
Object
Client
helper
Local Heap
RMI
Service
helper
Service
Object
Remote Heap
Unpacks requests from client
helper; calls requests on the
Service Object
RMI
doBigJob()
Client
Object
Client
helper
Local Heap
Service
helper
Service
Object
Remote Heap
RMI
“client wants to call a method”
doBigJob()
Client
Object
Client
helper
Local Heap
Service
helper
Service
Object
Remote Heap
Client helper packages up the info
about the method call
(Serializable) & ships it over the
network
RMI
result
Client
Object
Client
helper
Local Heap
Service
helper
Service
Object
Remote Heap
Service helper packs the result and
handles network communications
RMI
packaged result
Client
Object
Client
helper
Local Heap
Service
helper
Service
Object
Remote Heap
Client helper unpacks the result and
passes it back to the Client Object
RMI
result
Client
Object
Client
helper
Local Heap
Service
helper
Service
Object
Remote Heap
The Client Object doesn’t know it
isn’t talking to the Service Object in
its own heap!
RMI
RMI STUB
Client
Object
Client
helper
Local Heap
RMI
SKELETON
Service
helper
Service
Object
Remote Heap
Newer versions of Java don’t require
an explicit skeleton object, but
something is still taking care of the
skeleton behavior.
Making a Remote Service
1.
Make a remote Interface
Defines the methods that can be called remotely
Stub and Service Object will implement it
2.
Make a Remote Implementation
This is the class that does the “real work”
3.
Rmic to generate stubs & skeletons (Server)
Rmic comes with the Java SDK
Implementation_stub.class
Implementation_Skel.class
4. Start the registry (Server): rmiregistry
5. Start the remote service (server)
Needs to be in a separate thread from the rmiregistry
Back to the Pattern
DEFINITION:
The Proxy Pattern provides a
surrogate or placeholder
for another object to
control access to it.
Class diagram
<<interface>>
Subject
request()
RealSubject
request()
subject
Proxy
request()