A Framework for Smart Proxies and Interceptors in RMI

The Java Remote Method Invocation (RMI) API shields the developer from the details of distributed programming, allowing him to concentrate on application specific code. But to perform some operations that are orthogonal to the application, like logging, auditing, caching, QoS, fault tolerance, and security, sometimes it is necessary to customize the default behavior of the RMI runtime. Other middleware for distributed programming, like CORBA and the Remoting framework of the .NET platform, support smart proxies and interceptors, which can be used for these purposes, allowing the separation of application-specific code from service-specific code. In RMI there is no direct way of doing so. This paper presents a framework based on the Dynamic Proxy API for using smart proxies and interceptors with RMI. This framework requires no changes in the client application and minimal changes in the server application, giving the developer greater control over the distributed application. A practical example of use is also given, by using the described framework to implement user authentication and fine-grained access control in RMI.