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 EE Discussion :

Gestion des transactions [EJB3]


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 34
    Par défaut Gestion des transactions
    Bonjour,
    je ne comprends pas trop comment on gère les transactions dans une appli j2EE.

    tout d'abord:

    J'ai une sessionbean et son interface qui me sert de façade et des entitys.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //
    public @Stateless class ManagerBean implements Manager {
     
    	@PersistenceContext
      	private EntityManager manager;
    ..
    }
    voilà..ensuite je sais que qu'un certain niveau de transaction est géré par les ejb3.0, notament quand on fait des persist/remove... sur des entities avec des relations manytoone, onetomany, etc.

    Mais je souhaiterai effectuer un scénario, c'est à dire faire une suite d'enregistrements indépendantes, et donc que toutes celles ci soient dans une transaction, car si il en manque une je voudrais faire un rollback.

    Sans les transactions c'est simple.

    Mais je ne voit pas ce qu'il faut modifier dans mon code :

    j'ai lu la doc ejb3.0 :

    Donc déjà si j'ai bien compris, ce sont 3 méthodes pour faire exactement la même chose, sauf si je me trompe...

    The following example illustrates how an enterprise bean acquires and uses a UserTransaction object via injection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      @Resource UserTransaction tx;
      ...
      public void updateData(...) {
      ...
         // Start a transaction.
         tx.begin();
         ...
         // Perform transactional operations on data.
         ...
         // Commit the transaction.
         tx.commit();
         ...
    }
    The following code example
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      public MySessionBean implements SessionBean {
      ...
        public someMethod()
        {
             ...
            Context initCtx = new InitialContext();
            UserTransaction utx =  (UserTransaction)initCtx.lookup(“java:comp/UserTransaction”);
            utx.begin();
            ...
            utx.commit();
       }
        ...
    }
    is functionally equivalent to

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public MySessionBean implements SessionBean 
    {
       ...
       SessionContext ctx;
       ...
       public someMethod() 
       {
           UserTransaction utx = ctx.getUserTransaction();
           utx.begin();
           ...
           utx.commit();
       }
       ...
    }
    Bon les 2 dernières on voit bien que ce sont des méthodes de la sessionbean...

    donc on appelle les méthodes enter le begin() et le commit()..jusque la ca va.

    Mais j'ai lu autre part qu'il y avait des tags à changer et notemment le @PersistenceContext.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Stateful
    @TransactionManagement(value=TransactionManagementType.CONTAINER)
    public class ManagerBean implements Manager 
    {
     
    	@TransactionAttribute(value=TransactionAttributeType.REQUIRED)
    	public void mamethode
    	{
    	}
    }
    1) Tout d'abord est-il utile de changer la session bean avec le code ci dessus et est ce bien ce code?

    2) Si je change, dois-je mettre des tags
    "@TransactionAttribute(value=TransactionAttributeType.REQUIRED)"
    à toutes mes méthodes et quel est le comportement des méthodes sans ses tags?, elle reste identiques?
    suffit il de rajouter
    "@PersistenceContext
    private EntityManager manager;"
    dans le code ci dessus? pour garder le comportement des méthodes sans transactions?

    3) sinon suffit-il de rajouter une des 3 méthodes de transaction dans la session bean et d'appeler les méthodes entre le begin() et le commit() sans changer le code des méthodes?

    voilà, je ne connaissais pas vraiment les transactions et les problèmes liés à l'enregistrement dans une BD, merci pour vos réponses et désolé si en fait c'est super simple...

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Par défaut, les méthodes d'un session bean sont transactionnelles, avec le type required.
    Tu n'as donc rien à faire, sauf si tu veux changer le type de transaction.
    Pas besoin de code supplémentaire, pas besoin de récupérer le UserTransaction, les transactions sont gérées par le conteneur.

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 34
    Par défaut
    d'accord merci,

    Mais donc imaginons que j'appelle une suite de methodes dans une servlet

    que je fasse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    manager.savedata(a);
    manager.savedata(b);
    //com
    manager.savedata(c);
    manager.savedata(d);
    manager.savedata(e);
    ceci n'est pas transactionnelle, si le serveur se deconnecte au point com, je n'aurai pas c, d ,e dans ma BD...

    et donc si je fais une methode, dans ma session bean sans rien modifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void savecollectiondata(Collection<montype> saveliste)
    {
    Iterator isaveliste = saveliste.iterator();
    Montype m = null
    while(isaveliste.hasnext())
    {
     m=isaveliste.next
     manager.savedata(m) //savedata faisant un persist
    }
    }
    cela va faire une transaction? et donc si le serveur se deconnecte au niveau de la bouclewhile, avant qu'il ne fasse tout les savedata, cela va faire un rollback, si j'ai bien compris?

    Merci encore d'avoir répondu.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Oui tu as compris.
    Après comme je disais, tu peux jouer avec les types de transaction selon tes besoins.

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 34
    Par défaut
    merci

  6. #6
    Invité de passage
    Inscrit en
    Mai 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 1
    Par défaut need help
    salut kuruma45, je sais que ton poste date d'il y a super longtemps mais j'ai vraiment besoin d'un bon tuto sur la gestion des transaction "ejb". c trés urgent je doit au plus vite terminé mon pfe.
    merci d'avance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion des transactions avec les composants DOA
    Par lper dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/12/2008, 16h06
  2. [ORACLE] : Gestion des transactions
    Par dcollart dans le forum Oracle
    Réponses: 5
    Dernier message: 07/07/2006, 08h49
  3. [Data] Gestion des transactions
    Par hlr dans le forum Spring
    Réponses: 2
    Dernier message: 21/02/2006, 09h47
  4. Gestion des transactions - Gestion des erreurs
    Par devdev dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 23/03/2005, 20h17
  5. gestion des transactions
    Par viny dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/03/2004, 21h53

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