r1646 - trunk/topia-persistence/src/main/java/org/nuiton/topia/framework
Author: sletellier Date: 2009-09-24 15:09:10 +0200 (Thu, 24 Sep 2009) New Revision: 1646 Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java Log: Fix concurent acces error Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2009-09-24 12:55:10 UTC (rev 1645) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2009-09-24 13:09:10 UTC (rev 1646) @@ -84,6 +84,7 @@ import java.util.Set; import java.util.WeakHashMap; import java.util.zip.GZIPInputStream; +import org.apache.commons.collections.set.SynchronizedSet; import org.nuiton.topia.persistence.TopiaDAOImpl; import static org.nuiton.i18n.I18n._; @@ -156,7 +157,9 @@ * Set des sous context creer avec un beginTransaction et donc sur lequel * nous sommes listener */ - protected Set<TopiaContextImplementor> childContext = MapBackedSet.decorate(new WeakHashMap<TopiaContextImplementor, Object>()); + // by sletellier 24/09/09 : Fix concurent acces error +// protected Set<TopiaContextImplementor> childContext = MapBackedSet.decorate(new WeakHashMap<TopiaContextImplementor, Object>()); + protected Set<TopiaContextImplementor> childContext = SynchronizedSet.decorate(MapBackedSet.decorate(new WeakHashMap<TopiaContextImplementor, Object>())); /** key: service name; value: service instance */ protected Map<String, TopiaService> services = null; /** */ Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java 2009-09-24 12:55:10 UTC (rev 1645) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java 2009-09-24 13:09:10 UTC (rev 1646) @@ -526,8 +526,13 @@ TopiaContextImplementor result = null; // on copie la liste pour evite les acces concurrent (parcours durant la // creation d'un sous context) - ArrayList<TopiaContextImplementor> children = new ArrayList(parent.getChildContext()); - for (TopiaContextImplementor context : children) { + + Set<TopiaContextImplementor> contextChilds = new HashSet(parent.getChildContext()); + for (TopiaContextImplementor context : contextChilds) { + +// by sletellier 24/09/09 : Fix concurent acces error +// ArrayList<TopiaContextImplementor> children = new ArrayList(parent.getChildContext()); +// for (TopiaContextImplementor context : children) { try { if (context.getHibernate() == hibernate) { result = context;
participants (1)
-
sletellier@users.nuiton.org