This document describes how to virtualize Java applications in Java by hosting multiple "pseudo JVMs" within a single JVM. This allows deploying distributed applications for testing purposes. Key points covered include:
- Using custom classloaders and system properties to isolate "pseudo JVMs" and simulate distributed environments.
- Frameworks like GridKit that enable starting whole application topologies within JUnit tests for behaviors testing.
- Techniques for testing features like serialization, data routing, and cross-version compatibility.
- Later extensions to deploy virtual nodes across real servers using SSH for performance and deployment testing of distributed systems.