8
votes

Gestion manuelle des transactions de base de données dans un environnement de printemps / hibernate

Nous avons une application Web à base de printemps qui utilise Hibernate pour charger / stocker ses entités vers la base de données sous-jacente.

Comme il s'agit d'une application backend, nous voulons non seulement permettre à notre interface utilisateur, mais également des outils tiers pour initier manuellement les transactions DB. C'est pourquoi les appelants doivent

  1. appelez un startTransaction méthode et en retour, obtenez un identifiant qu'ils peuvent faire référence à
  2. Tous les appels pertinents DB (e. g. Création, modification, la suppression) en faisant référence à cet ID pour préciser les opérations appartenant à la transaction démarrée
  3. appelez la méthode commitTransaction pour signaler à notre backend que la transaction peut être commise maintenant (ou dans le cas négatif rollbacktransaction sera appelé)

    Alors gardez à l'esprit que toutes les manipulations de la base de données seront effectuées en interne par les annotations de la persistance Java, comment pouvons-nous ouvrir la gestion des transactions à notre interface utilisateur qui se comporte comme une application tierce qui n'a aucun accès direct aux entités ballentives mais offres avec des objets de transfert de données uniquement?


0 commentaires

3 Réponses :


0
votes

Pourquoi ne construisez-vous pas des services autour de votre "application arrière" par exemple une interface SOAP ou une interface de repos.

Avec cette stratégie, vous pouvez gérer votre transaction dans le backend


1 commentaires

Peut-être que je n'ai pas suffisamment effacé ma question: le Keypoint n'est pas quelle interface à fournir mais comment avoir hibernate m'offrir une possibilité de démarrage et de fin de manière manuelle. D'habitude, tout cela se fait via des annotations et de la configuration, mais nos outils 3ème partie et l'interface utilisateur n'ont pas accès à ces entités annotées. Au lieu de cela, ils passent DTO (objets de transfert de données uniquement).



2
votes

de la référence du ressort: Gestion des transactions programmatiques


0 commentaires

0
votes

Je pense que cela peut être fait, mais serait une douleur royale à mettre en œuvre / vérifier. Vous devez essentiellement besoin d'un gestionnaire de transactions qui n'est pas délimité par une définition «transaction par thread-transaction», mais s'étend sur plusieurs invocations pour le même client.

Les haricots de session en JTA + pourraient être quelque chose que vous voudriez jeter un coup d'œil à.


1 commentaires

Vous êtes bien sûr le bienvenu. BTW, cette communauté serait intéressée par l'approche que vous allez prendre si vous parvenez à retirer cela, il serait donc agréable que vous puissiez mettre à jour votre poste original ou votre commentaire sur ce poste une fois que vous avez terminé avec votre implémentation. Bonne chance. :)