Cache partagé par Cluster [fermé]

je suis à la recherche d'un framework java qui me permettrait de partager une cache entre plusieurs JVM.

Ce que je besoin est quelque chose comme Hazelcast mais sans le "distribué". Je veux être en mesure d'ajouter un élément dans le cache automatiquement synchronisés à l'autre "membre du groupe" cache. Si possible, j'aimerais que le cache soit synchronisé via un multicast fiable (ou quelque chose de similaire).

j'ai regardé Banc mais malheureusement le "Cache D'État distribué" semble comme une implémentation insuffisante pour mes besoins.

j'ai regardé JBoss Cache mais il semble un peu exagéré pour ce que je dois faire.

j'ai regardé JGroups, qui semble être l'outil le plus prometteur pour ce que je dois faire. Quelqu'un a-t-il des expériences avec les JGroups ? De préférence s'il a été utilisé comme cache partagé ?

d'autres suggestions ?

Merci !

EDIT: nous commençons des tests pour nous aider à décider entre Hazelcast et Infinispan, j'accepte une réponse bientôt.

EDIT : en raison d'un changement soudain des exigences, nous n'avons plus besoin d'une carte distribuée. Nous utiliserons JGroups pour un système de signalisation de bas niveau. Merci tout le monde pour vous aider.

26
demandé sur Amro 2009-06-11 20:46:12

8 réponses

Que Diriez-vous de ceci?

avoir une carte compacte locale comme cache local. Créez une carte/cache distribuée Hazelcast. Commencez à écouter les événements de la carte distribuée et mettez à jour votre Companenthashmap Local.

Les caches locales de chaque membre seront les mêmes. Auto-synchronisés.

import com.hazelcast.core.IMap; 
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.EntryListener;
import com.hazelcast.core.EntryEvent; 
import java.util.concurrent.ConcurrentHashMap;

public class Sample implements EntryListener {
        Map localCache = new ConcurrentHashMap ();

        public static void main(String[] args) { 
                Sample sample = new Sample();
                IMap   map    = Hazelcast.getMap("default"); 

                //Listen for all added/updated/removed entries
                map.addEntryListener(sample, true);  
        }

        public void entryAdded(EntryEvent event) {
             localCache.put(event.getKey(), event.getValue());            
        }

        public void entryRemoved(EntryEvent event) {
             localCache.remove(event.getKey());            
        }

        public void entryUpdated(EntryEvent event) {
             localCache.put(event.getKey(), event.getValue());            
        }
}
13
répondu Talip Ozturk 2012-03-16 15:09:16