Index: topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java diff -u topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java:1.7 topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java:1.8 --- topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java:1.7 Tue Aug 2 21:03:58 2005 +++ topia/src/java/org/codelutin/topia/persistence/PersistenceStorageJDBC.java Tue Aug 2 23:37:17 2005 @@ -23,9 +23,9 @@ * Created: 20 juillet 2005 15:25:06 CEST * * @author Benjamin POUSSIN - * @version $Revision: 1.7 $ + * @version $Revision: 1.8 $ * - * Last update: $Date: 2005/08/02 21:03:58 $ + * Last update: $Date: 2005/08/02 23:37:17 $ * by : $Author: bpoussin $ */ @@ -38,6 +38,7 @@ import java.io.ObjectOutputStream; import java.io.UnsupportedEncodingException; import java.lang.NoSuchMethodException; +import java.lang.reflect.Method; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; @@ -61,11 +62,11 @@ import org.apache.commons.pool.impl.StackKeyedObjectPoolFactory; import org.codelutin.queryparser.QueryHelperException; import org.codelutin.topia.TopiaConst; +import org.codelutin.topia.TopiaContext; import org.codelutin.topia.TopiaException; import org.codelutin.topia.TopiaId; import org.codelutin.topia.TopiaQuery; import org.codelutin.topia.Util; -import org.codelutin.topia.TopiaContext; /** * Storage implante sur JDBC. @@ -548,7 +549,7 @@ return result; } - protected Object databaseToObject(String type, byte[] value) throws TopiaPersistenceException { + protected Object databaseToObject(TopiaContext context, String type, byte[] value) throws TopiaPersistenceException { long time = System.currentTimeMillis(); Object result; try{ @@ -570,6 +571,18 @@ ObjectInputStream ois = new ObjectInputStream(bais); result = ois.readObject(); bais.close(); + + // on vient de lire un objet, s'il a une methode setContext(TopiaContext) + // alors on l'appelle avec le context qui est en parametre + Method m = MethodUtils.getMatchingAccessibleMethod( + result.getClass(), "setContext", new Class[]{context.getClass()}); + if(m != null){ + try{ + m.invoke(result, context); + }catch(Exception eee){ + log.log(Level.WARNING, "Can't set context on object", eee); + } + } } }catch(Exception eee){ throw new TopiaPersistenceException("Can't convert bytes array to object: " + type, eee); @@ -610,7 +623,7 @@ // on le charge que si on a besoin String type = rr.getString("type"); byte[] bytesValue = rr.getBytes("value"); - Object value = databaseToObject(type, bytesValue); + Object value = databaseToObject(context, type, bytesValue); data.setField(field, value); // on vient de le charger, donc plus besoin de le faire tpo.getAskedFields().remove(field);