Domanda

Ho in programma di implementare una soluzione di cache in un'applicazione Web esistente. Niente di complicato: in pratica una mappa concomitante che supporti traboccante su disco e lo sfratto automatico. Clustering la cache potrebbe essere requisito in futuro, ma non ora.

Mi piace copyOnRead di EHCache e copy-on-write dispone, perché significa che io non devo cose clone manualmente prima di modificare qualcosa che mi tiro fuori della cache. Ora ho iniziato a guardare Infinispan , ma non ho trovato nulla di equivalente lì. Esiste?

.

cioè, i seguenti test di unità dovrebbero passare:

@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));
}
È stato utile?

Soluzione

Secondo uno sviluppatore JBoss, Infinispan non supporta ancora questa caratteristica. Si dovrebbe registrare una richiesta di miglioramento nel Infinispan issue tracker , in modo che altri possano votare su di esso (vi) .

Detto questo, se avete bisogno di questa funzione Ora , una soluzione potrebbe essere quella di estendere la AbstractDelegatingCache , e sovrascrivere i metodi get e put per aggiungere questa funzionalità. Si potrebbe utilizzare la propria strategia copia o sguardo a come EHCache ha fatto per ispirazione.

Inoltre, si può prendere in considerazione la Infinispan forum se avete ulteriori domande , in quanto si avrà più punti di vista da parte della comunità Infinispan.

Altri suggerimenti

Infinispan non Supporto copyOnRead / copy-on-write, anche se il formato reale non è pluggable. L'elemento di configurazione è lazyDeserialization in Infinispan 4.xe storeAsBinary in Infinispan 5.x. Gli oggetti vengono serializzati mediante quadro Marshaller pluggable, che viene utilizzato per tutte le forme di smistamento comprese gare RPC su una rete e archiviazione su disco.

Credo storeAsBinary ha effetto solo quando gli oggetti devono essere serializzato quando cioè un'operazione put viene chiamato, il proprietario non è il nodo attuale.

Questo significa anche i casi di test in questione potrebbero passare se il proprietario di 0 chiave non è il nodo corrente, ma sarebbe ancora fallire se si tratta di un unico ambiente di nodo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top