Index: topia/src/java/org/codelutin/topia/AbstractTopiaPersistenceService.java diff -u topia/src/java/org/codelutin/topia/AbstractTopiaPersistenceService.java:1.14 topia/src/java/org/codelutin/topia/AbstractTopiaPersistenceService.java:1.15 --- topia/src/java/org/codelutin/topia/AbstractTopiaPersistenceService.java:1.14 Wed Sep 7 15:34:59 2005 +++ topia/src/java/org/codelutin/topia/AbstractTopiaPersistenceService.java Thu Sep 22 17:58:14 2005 @@ -23,9 +23,9 @@ * * @author Benjamin Poussin * Copyright Code Lutin - * @version $Revision: 1.14 $ + * @version $Revision: 1.15 $ * - * Mise a jour: $Date: 2005/09/07 15:34:59 $ + * Mise a jour: $Date: 2005/09/22 17:58:14 $ * par : $Author: bpoussin $ */ @@ -46,8 +46,12 @@ * subscribers list. */ public void addTopiaEntityListener(TopiaEntityListener l) { - getContext().getListeners().addCategory(getContext().getClass(), getEntityClass()); - getContext().getListeners().add(getEntityClass(), l); + Class entityClass = getEntityClass(); + + // 20050922 bpoussin: deplace dans TopiaContext.getService + // Class contextClass = getContext().getClass(); + // getContext().getListeners().addCategory(contextClass, entityClass); + getContext().getListeners().add(entityClass, l); } /** Index: topia/src/java/org/codelutin/topia/TopiaContext.java diff -u topia/src/java/org/codelutin/topia/TopiaContext.java:1.51 topia/src/java/org/codelutin/topia/TopiaContext.java:1.52 --- topia/src/java/org/codelutin/topia/TopiaContext.java:1.51 Wed Sep 21 20:34:51 2005 +++ topia/src/java/org/codelutin/topia/TopiaContext.java Thu Sep 22 17:58:14 2005 @@ -23,9 +23,9 @@ * * @author Benjamin Poussin * Copyright Code Lutin -* @version $Revision: 1.51 $ +* @version $Revision: 1.52 $ * -* Mise a jour: $Date: 2005/09/21 20:34:51 $ +* Mise a jour: $Date: 2005/09/22 17:58:14 $ * par : $Author: bpoussin $ */ @@ -154,7 +154,7 @@ */ public void entityAdded(TopiaEntityEvent event){ for(TopiaEntity e:event.getTopiaEntities()){ - Class clazz = e.getClass(); + Class clazz = e.getEntityClass(); Set added = getEventEntityList(addedTopiaEntity, clazz); added.add(e); // il a ete ajoute ou remis s'il existait precedement @@ -168,7 +168,7 @@ */ public void entityModified(TopiaEntityEvent event){ for(TopiaEntity e:event.getTopiaEntities()){ - Class clazz = e.getClass(); + Class clazz = e.getEntityClass(); Set added = getEventEntityList(modifiedTopiaEntity, clazz); // on ne l'ajoute dans modifier que s'il n'est pas deja dans added if(!added.contains(e)){ @@ -183,7 +183,7 @@ */ public void entityRemoved(TopiaEntityEvent event){ for(TopiaEntity e:event.getTopiaEntities()){ - Class clazz = e.getClass(); + Class clazz = e.getEntityClass(); Set removed = getEventEntityList(removedTopiaEntity, clazz); removed.add(e); // il a ete supprimé il faut l'enlever des autres @@ -246,6 +246,8 @@ if(parent != null){ for(Map.Entry> set:addedTopiaEntity.entrySet()){ Class clazz = set.getKey(); + // il faut etre sur que le context pere est parent de l'event + parent.getListeners().addCategory(parent.getClass(), clazz); Set entities = set.getValue(); if(entities.size() > 0){ // on previent les listeners du bon persistence service (clazz) @@ -258,6 +260,8 @@ } for(Map.Entry> set:modifiedTopiaEntity.entrySet()){ Class clazz = set.getKey(); + // il faut etre sur que le context pere est parent de l'event + parent.getListeners().addCategory(parent.getClass(), clazz); Set entities = set.getValue(); if(entities.size() > 0){ // on previent les listeners du bon persistence service (clazz) @@ -270,6 +274,8 @@ } for(Map.Entry> set:removedTopiaEntity.entrySet()){ Class clazz = set.getKey(); + // il faut etre sur que le context pere est parent de l'event + parent.getListeners().addCategory(parent.getClass(), clazz); Set entities = set.getValue(); if(entities.size() > 0){ // on previent les listeners du bon persistence service (clazz) @@ -376,11 +382,6 @@ Class interfacez = Util.getClazz(className); TopiaPersistenceService result = (TopiaPersistenceService)getService(interfacez, true); - - // on s'enregistre comme listener sur tout les persistences services - // pour que lors du commit on puisse rejouer les modifications sur le - // context pere - result.addTopiaEntityListener(this); return result; } @@ -429,7 +430,13 @@ new Class[] { serviceInterfacez }); if (result instanceof TopiaPersistenceService) { - listeners.addCategory(this, result); + TopiaPersistenceService ps = (TopiaPersistenceService)result; + listeners.addCategory(this.getClass(), ps.getEntityClass()); + + // on s'enregistre comme listener sur tout les persistences services + // pour que lors du commit on puisse rejouer les modifications sur le + // context pere + ps.addTopiaEntityListener(this); } cacheService.put(serviceInterfacez, result); }