Je souhaite utiliser la gestion des transactions de Kundera (V3.2) pour ma base de données Cassandra. En se référant à https://github.com/impetus-opensource/Kundera/wiki/Transaction-Management, il devrait être possible d'utiliser cette fonctionnalité. J'écrit le code suivant:Transactions dans kundera-cassandra
public void update(Account entity){
EntityManager manager = this.entityManagerFactory.createEntityManager(getProperties());
manager.setFlushMode(FlushModeType.COMMIT);
manager.getTransaction().begin();
try{
String queryStringNative = "UPDATE account SET value = 20 WHERE id = 'xxx' IF value = 10";
Query query = manager.createNativeQuery(queryStringNative);
query.executeUpdate();
String queryStringNative1 = "UPDATE account SET value = 30 WHERE id = 'yyy' IF value = 40";
Query query1 = manager.createNativeQuery(queryStringNative1);
query1.executeUpdate();
//commit
manager.getTransaction().commit();
} catch(Exception e){
manager.getTransaction().rollback();
}
manager.clear();
manager.close();
}
Mais quand je simule une erreur dans la deuxième requête la restauration ne fonctionne pas et le compte avec l'id « xxx » est mis à jour.
Donc, ma question, est-il généralement possible d'utiliser l'implémentation de transaction de Kundera pour kundera-cassandra de ma façon particulière?
EDIT:
J'ai découvert que Kundera utilise un EventLogQueue pour effectuer une annulation ou validation. Il lit les événements qui se trouvent dans la file d'attente et annule ces événements. Le problème est, il semble que l'EventQueue ne reçoive que les événements qui sont envoyés par l'appel de méthode de EntityManager.persist(), EntityManager.remove() ou EntityManager.merge(). Il n'y a donc aucune entrée lors de l'exécution d'une requête native.
Merci pour votre réponse. Je comprends la raison. La mauvaise chose est, une combinaison de la gestion des transactions de Kundera et les transactions légères de Cassandra serait une fonctionnalité intéressante. Mais cela ne peut pas être utilisé car Kundera ne supporte pas les transactions légères sur leur méthode persist. –
@ K.E. Oui .. c'est parce que nous supportons le format JPA pour l'interrogation et qu'il n'y a pas d'interface pour exposer les transactions légères spécifiques à Cassandra. Ce sont deux mondes différents .. J'espère que vous comprenez :) –
Oui, je comprends, merci! –