Scaling out reflected by the move towards using many smaller machines instead of few larger ones has been a trend in computing for years. Although having many smaller machines offers both cost and scaling advantages these advantages do not come without a price. This price is doubly felt when one is using VM technology such as the Java Virtual Machine.
As Bob points out, the JVM (as well the VM for Ruby and Smalltalk) were designed to abstract away from developers much of the mundane work that is often orthogonal to the problem at hand. However that assumption breaks down once an application extends beyond the boundaries of a single virtual machine. These problems extend to singularity (needed for correctness) and identity (needed to ensure singularity).
…this works almost perfectly as long as the application runs contained within a single JVM. If the application is intended to be deployed on multiple JVM's, in other words - if it is intended to be clustered or distributed, this promise falls apart.If writing applications that scale-out is far too difficult then is it time for the Java community to explore a JVM that extends over machine boundaries or do you see products such as those offered by Terracotta to be the answer to scale-out complexity?