From c40aa7b3e4af1e91aa60a0eaa66e499140fb25fd Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Wed, 24 Mar 2010 08:38:16 +0000
Subject: [PATCH] [LMS-1453] improved workaround

SVN: 15247
---
 .../openbis/generic/server/business/bo/ExternalDataBO.java  | 2 ++
 .../cisd/openbis/generic/server/dataaccess/IGenericDAO.java | 2 ++
 .../server/dataaccess/db/AbstractGenericEntityDAO.java      | 6 ++++++
 .../generic/server/business/bo/ExternalDataBOTest.java      | 1 +
 4 files changed, 11 insertions(+)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataBO.java
index ea7cb64615b..275d609a057 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataBO.java
@@ -657,6 +657,8 @@ public class ExternalDataBO extends AbstractExternalDataBusinessObject implement
 
     public void updateStatus(String dataSetCode, DataSetArchivizationStatus newStatus)
     {
+        // WORKAROUND: clearing session solved StaleObjectStateException problem
+        getExternalDataDAO().clearSession();
         loadByCode(dataSetCode, false, true);
         externalData.setStatus(newStatus);
         validateAndSave();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IGenericDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IGenericDAO.java
index a61e24f477e..5127f4c70b8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IGenericDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IGenericDAO.java
@@ -84,4 +84,6 @@ public interface IGenericDAO<T extends IIdHolder>
      */
     public List<T> listAllEntities() throws DataAccessException;
 
+    public void clearSession();
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractGenericEntityDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractGenericEntityDAO.java
index 285e7fa794b..74c19b0ee30 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractGenericEntityDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractGenericEntityDAO.java
@@ -161,4 +161,10 @@ public abstract class AbstractGenericEntityDAO<T extends IIdHolder> extends Abst
     {
         return cast(getHibernateTemplate().loadAll(getEntityClass()));
     }
+
+    public void clearSession()
+    {
+        getHibernateTemplate().clear();
+    }
+
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataBOTest.java
index 4692f599194..8dc6b0c3ff5 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExternalDataBOTest.java
@@ -294,6 +294,7 @@ public class ExternalDataBOTest extends AbstractBOTest
         context.checking(new Expectations()
             {
                 {
+                    one(externalDataDAO).clearSession();
                     one(externalDataDAO).tryToFindFullDataSetByCode(dataSet.getCode(), false, true);
                     will(returnValue(dataSet));
                     one(externalDataDAO).validateAndSaveUpdatedEntity(dataSet);
-- 
GitLab