diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/PersistencyResources.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/PersistencyResources.java index 6549701bdcdd0951de97611e59e79c153d121ecb..ae3a93615fd0ad7a9ce6c36f8c96c3ab50f6ece9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/PersistencyResources.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/PersistencyResources.java @@ -19,22 +19,33 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess; import org.hibernate.SessionFactory; import ch.systemsx.cisd.dbmigration.DatabaseConfigurationContext; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.IDynamicPropertyEvaluationScheduler; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IFullTextIndexUpdateScheduler; /** * Resources needed to create DAO's. - * - * @author Franz-Josef Elmer + * + * @author Franz-Josef Elmer */ public final class PersistencyResources { private final DatabaseConfigurationContext contextOrNull; + private final SessionFactory sessionFactoryOrNull; + private final IFullTextIndexUpdateScheduler indexUpdateScheduler; + + private final IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler; + public PersistencyResources(DatabaseConfigurationContext contextOrNull, - SessionFactory sessionFactoryOrNull) + SessionFactory sessionFactoryOrNull, + IFullTextIndexUpdateScheduler indexUpdateScheduler, + IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler) { this.contextOrNull = contextOrNull; this.sessionFactoryOrNull = sessionFactoryOrNull; + this.indexUpdateScheduler = indexUpdateScheduler; + this.dynamicPropertyEvaluationScheduler = dynamicPropertyEvaluationScheduler; } public final DatabaseConfigurationContext getContextOrNull() @@ -46,5 +57,15 @@ public final class PersistencyResources { return sessionFactoryOrNull; } - + + public IFullTextIndexUpdateScheduler getIndexUpdateScheduler() + { + return indexUpdateScheduler; + } + + public IDynamicPropertyEvaluationScheduler getDynamicPropertyEvaluationScheduler() + { + return dynamicPropertyEvaluationScheduler; + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractGenericEntityWithPropertiesDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractGenericEntityWithPropertiesDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..5f1fc5d3575657ac829ab74ea0ea61a01fddf58a --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractGenericEntityWithPropertiesDAO.java @@ -0,0 +1,88 @@ +/* + * Copyright 2007 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.server.dataaccess.db; + +import java.util.Collections; +import java.util.List; + +import org.springframework.dao.DataAccessException; + +import ch.systemsx.cisd.openbis.generic.server.dataaccess.PersistencyResources; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.IDynamicPropertyEvaluationScheduler; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IFullTextIndexUpdateScheduler; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IndexUpdateOperation; +import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder; + +/** + * Abstract super class of DAOs for entities that are indexed and contain properties. + * + * @author Piotr Buczek + */ +public abstract class AbstractGenericEntityWithPropertiesDAO<T extends IEntityInformationWithPropertiesHolder> + extends AbstractGenericEntityDAO<T> +{ + private final PersistencyResources persistencyResources; + + protected AbstractGenericEntityWithPropertiesDAO( + final PersistencyResources persistencyResources, + final DatabaseInstancePE databaseInstance, final Class<T> entityClass) + { + super(persistencyResources.getSessionFactoryOrNull(), databaseInstance, entityClass); + this.persistencyResources = persistencyResources; + } + + protected IFullTextIndexUpdateScheduler getIndexUpdateScheduler() + { + return persistencyResources.getIndexUpdateScheduler(); + } + + protected IDynamicPropertyEvaluationScheduler getDynamicPropertyEvaluatorScheduler() + { + return persistencyResources.getDynamicPropertyEvaluationScheduler(); + } + + @Override + public void delete(T entity) throws DataAccessException + { + super.delete(entity); + scheduleRemoveFromFullTextIndex(Collections.singletonList(entity.getId())); + } + + protected void scheduleRemoveFromFullTextIndex(List<Long> ids) + { + getIndexUpdateScheduler().scheduleUpdate(IndexUpdateOperation.remove(getClass(), ids)); + } + + protected void scheduleFullTextIndexUpdate(List<Long> ids) + { + getIndexUpdateScheduler().scheduleUpdate(IndexUpdateOperation.reindex(getClass(), ids)); + } + + protected void scheduleDynamicPropertiesEvaluation(List<T> entities) + { + scheduleDynamicPropertiesEvaluation(getDynamicPropertyEvaluatorScheduler(), + getEntityClass(), entities); + } + + protected void scheduleDynamicPropertiesEvaluationByIds(List<Long> ids) + { + scheduleDynamicPropertiesEvaluationForIds(getDynamicPropertyEvaluatorScheduler(), + getEntityClass(), ids); + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AuthorizationDAOFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AuthorizationDAOFactory.java index 8ae73c48d67b97f4dfbdf2afa4ef608f01c4ce46..133e68470cf07d9b46ea547a40965f00a5ad2720 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AuthorizationDAOFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AuthorizationDAOFactory.java @@ -90,22 +90,18 @@ public class AuthorizationDAOFactory implements IAuthorizationDAOFactory final IFullTextIndexUpdateScheduler indexUpdateScheduler, final IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler) { - persistencyResources = new PersistencyResources(context, sessionFactory); + persistencyResources = + new PersistencyResources(context, sessionFactory, indexUpdateScheduler, + dynamicPropertyEvaluationScheduler); databaseInstancesDAO = new DatabaseInstanceDAO(sessionFactory); homeDatabaseInstance = getDatabaseInstanceId(context.getDatabaseInstance()); personDAO = new PersonDAO(sessionFactory, homeDatabaseInstance); groupDAO = new GroupDAO(sessionFactory, homeDatabaseInstance); roleAssignmentDAO = new RoleAssignmentDAO(sessionFactory, homeDatabaseInstance); - externalDataDAO = - new ExternalDataDAO(sessionFactory, homeDatabaseInstance, - dynamicPropertyEvaluationScheduler); - experimentDAO = - new ExperimentDAO(sessionFactory, homeDatabaseInstance, - dynamicPropertyEvaluationScheduler); + externalDataDAO = new ExternalDataDAO(persistencyResources, homeDatabaseInstance); + experimentDAO = new ExperimentDAO(persistencyResources, homeDatabaseInstance); projectDAO = new ProjectDAO(sessionFactory, homeDatabaseInstance); - sampleDAO = - new SampleDAO(sessionFactory, homeDatabaseInstance, indexUpdateScheduler, - dynamicPropertyEvaluationScheduler); + sampleDAO = new SampleDAO(persistencyResources, homeDatabaseInstance); gridCustomFilterDAO = new GridCustomFilterDAO(sessionFactory, homeDatabaseInstance); gridCustomColumnDAO = new GridCustomColumnDAO(sessionFactory, homeDatabaseInstance); queryDAO = new QueryDAO(sessionFactory, homeDatabaseInstance); 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 b8908166c16f67e4cf81f83bb6410659688cc566..acd3b911185afac4578f77822cebee33b3400ab0 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 @@ -117,9 +117,7 @@ public final class DAOFactory extends AuthorizationDAOFactory implements IDAOFac dataSetTypeDAO = new DataSetTypeDAO(sessionFactory, databaseInstance); fileFormatTypeDAO = new FileFormatTypeDAO(sessionFactory, databaseInstance); locatorTypeDAO = new LocatorTypeDAO(sessionFactory, databaseInstance); - materialDAO = - new MaterialDAO(sessionFactory, databaseInstance, - dynamicPropertyEvaluationScheduler); + materialDAO = new MaterialDAO(getPersistencyResources(), databaseInstance); codeSequenceDAO = new CodeSequenceDAO(sessionFactory, databaseInstance); dataStoreDAO = new DataStoreDAO(sessionFactory, databaseInstance); permIdDAO = new PermIdDAO(sessionFactory, databaseInstance); @@ -133,8 +131,7 @@ public final class DAOFactory extends AuthorizationDAOFactory implements IDAOFac new EntityTypeDAO(entityKind, sessionFactory, databaseInstance); entityTypeDAOs.put(entityKind, dao); entityPropertyTypeDAOs.put(entityKind, new EntityPropertyTypeDAO(entityKind, - sessionFactory, databaseInstance, fullTextIndexUpdateScheduler, - dynamicPropertyEvaluationScheduler)); + getPersistencyResources(), databaseInstance)); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAO.java index e57cff59eae6759fc2d89e22361089401ac00530..e42c2a642044538e4f1230ea34c1d414c7277b3f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/EntityPropertyTypeDAO.java @@ -24,7 +24,6 @@ import java.util.Map; import org.apache.log4j.Logger; import org.hibernate.Criteria; import org.hibernate.SQLQuery; -import org.hibernate.SessionFactory; import org.hibernate.StatelessSession; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.ProjectionList; @@ -36,6 +35,7 @@ import org.springframework.orm.hibernate3.HibernateTemplate; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IEntityPropertyTypeDAO; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.PersistencyResources; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.IDynamicPropertyEvaluationScheduler; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IFullTextIndexUpdateScheduler; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IndexUpdateOperation; @@ -73,15 +73,15 @@ final class EntityPropertyTypeDAO extends AbstractDAO implements IEntityProperty private final IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler; - public EntityPropertyTypeDAO(final EntityKind entityKind, final SessionFactory sessionFactory, - final DatabaseInstancePE databaseInstance, - final IFullTextIndexUpdateScheduler fullTextIndexUpdateScheduler, - final IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler) + public EntityPropertyTypeDAO(final EntityKind entityKind, + final PersistencyResources persistencyResources, + final DatabaseInstancePE databaseInstance) { - super(sessionFactory, databaseInstance); + super(persistencyResources.getSessionFactoryOrNull(), databaseInstance); this.entityKind = entityKind; - this.fullTextIndexUpdateScheduler = fullTextIndexUpdateScheduler; - this.dynamicPropertyEvaluationScheduler = dynamicPropertyEvaluationScheduler; + this.fullTextIndexUpdateScheduler = persistencyResources.getIndexUpdateScheduler(); + this.dynamicPropertyEvaluationScheduler = + persistencyResources.getDynamicPropertyEvaluationScheduler(); } private final <T extends EntityTypePropertyTypePE> Class<T> getEntityTypePropertyTypeAssignmentClass() @@ -294,9 +294,8 @@ final class EntityPropertyTypeDAO extends AbstractDAO implements IEntityProperty operationLog.info(String.format("Created %s %s properties : %s", entityIds.size(), entityKind.getLabel(), property)); } - // index will not be updated automatically by Hibernate because we use native SQL queries - scheduleFullTextIndexUpdate(entityIds); + scheduleFullTextIndexUpdate(entityIds); if (property.getEntityTypePropertyType().isDynamic()) { scheduleDynamicPropertiesEvaluation(entityIds); @@ -439,8 +438,6 @@ final class EntityPropertyTypeDAO extends AbstractDAO implements IEntityProperty template.clear(); template.delete(assignment); - // index will not be updated automatically by Hibernate - // because we use bulk update and don't touch entities scheduleFullTextIndexUpdate(entityIds); if (operationLog.isInfoEnabled()) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAO.java index a176873400ad3814a0745c1fc13264849967e59a..fa14e1ed2edc471c7ec85f333892f2453a3a35da 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAO.java @@ -24,7 +24,6 @@ import java.util.Set; import org.apache.log4j.Logger; import org.hibernate.Criteria; import org.hibernate.FetchMode; -import org.hibernate.SessionFactory; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Restrictions; import org.springframework.dao.DataAccessException; @@ -34,7 +33,7 @@ import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.utilities.MethodUtils; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExperimentDAO; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.IDynamicPropertyEvaluationScheduler; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.PersistencyResources; import ch.systemsx.cisd.openbis.generic.shared.dto.CodeConverter; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; @@ -47,20 +46,17 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE; * * @author Izabela Adamczyk */ -public class ExperimentDAO extends AbstractGenericEntityDAO<ExperimentPE> implements IExperimentDAO +public class ExperimentDAO extends AbstractGenericEntityWithPropertiesDAO<ExperimentPE> implements + IExperimentDAO { private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, ExperimentDAO.class); - private final IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler; - - protected ExperimentDAO(final SessionFactory sessionFactory, - final DatabaseInstancePE databaseInstance, - final IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler) + protected ExperimentDAO(final PersistencyResources persistencyResources, + final DatabaseInstancePE databaseInstance) { - super(sessionFactory, databaseInstance, ExperimentPE.class); - this.dynamicPropertyEvaluationScheduler = dynamicPropertyEvaluationScheduler; + super(persistencyResources, databaseInstance, ExperimentPE.class); } public List<ExperimentPE> listExperimentsWithProperties(final ProjectPE projectOrNull) @@ -235,10 +231,4 @@ public class ExperimentDAO extends AbstractGenericEntityDAO<ExperimentPE> implem return list; } - private void scheduleDynamicPropertiesEvaluation(List<ExperimentPE> experiments) - { - scheduleDynamicPropertiesEvaluation(dynamicPropertyEvaluationScheduler, ExperimentPE.class, - experiments); - } - } 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 9c488f1f11f45467b2db955d254967c32ec25507..c12f158902c93a5f1620af6e288802404d8235c4 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 @@ -30,7 +30,6 @@ import org.hibernate.FetchMode; import org.hibernate.HibernateException; import org.hibernate.LockMode; import org.hibernate.Session; -import org.hibernate.SessionFactory; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Projections; @@ -45,7 +44,7 @@ import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.utilities.MethodUtils; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExternalDataDAO; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.IDynamicPropertyEvaluationScheduler; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.PersistencyResources; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus; @@ -64,8 +63,8 @@ import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; * * @author Christian Ribeaud */ -final class ExternalDataDAO extends AbstractGenericEntityDAO<ExternalDataPE> implements - IExternalDataDAO +final class ExternalDataDAO extends AbstractGenericEntityWithPropertiesDAO<ExternalDataPE> + implements IExternalDataDAO { private final static Class<ExternalDataPE> ENTITY_CLASS = ExternalDataPE.class; @@ -76,13 +75,10 @@ final class ExternalDataDAO extends AbstractGenericEntityDAO<ExternalDataPE> imp private static final String TABLE_NAME = ENTITY_CLASS.getSimpleName(); - private final IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler; - - ExternalDataDAO(final SessionFactory sessionFactory, final DatabaseInstancePE databaseInstance, - final IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler) + ExternalDataDAO(final PersistencyResources persistencyResources, + final DatabaseInstancePE databaseInstance) { - super(sessionFactory, databaseInstance, ENTITY_CLASS); - this.dynamicPropertyEvaluationScheduler = dynamicPropertyEvaluationScheduler; + super(persistencyResources, databaseInstance, ENTITY_CLASS); } // @@ -474,10 +470,4 @@ final class ExternalDataDAO extends AbstractGenericEntityDAO<ExternalDataPE> imp scheduleDynamicPropertiesEvaluation(Arrays.asList(entity)); } - private void scheduleDynamicPropertiesEvaluation(List<ExternalDataPE> externalData) - { - scheduleDynamicPropertiesEvaluation(dynamicPropertyEvaluationScheduler, - ExternalDataPE.class, externalData); - } - } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MaterialDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MaterialDAO.java index 5911fdd93f10d87562dc7914d2b5e86e6d8c2372..eab465d52259d6890477c129d56b4590ee9a4376 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MaterialDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MaterialDAO.java @@ -21,7 +21,6 @@ import java.util.List; import org.apache.log4j.Logger; import org.hibernate.Criteria; import org.hibernate.FetchMode; -import org.hibernate.SessionFactory; import org.hibernate.criterion.Restrictions; import org.springframework.dao.DataAccessException; import org.springframework.orm.hibernate3.HibernateTemplate; @@ -29,7 +28,7 @@ import org.springframework.orm.hibernate3.HibernateTemplate; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IMaterialDAO; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.IDynamicPropertyEvaluationScheduler; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.PersistencyResources; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.CodeConverter; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; @@ -41,7 +40,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialTypePE; * * @author Izabela Adamczyk */ -public class MaterialDAO extends AbstractGenericEntityDAO<MaterialPE> implements IMaterialDAO +public class MaterialDAO extends AbstractGenericEntityWithPropertiesDAO<MaterialPE> implements + IMaterialDAO { private static final Class<MaterialPE> ENTITY_CLASS = MaterialPE.class; @@ -49,15 +49,10 @@ public class MaterialDAO extends AbstractGenericEntityDAO<MaterialPE> implements private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, MaterialDAO.class); - private final IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler; - - protected MaterialDAO(final SessionFactory sessionFactory, - final DatabaseInstancePE databaseInstance, - final IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler) - + protected MaterialDAO(final PersistencyResources persistencyResources, + final DatabaseInstancePE databaseInstance) { - super(sessionFactory, databaseInstance, ENTITY_CLASS); - this.dynamicPropertyEvaluationScheduler = dynamicPropertyEvaluationScheduler; + super(persistencyResources, databaseInstance, ENTITY_CLASS); } public List<MaterialPE> listMaterialsWithProperties(final MaterialTypePE materialType) @@ -135,9 +130,4 @@ public class MaterialDAO extends AbstractGenericEntityDAO<MaterialPE> implements return material; } - private void scheduleDynamicPropertiesEvaluation(List<MaterialPE> materials) - { - scheduleDynamicPropertiesEvaluation(dynamicPropertyEvaluationScheduler, MaterialPE.class, - materials); - } } 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 35b83e406292df81cf0d688a1b5d748d5a8ef48a..3bd5fd9dc4757cd88e86911e7aa3038798ccaa4b 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 @@ -27,7 +27,6 @@ import org.hibernate.Criteria; import org.hibernate.FetchMode; import org.hibernate.SQLQuery; import org.hibernate.Session; -import org.hibernate.SessionFactory; import org.hibernate.StatelessSession; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.DetachedCriteria; @@ -41,9 +40,7 @@ import org.springframework.orm.hibernate3.HibernateTemplate; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.IDynamicPropertyEvaluationScheduler; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IFullTextIndexUpdateScheduler; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IndexUpdateOperation; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.PersistencyResources; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.dto.CodeConverter; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; @@ -62,7 +59,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; * * @author Tomasz Pylak */ -public class SampleDAO extends AbstractGenericEntityDAO<SamplePE> implements ISampleDAO +public class SampleDAO extends AbstractGenericEntityWithPropertiesDAO<SamplePE> implements + ISampleDAO { private final static Class<SamplePE> ENTITY_CLASS = SamplePE.class; @@ -73,17 +71,10 @@ public class SampleDAO extends AbstractGenericEntityDAO<SamplePE> implements ISa private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, SampleDAO.class); - private final IFullTextIndexUpdateScheduler fullTextIndexUpdateScheduler; - - private final IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler; - - SampleDAO(final SessionFactory sessionFactory, final DatabaseInstancePE databaseInstance, - final IFullTextIndexUpdateScheduler fullTextIndexUpdateScheduler, - final IDynamicPropertyEvaluationScheduler dynamicPropertyEvaluationScheduler) + SampleDAO(final PersistencyResources persistencyResources, + final DatabaseInstancePE databaseInstance) { - super(sessionFactory, databaseInstance, SamplePE.class); - this.fullTextIndexUpdateScheduler = fullTextIndexUpdateScheduler; - this.dynamicPropertyEvaluationScheduler = dynamicPropertyEvaluationScheduler; + super(persistencyResources, databaseInstance, SamplePE.class); } // LockSampleModificationsInterceptor automatically obtains lock @@ -403,21 +394,8 @@ public class SampleDAO extends AbstractGenericEntityDAO<SamplePE> implements ISa } }); - // index will not be updated automatically by Hibernate because we use native SQL queries - scheduleRemoveFromFullTextIndex(sampleIds); - } - - private void scheduleRemoveFromFullTextIndex(List<TechId> sampleIds) - { List<Long> ids = transformTechIds2Longs(sampleIds); - fullTextIndexUpdateScheduler.scheduleUpdate(IndexUpdateOperation - .remove(SamplePE.class, ids)); - } - - private void scheduleDynamicPropertiesEvaluation(List<SamplePE> samples) - { - scheduleDynamicPropertiesEvaluation(dynamicPropertyEvaluationScheduler, SamplePE.class, - samples); + scheduleRemoveFromFullTextIndex(ids); } @SuppressWarnings("unchecked")