IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

java/gérer les transactions d'un block


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 113
    Points : 42
    Points
    42
    Par défaut java/gérer les transactions d'un block
    Bonjour,
    je développe une application web en java, et j'ai besoin dans la meme transaction :

    lire un fichier plat,
    parser un fichier xml,
    générer un document rtf
    et faire des mise à jour dans la base de données..


    mon souci, c'est soit exécuter les 4 opérations en un seul block, soit je fais un rollback de tout si jamais l'un de ces opérations échoue

    est-ce possible, et comment faire?

    pour le moment j'ai fait les 4 opérations dans un block try, et s'il y a un problème, ds le catch je fais rollback, mais malgré cela le document rtf est déjà géneré, d'où le problème.

    merci d'avance

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Je crois que tu analyses mal ton problème:

    Tout d'abord un rollback ne s'effectue que sur des choses que tu modifies. Donc si tu as un problème lors de ta lecture de fichier texte ou de ton parsing de fichier XML, tu n'as aucun rollback à effectuer puisque tu n'as modifié aucune donnée.

    Ensuite, pour ta génération de pdf et ton écriture en base, ce n'est pas compliqué:

    - tu crées ton fichier rtf, et si ça se passe mal, tu supprimes le fichier et tu arrêtes ton traitement
    - tu tentes ton écriture en base. Si elle se passe bien, fin. Sinon, tu supprimes le fichier rtf généré à l'étape d'avant.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    Merci beaucoup pour ta réponse,
    oui en fait, je me suis mal exprimé,
    donc tu propose, si j'ai déjà crée le document, et la mise à jour ne s'est pas bien passée, je supprime le fichier, c'est faisable malgré que c'est un peu lourd, car il est stocké sur un serveur de fichier.
    y a aucun moyen de soit faire les deux opérations soit annuler les deux?
    merci

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Dans ce cas tu inverses, ça sera moins lourd:

    - tu effectues ta mise en base, et si elle se passe mal, tu annules.
    - tu génères ton rtf, si ça se passe bien fin. Sinon, tu supprimes les modifications en base.

    La méthode la plus propre serait à mon avis:

    - tu effectues ta requête à la base de données, mais sans effectuer de "commit()", et tu gardes la connexion ouverte.
    - tu tentes de générer ton rtf
    - si ça marche, tu effectues un "commit()" de la connexion et tu la fermes
    - si la génération s'est mal passée, tu effectues un "rollback()" de la connexion avant de la fermer.

    Le seul problème, c'est que je ne sait pas combien de temps prend la génération de ton fichier rtf. Si elle est rapide, ça passe sans problème! Sinon, il est possible que ta connexion à la base soit fermée prématurément par ton serveur de BDD pour cause de "timeout", et là c'est problématique!

    Il faut donc que tu te renseignes sur les temps d'inactivité autorisés sur ta base de données.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    merci beaucoup,
    ta réponse est très précieuse,
    je vais essayer cette eéthode et je te tiens au courant lundi
    la générationd e mon rtf est très rapide 2seconde, donc ca devrait pas poser un problème à mon avis mais je vais me renseigner.
    encore une fois merci beaucoup

Discussions similaires

  1. Comment et où gérer les transactions ?
    Par brice01 dans le forum Autres
    Réponses: 6
    Dernier message: 12/11/2009, 22h26
  2. java et les transactions
    Par hanounbk dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 05/11/2009, 18h40
  3. [Internet] Telechargement en Java : gérer les reprises ?
    Par gargantua dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 08/01/2009, 14h55
  4. gérer les transactions avec php/sql server
    Par loukili81 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/05/2007, 17h39
  5. Où gérer les transactions avec Firebird ?
    Par DMO dans le forum Débuter
    Réponses: 2
    Dernier message: 26/04/2005, 09h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo