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

JDBC Java Discussion :

Impossible de faire un Rollback à partir d'un Savepoint


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Points : 46
    Points
    46
    Par défaut Impossible de faire un Rollback à partir d'un Savepoint
    Bonjour à tous,

    J'ai une méthode qui doit faire des INSERT dans une base de données à partir d'un fichier (chaque ligne du fichier représentant un INSERT).

    Dès qu'elle rencontre une erreur (Ligne fichier mal formé, par exemple) elle annule tous les INSERT faits.

    Je me suis naturellement tourné vers la FAQ : http://java.developpez.com/faq/jdbc/...ons#savepoints

    J'ai donc deux classes (Un DAO et une qui execute le traitement avant l'utilisation des méthodes du DAO )

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    public class DBBDao{
     
        private Statement statement = null;
        private Connection connect = null;
     
       public DBBDao(){
          Class.forName("oracle.jdbc.driver.OracleDriver");
          . . .
          connect = DriverManager.getConnection(URL,LOGIN,PWD);
       }
     
       public executeRequest(String request){
          . . . //Execute une requete à partir d'un Statement récupéré sur l'objet Connection
       }
     
       // Permet de récupérer un Savepoint
        public Savepoint getSavePoint(String string) {
    	if(connect != null)
    	{
    	    try {
    		return connect.setSavepoint(string);
    	    } catch (SQLException sqle) {
    		log.error("Une erreur s'est produite lors de la sauvegarde d'un point avant rollback.",sqle);
    	    }
    	}
    	return null;
        }
     
       // Permet de faire un rollback depuis un Savepoint passé en paramètre
        public boolean executeRollback(Savepoint savepoint){
    	if(connect != null)
    	{
    	    try {
    		connect.rollback(savepoint);
    		connect.commit();
                    return true;
    	    } catch (Exception e) {
    		log.warn("Impossible de faire un rollback !",e);
    	    }
    	}
    	return false;
        }
     
    }

    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
    public class DataImport{
     
       private Savepoint save;
     
       public DataImport(){
     
          DBBDao dbm = new DBBDao();
     
          save = dbm.getSavePoint("savepoint" + new SimpleDateFormat("yyyyDDMM_hhmmss").format(new Date()).toString());
     
     
          Boolean passedVerif = false;
          // Mes traitements
          . . .
          // Vérification sur mes traitements
          if(passedVerif){
             dbm.executeRequest("INSERT XXX INTO YYY");
          }else{
             dbm.executeRollback(save);
             return;
          }
     
      }
     
    }
    J'ai peut être louper quelque chose depuis la FAQ ...

    Voici le printstack obtenu :

    Les classes sont contenues dans un AAR (fichier Axis 2 ARchive), elles mêmes déployées dans un Tomcat.

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    java.sql.SQLException: ORA-01086: le savepoint 'SAVEPOINT20091501_015740' n'a jamais été établi
     
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
    	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
    	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
    	at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
    	at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:957)
    	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1170)
    	at oracle.jdbc.driver.OracleStatement.executeUpdateInternal(OracleStatement.java:1623)
    	at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1588)
    	at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:3132)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:585)
    	at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:194)
    	at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:102)
    	at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
    	at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:100)
    	at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:176)
    	at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
    	at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:133)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
    	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
    	at java.lang.Thread.run(Thread.java:595)

  2. #2
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Points : 46
    Points
    46
    Par défaut
    Bon et bien j'ai juste enlever mon "Savepoint".

    Je me retrouve donc avec un simple "RollBack" (qui marche ).

    Attention, toutefois a ne pas commiter, et a bien vérifier que le close du statement n'effectue pas un commit implicite !

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/09/2011, 18h14
  2. Réponses: 2
    Dernier message: 14/12/2005, 22h57
  3. Comment faire du MDX à partir d'une requete SQL?
    Par Immobilis dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 10/11/2005, 09h46
  4. Impossible de faire marcher SESSIONS_PER_USER
    Par jack554 dans le forum Oracle
    Réponses: 7
    Dernier message: 05/01/2005, 11h50
  5. impossible de faire fonctionner phppgadmin et pgdmin3
    Par le_ben dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 09/12/2004, 14h27

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