In previous work we have introduced JavaSymphony, a system whose purpose is to simplify the development of distributed and parallel Java applications. JavaSymphony is a Java library that allows to control parallelism, load balancing, and locality at a high level. Objects can be explicitly distributed and migrated within virtual architectures, which impose a virtual hierarchy on a distributed system of physical computing nodes.
In this paper we present the design of the JavaSymphony Runtime System and the JavaSymphony Shell. Moreover, we discuss details about an agent-based implementation of the JavaSymphony Runtime System which comprises the Network Agent, Object Agent, and Event Agent. We present a detailed comparison of the functionality provided by JavaSymphony with several related systems.