Using prototypical objects to implement shared behavior in object-oriented systems
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
Modelling and programming in an object-oriented concurrent language ABCL/1
Object-oriented concurrent programming
Linearizability: a correctness condition for concurrent objects
ACM Transactions on Programming Languages and Systems (TOPLAS)
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Adding type parameterization to the Java language
Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Inside Java 2 platform security architecture, API design, and implementation
Inside Java 2 platform security architecture, API design, and implementation
Kava: a Java dialect with a uniform object model for lightweight classes
Proceedings of the 2001 joint ACM-ISCOPE conference on Java Grande
Efficient implementation of Java interfaces: Invokeinterface considered harmless
OOPSLA '01 Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Java Virtual Machine Specification
Java Virtual Machine Specification
.NET Framework Essentials
The Art of the Metaobject Protocol
The Art of the Metaobject Protocol
Computer
ECCOP '98 Proceedings of the 12th European Conference on Object-Oriented Programming
Reflections on MOPs, Components, and Java Security
ECOOP '01 Proceedings of the 15th European Conference on Object-Oriented Programming
A Bytecode Translator for Distributed Execution of ``Legacy'' Java Software
ECOOP '01 Proceedings of the 15th European Conference on Object-Oriented Programming
AOP: Does It Make Sense? The Case of Concurrency and Failures
ECOOP '02 Proceedings of the 16th European Conference on Object-Oriented Programming
Transparent proxies for java futures
OOPSLA '04 Proceedings of the 19th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Object-oriented programming in peer-to-peer systems: Research Articles
Concurrency and Computation: Practice & Experience - 2002 ACM Java Grande–ISCOPE Conference Part II
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Kava - using byte code rewriting to add behavioural reflection to Java
COOTS'01 Proceedings of the 6th conference on USENIX Conference on Object-Oriented Technologies and Systems - Volume 6
Type-based publish/subscribe: Concepts and experiences
ACM Transactions on Programming Languages and Systems (TOPLAS)
DeXteR: an extensible framework for declarative parameter passing in distributed object systems
Proceedings of the 9th ACM/IFIP/USENIX International Conference on Middleware
Flexible and Efficient In-Vivo Enhancement for Grid Applications
CCGRID '09 Proceedings of the 2009 9th IEEE/ACM International Symposium on Cluster Computing and the Grid
Improving the transparency of proxy injection in Java
ACSC '09 Proceedings of the Thirty-Second Australasian Conference on Computer Science - Volume 91
Proxies: design principles for robust object-oriented intercession APIs
Proceedings of the 6th symposium on Dynamic languages
Self-replicating objects for multicore platforms
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Expressive and Extensible Parameter Passing for Distributed Object Systems
ACM Transactions on Software Engineering and Methodology (TOSEM)
Efficient proxies in Smalltalk
Proceedings of the International Workshop on Smalltalk Technologies
JavaGI: generalized interfaces for java
ECOOP'07 Proceedings of the 21st European conference on Object-Oriented Programming
Efficient dynamic access analysis using JavaScript proxies
Proceedings of the 9th symposium on Dynamic languages
Trustworthy proxies: virtualizing objects with invariants
ECOOP'13 Proceedings of the 27th European conference on Object-Oriented Programming
Hi-index | 0.00 |
The proxy abstraction has a longlasting tradition in object settings. From design pattern to inherent language support, from remote method invocations to simple forms of behavioral reflection - incarnations as well as applications of proxies are innumerable.Since version 1.3, Java supports the concept of dynamic proxy. Such an object conforms to a set of types specified by the program and can be used wherever an expression of any of these types is expected, yet reifies invocations performed on it. Dynamic proxies have been applied to implement paradigms as diverse as behavioral reflection, structural conformance, or multi-methods. Alas, these proxies are only available "for interfaces". The case of creating dynamic proxies for a set of types including a class type has not been considered, meaning that it is currently not possible to create a dynamic proxy mimicking an instance of a given class. This weakness strongly limits any application of dynamic proxies.In this paper we unfold the current support for dynamic proxies in Java, assessing it in the light of a set of generic criteria for proxy implementations. We present an approach to supporting dynamic proxies "for classes" in Java, consisting in transformations performed on classes at load-time, including a generic scheme for enforcing encapsulation upon field accesses. These transformations seemlessly extend the scope of the current support for dynamic proxies. We discuss the precise benefits and costs of our extension in terms of the criteria introduced, and illustrate the usefulness of uniformly available proxies by implementing future method invocations both safely and transparently.