Question

Je veux atteindre une transaction comme fonctionnalité en Java.Je veux faire des opérations ` n 'comme une opération de mise à jour de la base de données, une pour insérer dans une file d'attente, une opération pour mettre à jour une autre structure de données, etc., toutes ces opérations doivent se comporter comme une transaction, c'est-à-dire, Si cela réussit, toutes les opérations doivent être effectuées avec succès, sinon, si l'on échoue, tout devrait échouer.L'une des approches de la force brute consiste à écrire des blocs d'essais et à rétablir toutes les opérations des blocs de capture.Des pointeurs à résoudre ce type de problèmes?Y a-t-il un modèle ou une bibliothèque pour atteindre cela?

Était-ce utile?

La solution

Je pense que le modèle que vous recherchez est Commande .

Comportement transactionnel

Semblable à Annuler, un programme d'installation de moteurs de base de données ou de logiciels peut conserver une liste des opérations qui ont été effectuées ou seront effectuées.Si l'un d'entre eux échoue, tous les autres peuvent être retournés ou jetés (généralement appelés Rollback).Par exemple, si deux tables de base de données qui se rapportent doivent être mises à jour et que la deuxième mise à jour échoue, la transaction peut être rémunérée, de sorte que la première table ne contienne pas maintenant une référence invalide.

Autres conseils

Nope, tu veux JTA.

La force de la force brute serait d'utiliser JDBC et de gérer vous-même commis et retourner vous-même.

Le moyen le plus simple serait d'utiliser des transactions de printemps ou d'EJB3.1 et de déclaratives.

Je l'ai fait avec une combinaison de la commande et des modèles de conception composite.La classe de transaction est abstraite et contient des méthodes de début () et de restauration ().La compositransaction est dérivée de la transaction et stocke une liste d'objets de transaction.Pour chaque groupe d'opérations qui doivent être traités comme une transaction atomique, créez une sous-classe de la compositransaction et ajoutez vos cours de transaction à cela.Voir la compositransaction ici:

http://hillside.net/plop/plop99/proceedings/grand/plop_99_transaction_patterns.pdf

Un modèle de visiteur fonctionne bien. En outre, vous devrez vous assurer de délivrer le commit au bon moment.Si vous attendez que l'ensemble des insertions / mises à jour complète, indiquez que votre comportement décrit doit être automatique.

On dirait que vous avez peut-être besoin d'un petit refacteur de votre classe SQL Stament pour vous assurer que vous pouvez émettre des déclarations sans le commit implicite.

Ceci est juste une logique sur la manière dont pouvez-vous atteindre cela.

Écrivez une méthode pour chaque transaction que vous le souhaitez.Il aurait probablement toutes ses ressources.Comme la transaction JDBC disposera d'un objet de connexion et d'une requête comme une exigence, le fonctionnement du fichier s'il y a un chemin de fichier, etc.

Ainsi, pour 5 transaction, il y aura 5 méthodes différentes.Vous pouvez y parvenir dans une seule méthode aussi, mais c'est juste pour la simplicité.

E.g.

method1(...) throws Exception {
    ...
    // if any exception occurs then control will be passed to caller of this
    // method
    throw new Exception("1"); // write method number
}

puis écrivez une méthode comme (la suivante est juste un modèle):

public long/void transaction(...) throws Exception
{
    try {
        this.method1(...);
        this.method2(...);
        this.method3(...);
    } catch (Exception e) {
        // get that number in a exception message
        // and try to undo all operations numbers less than above number.
        // e.g. if that transaction method is any database transaction then
        // try to rollback it.
        // if it is creation of any file say log file then delete it
        // now further logic depends on what the transaction was and how to
        // undo it...
    }
}

merci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top