Question

Je prévois de mettre en œuvre une solution de cache dans une application Web existante. Rien de compliqué: essentiellement une carte concurrente qui déborde de soutien sur le disque et l'expulsion automatique. Clustering le cache pourrait être nécessaire à l'avenir, mais pas maintenant.

Je aime copyOnRead et de ehcache dispose d'copy-on-write, car cela signifie que je n'ai pas aux choses de clone manuellement avant de modifier quelque chose que je prends du cache. Maintenant, j'ai commencé à regarder Infinispan , mais je ne l'ai pas trouvé là équivalent quoi que ce soit. Est-ce qu'il existe?

.

i.e., les tests unitaires suivants doivent passer:

@Test
public void testCopyOnWrite() {
    Date date = new Date(0);
    cache.put(0, date);
    date.setTime(1000);
    date = cache.get(0);
    assertEquals(0, date.getTime());
}

@Test
public void testCopyOnRead() {
    Date date = new Date(0);
    cache.put(0, date);
    assertNotSame(cache.get(0), cache.get(0));
}
Était-ce utile?

La solution

Selon un développeur JBoss, Infinispan ne supporte pas encore cette fonctionnalité. Vous devez vous connecter une demande de mise en valeur dans le Infinispan problème suivi , de sorte que d'autres peuvent voter à ce sujet (je) .

Cela étant dit, si vous avez besoin de cette fonctionnalité maintenant , une solution serait d'étendre AbstractDelegatingCache , et remplacer les méthodes de get et put ajouter cette fonctionnalité. Vous pouvez utiliser votre propre stratégie de copie ou de regarder comment EHCache a fait pour l'inspiration.

En outre, vous pouvez envisager le forum Infinispan si vous avez d'autres questions , puisque vous aurez plus vues de la communauté Infinispan.

Autres conseils

Infinispan Finalité soutien copyOnRead / copy-on-write, bien que le format réel n'est pas connectables. L'élément de configuration est lazyDeserialization dans Infinispan 4.x et storeAsBinary Infinispan 5.x. Les objets sont sérialisés à l'aide du cadre connectable Marshaller, qui est utilisé pour toutes les formes de triage, y compris pour les appels RPC sur un réseau et de stockage sur le disque.

Je crois storeAsBinary ne prend effet que lorsque les objets doivent être sérialisé qui signifie que lorsque une opération de put est appelé, le propriétaire n'est pas le noeud courant.

Cela signifie aussi les testcases dans la question pourrait passer si le propriétaire de 0 clé n'est pas le nœud actuel, mais il serait toujours pas si elle est un environnement unique de nœud.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top