Index: topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java diff -u topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java:1.16 topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java:1.17 --- topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java:1.16 Tue Aug 9 12:24:11 2005 +++ topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java Thu Aug 11 16:40:14 2005 @@ -23,10 +23,10 @@ * Created: 20 juillet 2005 15:25:06 CEST * * @author Benjamin POUSSIN - * @version $Revision: 1.16 $ + * @version $Revision: 1.17 $ * - * Last update: $Date: 2005/08/09 12:24:11 $ - * by : $Author: dessard $ + * Last update: $Date: 2005/08/11 16:40:14 $ + * by : $Author: thimel $ */ package org.codelutin.topia.persistence; @@ -397,7 +397,6 @@ tpo.getManagement().setDate(context.getTransaction().getId()); boolean exists = managementExists(conn, context, tpo); - if(exists){ // l'objet existait on le met a jour saveManagement(conn, context, tpo, false); @@ -431,7 +430,7 @@ * Demande la restauration de l'entité dans le context de la transaction */ public void restore(TopiaContext context, TopiaPersistenceObject tpo) throws TopiaPersistenceException { - if(!(tpo.getManagement().isUnloaded() || tpo.getAskedFields().size() != 0)){ + if(!(tpo.getManagement().isUnloaded() || tpo.getAskedFields().size() != 0 || tpo.getManagement().isRollbacked())){ // deja chargé et pas de champs a charger on sort tout de suite return; } @@ -451,6 +450,7 @@ String query = SQL.getProperty(SQL_LOAD_HISTORY); query = Util.setAllMultipleIds(query, context.getTransaction()); sta = conn.prepareStatement(query); + sta.setMaxRows(1); // on veut uniquement le premier sta.setString(1, tpo.getManagement().getId()); sta.setLong(2, -context.getTransaction().getId()); // sta.setObject(3, context.getTransaction().getIds(), Types.ARRAY); @@ -464,7 +464,7 @@ } long storedSchemaVersion = management.getLong("schemaVersion"); - if(tpo.getManagement().isUnloaded()){ + if(tpo.getManagement().isUnloaded() || tpo.getManagement().isRollbacked()){ tpo.getManagement().setDate(management.getLong("longdate")); tpo.getManagement().setStored(true); tpo.getManagement().setDeleted(management.getBoolean("isDeleted")); @@ -817,13 +817,14 @@ } conn.commit(); } finally { - conn.close(); + if(!conn.isClosed()){ + conn.close(); + } } // peut-etre faire quelque chose comme dans beginTransaction ? context.setTransaction(newtt); } catch(SQLException eee){ - eee.printStackTrace(); - throw new TopiaPersistenceException("Erreur durant le rollback transaction: " + context.getTransaction().getId(), eee); + throw new TopiaPersistenceException("Erreur durant le commit transaction: " + context.getTransaction().getId(), eee); } }