Jini allows clients to find services without prior knowledge of their network surroundings. For interacting with a service, proxy objects are used which are supplied by service providers. These proxy objects interact directly with the service provider. Compared to architectures that use mediated communications (like CORBA or e-speak), Jini's approach offers a large amount of flexibility in the selection of an appropriate communication protocol. On the downside, debugging a distributed application using this approach is rather hard, as there is no single method (like a CORBA interceptor) that allows the interactions between clients and servers to be observed.
Nevertheless, tracing component interaction in Jini federations is possible. This paper describes an approach using Java's dynamic proxies that allows component interaction to be traced. The approach works at the level of service distribution. We designed and implemented a modified lookup service that wraps service proxies in a software layer that intercepts all function invocations at the client. Before and after invoking the real function the wrapper sends interaction information to an event dispatcher that allows this data to be propagated to interested listeners. The collected data can either be stored in a simple logfile for later analysis or be presented in graphical form to display component interactions in near real-time.
By associating the tracing functionality with the Jini lookup service, the approach is generic and transparent for both services and clients. Debugging can be done in any Jini federation without the need to modify any code by simply replacing the standard lookup service with our modified one.
View full paper: itcom01.pdf.