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

avec Java Discussion :

Mettre à jour un code java


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Mettre à jour un code java
    Je dois mettre à jour un code en appliquant les règles suivantes:
    Si une exception est levée par s.execute() alors appeler c.rollback()
    et propager l'exception,sinon appeler c.commit()
    Dans tous les cas ,c.closest() doit être appelée avant de quitter la méthode a(Service s,Connection c)

    le code est le suivant:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class A {
    	// doit executer le service avec les connections données
     
    	void a(Service s,Connection c) {
    		s.setConnection(c);
    		s.execute();
    	}
     
    }
     
    interface Service{
    	void execute() throws Exception;
    	void setConnection(Connection c);
    }
     
    interface Connection{
    	void commit();
    	void rollback();
    }
     
     
     
    public static void main(String[] args) {
    		Service service=new Service() {
    			public void execute()throws Exception{
    				System.out.println("execute");
    			}
     
     
    			public void setConnection(Connection c) {
    				System.out.println("setConnection");
     
    			}
    		};
    }


    En suivant ces instructions j'ai donc complété en faisant le code suivant:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    void a(Service s,Connection c) throws Exception {
    		s.setConnection(c);
    		s.execute();
                    c.rollback();//doit appeler rollback() si une exception est levée et propager l'exception
                    c.commit();//Sinon appeler c.commit()
                    c.close();//dans tous les cas appeler c.close()
    	}
     
    }
     
    interface Service{
    	void execute() throws Exception;
    	void setConnection(Connection c);
    }
     
    interface Connection{
    	void commit();
    	void rollback();
    }


    j'ai suivi les instructions mais je ne sais pas si c'est juste
    Qu'est ce que vous en pensez svp?

  2. #2
    Modérateur

    Hello,

    ben non c'est pas juste.

    rollback() ne doit être appelé que s'il y a une une exception.
    commit() ne doit être appelé que s'il n'y a pas eu d'exception.
    et close() doit toujours être appelé, sous-entendu y compris s'il y a une exception. Donc avec ton code il n'est pas appelé s'il y a une exception.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau Candidat au Club
    Re
    Je ne comprends pas là,il y'a bien une exception avec "throws exception" donc
    j'ai appelé rollback();qu'est ce qui est faux dans mon code?je ne vois pas svp.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void a(Service s,Connection c) throws Exception {
    s.setConnection(c);
    s.execute();
    c.rollback();//doit appeler rollback() si une exception est levée et propager l'exception
    c.commit();//Sinon appeler c.commit()
    c.close();//dans tous les cas appeler c.close()
    }


    ????

  4. #4
    Membre expérimenté
    Citation Envoyé par master MI Voir le message
    Je ne comprends pas là,il y'a bien une exception avec "throws exception" donc
    j'ai appelé rollback();qu'est ce qui est faux dans mon code?je ne vois pas svp.
    Que comprends-tu aux exceptions ??
    La déclaration "throws Exception" dit juste que la méthode est susceptible de transmettre une exception de ce type au code appelant. Point.

    Lit un peu la doc. Par exemple :
    https://anisfrikha.developpez.com/tu...va/exceptions/

  5. #5
    Nouveau Candidat au Club
    Re
    Merci mais Votre lien ne marche pas.
    Sinon comment j'utilise c.rollback(),c.commit() et c.close()
    dans mon code alors?

  6. #6
    Modérateur

    Réessaie le lien, il marche parfaitement. Peut-être qu'il y a eu une panne temporaire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau Candidat au Club
    Re
    Je suis connecté sur un réseau professionnel,il doit avoir des proxys,j'essaierai sur mon pc
    perso une fois à la maison.

  8. #8
    Nouveau Candidat au Club
    j'ai fait le code suivant correspondant aux critères que j'ai posés là haut,
    j'ai utilisé un try/catch/finally,j'obtient le code suivant:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void a(Service s,Connection c) throws Exception {
     
            try {
            s.setConnection(c);
            s.execute();
        }catch( Exception e) {
            c.rollback();
        }finally {
            c.commit();
        }


    Est ce vous croyez que c'est juste ,sinon la phrase"dans tous les cas,c.close() doit être appelé avant de quitter la méthode a(Service s,Connection c)"
    je ne sais pas la traduire en code pour compléter le code que j'ai fait,pouvez vous m'aider ?

  9. #9
    Membre expérimenté
    Citation Envoyé par master MI Voir le message

    Est ce vous croyez que c'est juste ,sinon la phrase"dans tous les cas,c.close() doit être appelé avant de quitter la méthode a(Service s,Connection c)"
    je ne sais pas la traduire en code pour compléter le code que j'ai fait,pouvez vous m'aider ?
    Dans la page que j'indiquais plus haut il est écrit :
    Citation Envoyé par https://anisfrikha.developpez.com/tutoriel/java/exceptions/
    Le mot clé finally, généralement associé à un try, permet l'exécution du code situé dans son bloc et ceci quelle que soit la manière dont s'est déroulé l'exécution du bloc try.
    Donc on aurait plutôt :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        try {
            s.setConnection(c);
            s.execute();
     
            c.commit();  // si ok on "commit"
        }catch( Exception e) {
            c.rollback(); // si ko on "rollback"
        }finally {
            c.close();  // dans tous les cas : on appelle "close"
        }

  10. #10
    Nouveau Candidat au Club
    Merci beaucoup

###raw>template_hook.ano_emploi###