Author: tchemit Date: 2012-04-10 19:06:05 +0200 (Tue, 10 Apr 2012) New Revision: 514 Url: http://forge.codelutin.com/repositories/revision/echobase/514 Log: try to find out what is the export db problem... Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java 2012-04-10 17:05:13 UTC (rev 513) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java 2012-04-10 17:06:05 UTC (rev 514) @@ -26,6 +26,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.csv.EntityExportContext; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; @@ -43,8 +44,11 @@ import org.nuiton.util.csv.ExportModel; import java.io.File; +import java.util.ArrayDeque; import java.util.Collection; +import java.util.Deque; import java.util.Map; +import java.util.Set; /** * entity visitor to export data to csv files. @@ -61,6 +65,10 @@ public static final TimeLog TIME_LOG = new TimeLog(ReplicateEntityVisitor.class); + protected Set<String> ids = Sets.newHashSetWithExpectedSize(2000000000); + + protected Deque<String> stack = new ArrayDeque<String>(); + public static ReplicateEntityVisitor createVisitor(ExportService service, MetaFilenameAware[] entityMetas, Multimap<EchoBaseEntityEnum, MetaFilenameAware> associations, @@ -127,9 +135,20 @@ @Override public void start(TopiaEntity entity) { + String topiaId = entity.getTopiaId(); try { + stack.push(topiaId); + boolean added = ids.add(topiaId); + if (!added) { + + // Never do me! can not accept to treat twice an object + throw new EchoBaseTechnicalException( + "Wanted to treat twice entity " + topiaId + + "\n Current stack " + stack.toString()); + + } if (log.isDebugEnabled()) { - log.debug("Starts export of entity " + entity.getTopiaId()); + log.debug("Starts export of entity " + topiaId); } EntityExportContext entityExporter = entityExporters.get(entity.getClass()); @@ -139,13 +158,14 @@ "Could not export entity " + entity, e); } finally { if (log.isDebugEnabled()) { - log.debug("Ends export of entity " + entity.getTopiaId()); + log.debug("Ends export of entity " + topiaId); } } } @Override public void end(TopiaEntity entity) { + stack.pop(); try { if (log.isDebugEnabled()) { log.debug("Starts export of association of entity " +