Skip to content
Snippets Groups Projects
Commit 88c75d3a authored by buczekp's avatar buczekp
Browse files

[LMS-1772] use cache of samples (reduces time spend on loading parents for...

[LMS-1772] use cache of samples (reduces time spend on loading parents for 1000 samples with the same parent from 12s to <100ms)

SVN: 18642
parent 5ed257bd
No related branches found
No related tags found
No related merge requests found
...@@ -214,7 +214,6 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi ...@@ -214,7 +214,6 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
final Set<SamplePE> parentPEs = new HashSet<SamplePE>(); final Set<SamplePE> parentPEs = new HashSet<SamplePE>();
for (SampleIdentifier si : parentIdentifiers) for (SampleIdentifier si : parentIdentifiers)
{ {
// TODO 2010-11-10, Piotr Buczek: use cache
SamplePE parent = getSampleByIdentifier(si); SamplePE parent = getSampleByIdentifier(si);
parentPEs.add(parent); parentPEs.add(parent);
} }
......
...@@ -16,6 +16,9 @@ ...@@ -16,6 +16,9 @@
package ch.systemsx.cisd.openbis.generic.server.business.bo; package ch.systemsx.cisd.openbis.generic.server.business.bo;
import java.util.HashMap;
import java.util.Map;
import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.exceptions.UserFailureException;
import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleOwner; import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleOwner;
import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleOwnerFinder; import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleOwnerFinder;
...@@ -35,6 +38,9 @@ import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; ...@@ -35,6 +38,9 @@ import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
*/ */
abstract class AbstractSampleIdentifierBusinessObject extends AbstractBusinessObject abstract class AbstractSampleIdentifierBusinessObject extends AbstractBusinessObject
{ {
private final Map<SampleIdentifier, SamplePE> sampleByIdentifierCache =
new HashMap<SampleIdentifier, SamplePE>();
private final SampleOwnerFinder sampleOwnerFinder; private final SampleOwnerFinder sampleOwnerFinder;
AbstractSampleIdentifierBusinessObject(final IDAOFactory daoFactory, final Session session) AbstractSampleIdentifierBusinessObject(final IDAOFactory daoFactory, final Session session)
...@@ -70,27 +76,35 @@ abstract class AbstractSampleIdentifierBusinessObject extends AbstractBusinessOb ...@@ -70,27 +76,35 @@ abstract class AbstractSampleIdentifierBusinessObject extends AbstractBusinessOb
protected SamplePE tryToGetSampleByIdentifier(final SampleIdentifier sampleIdentifier) protected SamplePE tryToGetSampleByIdentifier(final SampleIdentifier sampleIdentifier)
{ {
// TODO 2010-11-10, Piotr Buczek: use cache
assert sampleIdentifier != null : "Sample identifier unspecified."; assert sampleIdentifier != null : "Sample identifier unspecified.";
final SampleOwner sampleOwner = sampleOwnerFinder.figureSampleOwner(sampleIdentifier);
final String sampleCode = sampleIdentifier.getSampleCode(); final SamplePE cachedResult = sampleByIdentifierCache.get(sampleIdentifier);
final ISampleDAO sampleDAO = getSampleDAO(); if (cachedResult != null)
final SamplePE sample;
if (sampleOwner.isDatabaseInstanceLevel())
{ {
sample = return cachedResult;
sampleDAO.tryFindByCodeAndDatabaseInstance(sampleCode,
sampleOwner.tryGetDatabaseInstance());
} else } else
{ {
assert sampleOwner.isGroupLevel() : "Must be of space level."; final SampleOwner sampleOwner = sampleOwnerFinder.figureSampleOwner(sampleIdentifier);
sample = sampleDAO.tryFindByCodeAndGroup(sampleCode, sampleOwner.tryGetGroup()); final String sampleCode = sampleIdentifier.getSampleCode();
final ISampleDAO sampleDAO = getSampleDAO();
final SamplePE result;
if (sampleOwner.isDatabaseInstanceLevel())
{
result =
sampleDAO.tryFindByCodeAndDatabaseInstance(sampleCode,
sampleOwner.tryGetDatabaseInstance());
} else
{
assert sampleOwner.isGroupLevel() : "Must be of space level.";
result = sampleDAO.tryFindByCodeAndGroup(sampleCode, sampleOwner.tryGetGroup());
}
if (result != null)
{
HibernateUtils.initialize(result.getExperiment());
sampleByIdentifierCache.put(sampleIdentifier, result);
}
return result;
} }
if (sample != null)
{
HibernateUtils.initialize(sample.getExperiment());
}
return sample;
} }
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment