From 5c95ae370af906c94aeb57ab3f597e4806ac103f Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Wed, 13 Jul 2022 19:57:50 +0200
Subject: [PATCH] SSDM-11550 : Personal Access Tokens (PAT) - hopefully fix a
 problem where PAT DAO does not have access to Hibernate transaction due to a
 missing transactional proxy; the proxy for DAO cannot be created as
 initialization of the transactional beans is not yet finished at that point;
 for some reason this problem only occurs when openBIS is run from an
 installer (works fine when run from IDE); as transactional beans require DAO
 factory and DAO factory references PAT DAO hopefully separating PAT DAO from
 DAO factory should help (DAO factory gets created first, then transaction
 beans, then PAT DAO)

---
 .../pat/CreatePersonalAccessTokenExecutor.java   | 10 ++++------
 .../pat/DeletePersonalAccessTokenExecutor.java   |  6 +++++-
 ...GetPersonalAccessTokensOperationExecutor.java |  8 ++++----
 .../pat/MapPersonalAccessTokenByIdExecutor.java  |  8 +-------
 .../pat/SearchPersonalAccessTokenExecutor.java   |  6 +++++-
 .../pat/UpdatePersonalAccessTokenExecutor.java   | 10 ++++------
 .../business/bo/AbstractBusinessObject.java      |  6 ------
 .../generic/server/dataaccess/IDAOFactory.java   |  2 --
 .../generic/server/dataaccess/db/DAOFactory.java | 10 ----------
 .../pat/PersonalAccessTokenConverterFromDAO.java |  5 ++---
 ...ccessTokenOpenBisSessionManagerDecorator.java | 16 ++++++++++------
 11 files changed, 35 insertions(+), 52 deletions(-)

diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/CreatePersonalAccessTokenExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/CreatePersonalAccessTokenExecutor.java
index d59618e2eed..92dc632261c 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/CreatePersonalAccessTokenExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/CreatePersonalAccessTokenExecutor.java
@@ -22,7 +22,6 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -32,11 +31,10 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.id.IPersonId;
 import ch.ethz.sis.openbis.generic.asapi.v3.exceptions.ObjectNotFoundException;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.person.IMapPersonByIdExecutor;
-import ch.systemsx.cisd.openbis.generic.shared.dto.PersonalAccessToken;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
-import ch.systemsx.cisd.common.security.TokenGenerator;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonalAccessTokenDAO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.PersonalAccessToken;
 
 /**
  * @author pkupczyk
@@ -46,7 +44,7 @@ public class CreatePersonalAccessTokenExecutor implements ICreatePersonalAccessT
 {
 
     @Autowired
-    private IDAOFactory daoFactory;
+    private IPersonalAccessTokenDAO personalAccessTokenDAO;
 
     @Autowired
     private IPersonalAccessTokenAuthorizationExecutor authorizationExecutor;
@@ -97,7 +95,7 @@ public class CreatePersonalAccessTokenExecutor implements ICreatePersonalAccessT
 
             authorizationExecutor.canCreate(context, token);
 
-            PersonalAccessToken createdToken = daoFactory.getPersonalAccessTokenDAO().createToken(token);
+            PersonalAccessToken createdToken = personalAccessTokenDAO.createToken(token);
 
             ids.add(new PersonalAccessTokenPermId(createdToken.getHash()));
         }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/DeletePersonalAccessTokenExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/DeletePersonalAccessTokenExecutor.java
index 41e833b8dc9..ad2058e6070 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/DeletePersonalAccessTokenExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/DeletePersonalAccessTokenExecutor.java
@@ -27,6 +27,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.pat.delete.PersonalAccessTokenDe
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.pat.id.IPersonalAccessTokenId;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractDeleteEntityExecutor;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonalAccessTokenDAO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonalAccessToken;
 
 /**
@@ -44,6 +45,9 @@ public class DeletePersonalAccessTokenExecutor
     @Autowired
     private IPersonalAccessTokenAuthorizationExecutor authorizationExecutor;
 
+    @Autowired
+    private IPersonalAccessTokenDAO personalAccessTokenDAO;
+
     @Override
     protected Map<IPersonalAccessTokenId, PersonalAccessToken> map(IOperationContext context, List<? extends IPersonalAccessTokenId> entityIds,
             PersonalAccessTokenDeletionOptions deletionOptions)
@@ -68,7 +72,7 @@ public class DeletePersonalAccessTokenExecutor
     {
         for (PersonalAccessToken token : tokens)
         {
-            daoFactory.getPersonalAccessTokenDAO().deleteToken(token.getHash());
+            personalAccessTokenDAO.deleteToken(token.getHash());
         }
 
         return null;
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/GetPersonalAccessTokensOperationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/GetPersonalAccessTokensOperationExecutor.java
index 134462f5aee..24bff1479ff 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/GetPersonalAccessTokensOperationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/GetPersonalAccessTokensOperationExecutor.java
@@ -35,9 +35,9 @@ import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.OperationExecutor;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.translator.TranslationContext;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.translator.pat.IPersonalAccessTokenTranslator;
-import ch.systemsx.cisd.openbis.generic.shared.dto.PersonalAccessToken;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonalAccessTokenDAO;
+import ch.systemsx.cisd.openbis.generic.shared.dto.PersonalAccessToken;
 
 /**
  * @author pkupczyk
@@ -52,7 +52,7 @@ public class GetPersonalAccessTokensOperationExecutor
     private IPersonalAccessTokenAuthorizationExecutor authorizationExecutor;
 
     @Autowired
-    private IDAOFactory daoFactory;
+    private IPersonalAccessTokenDAO personalAccessTokenDAO;
 
     @Autowired
     private IPersonalAccessTokenTranslator translator;
@@ -85,7 +85,7 @@ public class GetPersonalAccessTokensOperationExecutor
         {
             if (id instanceof PersonalAccessTokenPermId)
             {
-                PersonalAccessToken pat = daoFactory.getPersonalAccessTokenDAO().getTokenByHash(((PersonalAccessTokenPermId) id).getPermId());
+                PersonalAccessToken pat = personalAccessTokenDAO.getTokenByHash(((PersonalAccessTokenPermId) id).getPermId());
                 if (pat != null)
                 {
                     pats.add(pat);
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/MapPersonalAccessTokenByIdExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/MapPersonalAccessTokenByIdExecutor.java
index 4b64a7dba8e..aeec4dcace0 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/MapPersonalAccessTokenByIdExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/MapPersonalAccessTokenByIdExecutor.java
@@ -28,7 +28,6 @@ import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.IListObjectById
 import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.pat.ListPersonalAccessTokenByPermId;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonalAccessTokenDAO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonalAccessToken;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 
 /**
  * @author pkupczyk
@@ -38,6 +37,7 @@ public class MapPersonalAccessTokenByIdExecutor extends AbstractMapObjectByIdExe
         implements IMapPersonalAccessTokenByIdExecutor
 {
 
+    @Autowired
     private IPersonalAccessTokenDAO personalAccessTokenDAO;
 
     @Autowired
@@ -55,10 +55,4 @@ public class MapPersonalAccessTokenByIdExecutor extends AbstractMapObjectByIdExe
         listers.add(new ListPersonalAccessTokenByPermId(personalAccessTokenDAO));
     }
 
-    @Autowired
-    private void setDAOFactory(IDAOFactory daoFactory)
-    {
-        personalAccessTokenDAO = daoFactory.getPersonalAccessTokenDAO();
-    }
-
 }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/SearchPersonalAccessTokenExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/SearchPersonalAccessTokenExecutor.java
index f56848c9a88..03a25dd45e2 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/SearchPersonalAccessTokenExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/SearchPersonalAccessTokenExecutor.java
@@ -29,6 +29,7 @@ import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.AbstractSearchObjectManuallyExecutor;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.Matcher;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.SimpleFieldMatcher;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonalAccessTokenDAO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonalAccessToken;
 
 /**
@@ -42,6 +43,9 @@ public class SearchPersonalAccessTokenExecutor extends AbstractSearchObjectManua
     @Autowired
     private IPersonalAccessTokenAuthorizationExecutor authorizationExecutor;
 
+    @Autowired
+    private IPersonalAccessTokenDAO personalAccessTokenDAO;
+
     @Override
     public List<PersonalAccessToken> search(IOperationContext context, PersonalAccessTokenSearchCriteria criteria)
     {
@@ -52,7 +56,7 @@ public class SearchPersonalAccessTokenExecutor extends AbstractSearchObjectManua
     @Override
     protected List<PersonalAccessToken> listAll()
     {
-        return daoFactory.getPersonalAccessTokenDAO().listTokens();
+        return personalAccessTokenDAO.listTokens();
     }
 
     @Override
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/UpdatePersonalAccessTokenExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/UpdatePersonalAccessTokenExecutor.java
index 4d7d1b93f62..dfa37598c44 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/UpdatePersonalAccessTokenExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/pat/UpdatePersonalAccessTokenExecutor.java
@@ -22,7 +22,6 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -31,11 +30,10 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.pat.id.PersonalAccessTokenPermId
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.pat.update.PersonalAccessTokenUpdate;
 import ch.ethz.sis.openbis.generic.asapi.v3.exceptions.ObjectNotFoundException;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
-import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.roleassignment.RoleAssignmentUtils;
-import ch.systemsx.cisd.openbis.generic.shared.dto.PersonalAccessToken;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonalAccessTokenDAO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.PersonalAccessToken;
 
 /**
  * @author pkupczyk
@@ -45,7 +43,7 @@ public class UpdatePersonalAccessTokenExecutor implements IUpdatePersonalAccessT
 {
 
     @Autowired
-    private IDAOFactory daoFactory;
+    private IPersonalAccessTokenDAO personalAccessTokenDAO;
 
     @Autowired
     private IPersonalAccessTokenAuthorizationExecutor authorizationExecutor;
@@ -88,7 +86,7 @@ public class UpdatePersonalAccessTokenExecutor implements IUpdatePersonalAccessT
             token.setModifierId(person.getUserId());
             token.setModificationDate(now);
 
-            daoFactory.getPersonalAccessTokenDAO().updateToken(token);
+            personalAccessTokenDAO.updateToken(token);
 
             ids.add(new PersonalAccessTokenPermId(token.getHash()));
         }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java
index 86715cf23d4..f3601602bbe 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java
@@ -68,7 +68,6 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IMaterialDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IMetaprojectDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IOperationExecutionDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonDAO;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonalAccessTokenDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPostRegistrationDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IProjectDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPropertyTypeDAO;
@@ -623,11 +622,6 @@ abstract class AbstractBusinessObject implements IDAOFactory
         return daoFactory.getSemanticAnnotationDAO();
     }
 
-    @Override public IPersonalAccessTokenDAO getPersonalAccessTokenDAO()
-    {
-        return daoFactory.getPersonalAccessTokenDAO();
-    }
-
     @Override
     public final IOperationExecutionDAO getOperationExecutionDAO()
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDAOFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDAOFactory.java
index 93b7a32b35d..410aa0f1991 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDAOFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDAOFactory.java
@@ -134,6 +134,4 @@ public interface IDAOFactory extends IAuthorizationDAOFactory
      */
     public ISemanticAnnotationDAO getSemanticAnnotationDAO();
 
-    public IPersonalAccessTokenDAO getPersonalAccessTokenDAO();
-
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DAOFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DAOFactory.java
index a1ad2cdf8a9..7fdd6b0fdc3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DAOFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DAOFactory.java
@@ -31,7 +31,6 @@ import javax.annotation.Resource;
 import org.apache.log4j.Logger;
 import org.hibernate.SessionFactory;
 import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
 
 import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
 import ch.systemsx.cisd.common.logging.LogCategory;
@@ -59,7 +58,6 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IHibernateSearchDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.ILocatorTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IMaterialDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IOperationExecutionDAO;
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonalAccessTokenDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPostRegistrationDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPropertyTypeDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleTypeDAO;
@@ -147,9 +145,6 @@ public final class DAOFactory extends AuthorizationDAOFactory implements IDAOFac
 
     private final ISemanticAnnotationDAO semanticAnnotationDAO;
 
-    @Autowired
-    private IPersonalAccessTokenDAO personalAccessTokenDAO;
-
     private DatabaseConfigurationContext context;
 
     public static final boolean USE_NEW_SQL_ENGINE = true;
@@ -372,11 +367,6 @@ public final class DAOFactory extends AuthorizationDAOFactory implements IDAOFac
         return semanticAnnotationDAO;
     }
 
-    @Override public IPersonalAccessTokenDAO getPersonalAccessTokenDAO()
-    {
-        return personalAccessTokenDAO;
-    }
-
     private static String projectConstraintFunction =
             "CREATE FUNCTION check_project_is_defined_for_experiment_level_samples() " +
                     "  RETURNS trigger AS " +
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/pat/PersonalAccessTokenConverterFromDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/pat/PersonalAccessTokenConverterFromDAO.java
index ac77cad7e83..470eaccba98 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/pat/PersonalAccessTokenConverterFromDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/pat/PersonalAccessTokenConverterFromDAO.java
@@ -5,7 +5,6 @@ import java.util.Date;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonalAccessTokenDAO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonalAccessToken;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonalAccessTokenSession;
@@ -20,7 +19,7 @@ public class PersonalAccessTokenConverterFromDAO extends AbstractPersonalAccessT
     private IPersonalAccessTokenConfig config;
 
     @Autowired
-    private IDAOFactory daoFactory;
+    private IPersonalAccessTokenDAO personalAccessTokenDAO;
 
     @Override protected IPersonalAccessTokenConfig getConfig()
     {
@@ -56,6 +55,6 @@ public class PersonalAccessTokenConverterFromDAO extends AbstractPersonalAccessT
 
     public IPersonalAccessTokenDAO getPersonalAccessTokenDAO()
     {
-        return daoFactory.getPersonalAccessTokenDAO();
+        return personalAccessTokenDAO;
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/pat/PersonalAccessTokenOpenBisSessionManagerDecorator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/pat/PersonalAccessTokenOpenBisSessionManagerDecorator.java
index aa30cb742ad..59ed7dbaefb 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/pat/PersonalAccessTokenOpenBisSessionManagerDecorator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/pat/PersonalAccessTokenOpenBisSessionManagerDecorator.java
@@ -23,6 +23,7 @@ import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.openbis.generic.server.ComponentNames;
 import ch.systemsx.cisd.openbis.generic.server.OpenBisSessionManager;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPersonalAccessTokenDAO;
 import ch.systemsx.cisd.openbis.generic.shared.IOpenBisSessionManager;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonalAccessTokenSession;
@@ -41,6 +42,9 @@ public class PersonalAccessTokenOpenBisSessionManagerDecorator implements IOpenB
     @Autowired
     private IDAOFactory daoFactory;
 
+    @Autowired
+    private IPersonalAccessTokenDAO personalAccessTokenDAO;
+
     @Autowired
     private ISessionFactory<Session> sessionFactory;
 
@@ -111,7 +115,7 @@ public class PersonalAccessTokenOpenBisSessionManagerDecorator implements IOpenB
             return sessionManager.isSessionActive(sessionToken);
         }
 
-        PersonalAccessTokenSession patSession = daoFactory.getPersonalAccessTokenDAO().getSessionByHash(sessionToken);
+        PersonalAccessTokenSession patSession = personalAccessTokenDAO.getSessionByHash(sessionToken);
 
         if (patSession == null)
         {
@@ -131,7 +135,7 @@ public class PersonalAccessTokenOpenBisSessionManagerDecorator implements IOpenB
             sessionManager.expireSession(sessionToken);
         }
 
-        PersonalAccessTokenSession patSession = daoFactory.getPersonalAccessTokenDAO().getSessionByHash(sessionToken);
+        PersonalAccessTokenSession patSession = personalAccessTokenDAO.getSessionByHash(sessionToken);
 
         if (patSession == null)
         {
@@ -150,7 +154,7 @@ public class PersonalAccessTokenOpenBisSessionManagerDecorator implements IOpenB
             sessionManager.closeSession(sessionToken);
         }
 
-        PersonalAccessTokenSession patSession = daoFactory.getPersonalAccessTokenDAO().getSessionByHash(sessionToken);
+        PersonalAccessTokenSession patSession = personalAccessTokenDAO.getSessionByHash(sessionToken);
 
         if (patSession == null)
         {
@@ -182,7 +186,7 @@ public class PersonalAccessTokenOpenBisSessionManagerDecorator implements IOpenB
             return sessionManager.getSession(sessionToken);
         }
 
-        PersonalAccessTokenSession patSession = daoFactory.getPersonalAccessTokenDAO().getSessionByHash(sessionToken);
+        PersonalAccessTokenSession patSession = personalAccessTokenDAO.getSessionByHash(sessionToken);
 
         if (patSession == null)
         {
@@ -211,7 +215,7 @@ public class PersonalAccessTokenOpenBisSessionManagerDecorator implements IOpenB
             return sessionManager.tryGetSession(sessionToken);
         }
 
-        PersonalAccessTokenSession patSession = daoFactory.getPersonalAccessTokenDAO().getSessionByHash(sessionToken);
+        PersonalAccessTokenSession patSession = personalAccessTokenDAO.getSessionByHash(sessionToken);
 
         if (patSession == null)
         {
@@ -243,7 +247,7 @@ public class PersonalAccessTokenOpenBisSessionManagerDecorator implements IOpenB
 
         synchronized (sessions)
         {
-            for (PersonalAccessTokenSession patSession : daoFactory.getPersonalAccessTokenDAO().listSessions())
+            for (PersonalAccessTokenSession patSession : personalAccessTokenDAO.listSessions())
             {
                 if (isSessionActive(patSession.getHash()))
                 {
-- 
GitLab