The document discusses the evolution of clustering in Java applications. It describes how early clustering solutions focused on replicating state between nodes for scalability and failover. More modern approaches use data grids, computational grids, and clustered virtual machines to distribute data and processing across nodes for improved performance and resource utilization. A variety of open source and commercial implementations are presented, including EHCache, GlassFish Shoal, Oracle Coherence, JBoss POJO Cache, GigaSpaces, and Terracotta.