Mamy nadzieję, że będziemy używać infinispan jako bazy danych w pamięci w systemie zarządzania zamówieniami. Tam musimy wykonać następujący typ operacji. Tutaj pamięć podręczna konta pieniężnego zawiera konto cache klienta załadowane z DB. Załóżmy, że saldo rachunku gotówkowego1 wynosi 1000, a kontoKonto2 to 2000. aktualizujemy oba konta pieniężne w transakcji na serwerze aplikacji jboss 7.1. czego oczekujemy w wyniku, że salda obu rachunków pieniężnych pozostają bez zmian, ponieważ operacja ta wystąpiła wewnątrz transakcji. Ale niestety nawet po wycofaniu transakcji możemy zobaczyć obiekt aktualizacji z boku pamięci podręcznej. ut to, co badamy, to kiedy dodamy obiekt do pamięci podręcznej po stronie transakcji, gdy wycofa się transakcja, zostanie ona usunięta z pamięci podręcznej. Ale modyfikacja istniejącego obiektu pozostaje taka, jaka jest.Aktualizacja obiektu pamięci podręcznej infinispan w procedurze zwrotu wycofania transakcji
To tylko próbka tego, co chcemy zrobić. Rzeczywiste wymagają aktualizacji kilku obiektów w pojedynczej transakcji.
Czy możesz dać nam znać, że można użyć infinispan dla tego typu opperacji.
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) {
}
}
}
Być może pamięć podręczna jest skonfigurowana jako nietransakcyjna? Domyślnie pamięci podręczne nie są transakcyjne. Konieczne jest jawne dokonanie transakcji (zobacz konfiguracje cache w pliku konfiguracyjnym AS7). To wygląda na problem z konfiguracją. –
Czy nie próbujesz bezpośrednio modyfikować wartości przechowywanej na mapie bez znajomości pamięci podręcznej? –