From 00535a98cd39da9d9a22949f25102eee86446a92 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Tue, 19 Oct 2010 09:39:54 +0000
Subject: [PATCH] [LMS-1818] evaluate dynamic properties after batch update of
 data sets

SVN: 18344
---
 .../generic/server/business/bo/ExternalDataTable.java  |  6 +++---
 .../generic/server/dataaccess/db/ExternalDataDAO.java  | 10 ++++++++--
 .../generic/server/dataaccess/db/SampleDAO.java        |  1 -
 3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java
index 6102ad7d147..4e5d58e35a1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataTable.java
@@ -25,8 +25,8 @@ import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
@@ -59,6 +59,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EventPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.EventPE.EntityType;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EventType;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
@@ -67,7 +68,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
-import ch.systemsx.cisd.openbis.generic.shared.dto.EventPE.EntityType;
 import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.translator.ExternalDataTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
@@ -663,9 +663,9 @@ public final class ExternalDataTable extends AbstractExternalDataBusinessObject
         assert externalData != null : "Undefined external data.";
         try
         {
+            checkMandatoryProperties();
             IExternalDataDAO externalDataDAO = getExternalDataDAO();
             externalDataDAO.updateDataSets(externalData);
-            checkMandatoryProperties();
         } catch (final DataAccessException ex)
         {
             throwException(ex, String.format("One of data sets"));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExternalDataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExternalDataDAO.java
index c6f2a64e279..ef76fd0b318 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExternalDataDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExternalDataDAO.java
@@ -454,12 +454,18 @@ final class ExternalDataDAO extends AbstractGenericEntityDAO<ExternalDataPE> imp
         {
             operationLog.info(String.format("UPDATE: %d data sets.", externalData.size()));
         }
+
+        flushWithSqlExceptionHandling(getHibernateTemplate());
+        scheduleDynamicPropertiesEvaluation(externalData);
+
+        // if session is not cleared registration of many samples slows down after each batch
+        hibernateTemplate.clear();
     }
 
-    private void scheduleDynamicPropertiesEvaluation(List<ExternalDataPE> data)
+    private void scheduleDynamicPropertiesEvaluation(List<ExternalDataPE> externalData)
     {
         scheduleDynamicPropertiesEvaluation(dynamicPropertyEvaluationScheduler,
-                ExternalDataPE.class, data);
+                ExternalDataPE.class, externalData);
     }
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java
index d121ea791d7..35b83e40629 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java
@@ -115,7 +115,6 @@ public class SampleDAO extends AbstractGenericEntityDAO<SamplePE> implements ISa
                 new ClassValidator<SamplePE>(SamplePE.class), true);
 
         flushWithSqlExceptionHandling(hibernateTemplate);
-        scheduleDynamicPropertiesEvaluation(Arrays.asList(sample));
     }
 
     public final List<SamplePE> listSamplesByGeneratedFrom(final SamplePE sample)
-- 
GitLab