Program: RMI Callbacks
One
major
benefit of RMI is that almost any kind of
object can
be passed as a parameter or return value of a remote method. The
recipient of the object will not know ahead of time the class of the
actual object it will receive. If the object is of a class that
implements Remote
(java.rmi.Remote
),
then in fact the returned object will be a proxy object that implements at
least the declared interface. If the object is not remote, it must be
serializable, and then a copy of it will
be transmitted across the Net. The prime example of this is a
String
. It makes no
sense to write an RMI proxy
object for String
. Why? Remember from Chapter 3 that String
objects are
immutable! Once you have a String
, you can copy it
locally but never change it. So Strings
, like most
other core classes, can be copied across the RMI connection just as
easily as they are copied locally. But Remote
objects will cause an RMI proxy to be delivered. So what is stopping
the caller from passing an RMI object that is also itself a proxy?
Nothing at all, and this is the basis of the powerful RMI callback
mechanism.
An RMI callback occurs when the client of one service passes an object that is the proxy for another service. The recipient can then call methods in the object it received, and be calling back (hence the name) to where it came from. Think about a stock ticker service. You write a server that runs on your desktop and notifies you when your stock moves up or down. This server is ...
Get Java Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.