Terracotta est un middleware open-source gratuit pour Java de type NAM (Network Attached Memory). De la même manière qu'un NAS (Network Attached Storage) permet à plusieurs machines d'accéder aux mêmes fichiers sur un disque partagé, un NAM permet à plusieurs applications (ou plusieurs instances d'une même application) d'accéder aux mêmes graphes d'objets au sein d'une mémoire virtuelle partagée.
Afin de limiter le trafic réseau, Terracotta s'emploie à maintenir les données au plus près du code qui les utilise. Ainsi, lors qu'une application obtient un lock sur un sous-ensemble du graphe d'objet commun, ce sous-ensemble est monté (ou maintenu) au niveau de la JVM de l'application, qui y accède alors localement. Toute modification apportée aux objets est immédiatement répliquée sur le NAM pour des raisons de sécurité.
Pour toutes les problématiques de mise en cluster d'applications, de répartition de charge (datagrid) ou de distribution de données (caches), cette solution présente de nombreux avantages. Premièrement, le développement et la maintenance des applications en est fortement simplifié, puisqu'elles ne dépendent plus d'une API explicite pour s'échanger des données (JMS, RMI, SOAP...) : celles-ci peuvent être consultées et modifiées de manière transparente, comme si elles étaient disponibles localement. Ensuite, il n'y a plus besoin de répliquer préventivement les données : elles sont sécurisées au sein du NAM, et seront transmises, à la demande et de manière optimisée, aux seules applications devant y accéder. Enfin, ce système autorise la manipulation de structures qui seraient habituellement trop larges pour tenir dans la mémoire locale des applications : les informations nécessaires sont fournies en temps réel par le NAM.
Techniquement, Terracotta est composé de deux éléments :
La clusterisation est donc fournie comme un simple service d'infrastructure qui ne nécessite aucun apprentissage particulier de la part des développeurs.

L'instrumentation de la JVM et des classes partagées autorise de nombreuses optimisations. Par exemple, contrairement au mécanisme de sérialisation qui transmet des objets complets, Terracotta travaille à un niveau plus fin et ne transmet que des différentiels, de manière compressée et par batches. Les applications instrumentées peuvent également être monitorées par la console d'administration de Terracotta, afin de suivre en temps réel l'état du cluster, le volume des données échangées, repérer les « deadlocks » distribués, etc.
Pour finir, Terracotta propose des modules d'intégration (TIM, Terracotta Integration Module), qui fournissent toute la configuration nécessaire pour s'intégrer aux principaux frameworks d'entreprise : Spring, Hibernate, EHCache, Struts...
Actuellement, Terracotta est déployé avec succès chez des grands comptes de la finance et des services (WalMart, Comcast, JPMorgan, Pearson...).