150 likes | 342 Views
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
E N D
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? Remote Object Proxy 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 RMI Service Object Client helper Service helper Client Object Local Heap Remote Heap Unpacks requests from client helper; calls requests on the Service Object
RMI Service Object doBigJob() Client helper Service helper Client Object Local Heap Remote Heap
RMI “client wants to call a method” Service Object doBigJob() Client helper Service helper Client Object Local Heap Remote Heap Client helper packages up the info about the method call (Serializable) & ships it over the network
RMI result Service Object Client helper Service helper Client Object Local Heap Remote Heap Service helper packs the result and handles network communications
RMI packaged result Service Object Client helper Service helper Client Object Local Heap Remote Heap Client helper unpacks the result and passes it back to the Client Object
RMI Service Object Client helper result Service helper Client Object Local Heap Remote Heap The Client Object doesn’t know it isn’t talking to the Service Object in its own heap!
RMI RMI SKELETON RMI STUB Service Object Client helper Service helper Client Object Local Heap 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 • Make a remote Interface Defines the methods that can be called remotely Stub and Service Object will implement it • Make a Remote Implementation This is the class that does the “real work” • Rmic to generate stubs & skeletons (Server) Rmic comes with the Java SDK Implementation_stub.class Implementation_Skel.class • Start the registry (Server): rmiregistry • 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() subject RealSubject request() Proxy request()