speriamo di utilizzare infinispan come un database in memoria nel sistema di gestione degli ordini. Qui dobbiamo eseguire il seguente tipo di operazione. Qui la cache del conto di cassa contiene l'account cache cliente caricato dal DB. Supponiamo che il saldo iniziale del conto in contanti1 sia 1000 e che cashAccount2 sia il 2000. aggiorniamo il conto in contanti in una transazione in un server delle applicazioni jboss 7.1. quello che ci aspettiamo è che i saldi di entrambi i conti di cassa rimangano inalterati da quando questa operazione si è verificata all'interno della transazione. Ma sfortunatamente, anche dopo il rollback della transazione, possiamo vedere l'oggetto di aggiornamento nel lato della cache. ut ciò che esaminiamo è quando aggiungiamo un oggetto alla cache nella parte una transazione quando il rollback della transazione verrà rimosso dalla cache. Ma la modifica dell'oggetto esistente rimane così com'è.aggiornamento dell'oggetto cache infinispan nel numero di rollback delle transazioni
Questo è solo un esempio di ciò che vogliamo fare. Quello attuale comporta l'aggiornamento di diversi oggetti in una singola transazione.
Potrebbe farci sapere che è possibile utilizzare infinispan per questo tipo di esercizio.
cashAccountCache= provider.getCacheContainer().getCache(CACHE_NAME);
try {
utx.begin();
CashAccount cashAccount1 = cashAccountCache.get("cashAccNumber1");
CashAccount cashAccount2 = cashAccountCache.get("cashAccNumber2");
cashAccount1.setBalance(cashAccount1 .getBalance() + 100);
cashAccount2.setBalance(cashAccount2 .getBalance() + 200);
if(true) throw new RuntimeException();
utx.commit();
} catch (Exception e) {
if (utx != null) {
try {
utx.rollback();
} catch (Exception e1) {
}
}
}
Forse la cache è configurato per essere non transazionale? Per impostazione predefinita, le cache non sono transazionali. È necessario renderli esplicitamente transazionali (vedere le configurazioni della cache nel file di configurazione AS7). Questo sembra essere una sorta di problema di impostazione. –
Stai provando a modificare direttamente il valore memorizzato nella mappa senza che la cache ne sia a conoscenza? –