The transformation of large, off-the-shelf Java applications to support complex new functionality essentially requires generation of an entirely new application that retains the execution semantics of the original. We describe such a whole-program modification in the context of RuggedJ, a dynamic transparent Java distribution system.
We discuss the proxy-based object model that allows remote Java objects to be referenced in the same way as those residing on the current virtual machine, the optimizations that allow us to bypass proxies in the case of purely local or remote object, and the mechanisms needed to guarantee that static data remain unique in a distributed system. We then detail some of the more interesting features involved when implementing this object model in rewritten bytecode, including transformations required within method bodies and coordination between bytecode and the run-time system that distributes an application across the network.
@article{McGachey+2009ENTCS, author = {McGachey, Phil and Hosking, Antony L. and Moss, J. Eliot B.}, title = {Pervasive Load-Time Transformation for Transparently Distributed Java}, journal = {Electronic Notes in Theoretical Computer Science}, year = {2009}, volume = {253}, number = {5}, pages = {47--64}, month = {December}, doi = {10.1016/j.entcs.2009.11.014}, gscholar = {8} }