wir hoffen, Infinispan als eine In-Memory-Datenbank im Auftragsmanagement-System zu verwenden. Dort müssen wir folgende Art von Operation durchführen. Hier enthält der Cash-Account-Cache einen Kunden-Cache-Account, der von der DB geladen wurde. Sagen wir, dass der Anfangssaldo des Cash-Kontos1 1000 ist und CashAccount2 2000 ist. Wir aktualisieren beide Cash-Konten in einer Transaktion in einem jboss 7.1-Anwendungsserver. Was wir als Ergebnis erwarten, ist, dass die Salden der beiden Cash-Konten unverändert bleiben, da diese Operation innerhalb der Transaktion stattfand. Aber leider können wir auch nach dem Rollback der Transaktion das Update-Objekt im Cache sehen. ut was wir untersuchen, ist, wenn wir ein Objekt in den Cache in einer Transaktion hinzufügen, wenn das Rollback der Transaktion aus dem Cache entfernt wird. Aber die Modifikation des bestehenden Objekts bleibt so wie es ist.infinispan Cache-Objekt Update in Transaktion Roll-Back-Ausgabe
Dies ist nur ein Beispiel, was wir tun möchten. In Wirklichkeit müssen mehrere Objekte in einer einzigen Transaktion aktualisiert werden.
Könnten Sie uns bitte wissen lassen, dass es möglich ist, Infinispan für diese Art von Betrieb zu verwenden.
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) {
}
}
}
Vielleicht ist der Cache so konfiguriert, dass er nicht transaktional ist? Standardmäßig sind Caches nicht transaktional. Sie müssen sie explizit transaktional machen (siehe Cache-Konfigurationen in der AS7-Konfigurationsdatei). Dies scheint eine Art Setup-Problem zu sein. –
Versuchen Sie nicht, den in der Karte gespeicherten Wert direkt zu ändern, ohne dass der Cache davon weiß? –