Transparent Proxies for Java Futures
Files
Publication or External Link
Date
Advisor
Citation
DRUM DOI
Abstract
A proxy object is a surrogate or placeholder that controls access
to another target object. Proxies can be used to support
distributed programming, lazy or parallel evaluation, access
control, and other simple forms of behavioral reflection.
However, wrapper proxies (like futures or suspensions for
yet-to-be-computed results) can require significant code changes
to be used in statically-typed languages, while proxies more
generally can inadvertently violate assumptions of transparency,
resulting in subtle bugs.
To solve these problems, we have designed and implemented a
simple framework for proxy programming, which employs a static
analysis based on qualifier inference, but with additional
novelties. Code for using wrapper proxies is automatically
introduced via a classfile-to-classfile transformation, and
potential violations of transparency are signaled to the
programmer. We have formalized our analysis and proven it sound.
Our framework has a variety of applications, including support
for asynchronous method calls returning futures. Experimental
results demonstrate the benefits of our framework: programmers
are relieved of managing and/or checking proxy usage, analysis
times are reasonably fast, and overheads introduced by added
dynamic checks are negligible, and performance improvements can
be significant. For example, changing two lines in a simple
RMI-based peer-to-peer application and then using our framework
resulted in a large performance gain.
(UMIACS-TR-2004-19)