From eb1a897d6a9fe0a17d4c1fdb7bc671052224f21c Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Thu, 25 Nov 2010 10:55:52 +0000 Subject: [PATCH] [LMS-1902] improved speed of listing - moved creation of searchlinks to tracking server; rubberstamp SVN: 18899 --- .../generic/server/TrackingServer.java | 15 +++++++++++- .../bo/samplelister/ISampleListingQuery.java | 2 +- .../bo/samplelister/SampleListingWorker.java | 24 +++++++++++-------- .../shared/basic/SearchlinkUtilities.java | 8 +++---- .../generic/shared/basic/dto/Sample.java | 2 ++ 5 files changed, 35 insertions(+), 16 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/TrackingServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/TrackingServer.java index ce18b126ce6..b1cd9b867fa 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/TrackingServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/TrackingServer.java @@ -28,6 +28,8 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.datasetlister.IDatase import ch.systemsx.cisd.openbis.generic.server.business.bo.samplelister.ISampleLister; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.shared.ITrackingServer; +import ch.systemsx.cisd.openbis.generic.shared.basic.SearchlinkUtilities; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListOrSearchSampleCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; @@ -75,7 +77,18 @@ public final class TrackingServer extends AbstractServer<ITrackingServer> implem final ISampleLister sampleLister = businessObjectFactory.createSampleLister(session); final ListOrSearchSampleCriteria listerCriteria = new ListOrSearchSampleCriteria(criteria); listerCriteria.setEnrichDependentSamplesWithProperties(true); - return sampleLister.list(listerCriteria); + List<Sample> result = sampleLister.list(listerCriteria); + fillSearchLinks(result, session.getBaseIndexURL()); + return result; + } + + private void fillSearchLinks(List<Sample> samples, String baseIndexURL) + { + for (Sample sample : samples) + { + sample.setPermlink(SearchlinkUtilities.createSearchlinkURL(baseIndexURL, + EntityKind.SAMPLE, sample.getCode())); + } } public List<ExternalData> listDataSets(String sessionToken, TrackingDataSetCriteria criteria) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java index 643c957bc8e..d66a5f1096a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java @@ -183,7 +183,7 @@ public interface ISampleListingQuery extends TransactionQuery, IPropertyListingQ */ @Select(sql = SELECT_FROM_SAMPLES_S + " join groups g on s.grou_id=g.id " + " where g.dbin_id=?{1} and s.saty_id=?{2} " - + " order by s.code", fetchSize = FETCH_SIZE) + + " order by s.code", fetchSize = FETCH_SIZE, rubberstamp = true) public DataIterator<SampleRecord> getAllGroupSamplesForSampleType(long dbInstanceId, long sampleTypeId); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java index aee5bafd961..2055dfcf46c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java @@ -41,7 +41,6 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.common.entity.Experim import ch.systemsx.cisd.openbis.generic.server.business.bo.common.entity.SecondaryEntityDAO; import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant; import ch.systemsx.cisd.openbis.generic.shared.basic.PermlinkUtilities; -import ch.systemsx.cisd.openbis.generic.shared.basic.SearchlinkUtilities; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; @@ -255,6 +254,17 @@ final class SampleListingWorker extends AbstractLister return sampleList; } + private static void log(StopWatch watch, String message) + { + if (operationLog.isDebugEnabled()) + { + watch.stop(); + operationLog.debug(String.format("%s took %s s", message, watch.toString())); + watch.reset(); + watch.start(); + } + } + // // Private worker methods // @@ -271,12 +281,7 @@ final class SampleListingWorker extends AbstractLister return sampleMap.get(id); } }); - if (operationLog.isDebugEnabled()) - { - watch.stop(); - operationLog.debug(String.format("Enrichment with properties took %s s", - watch.toString())); - } + log(watch, "Enrichment with properties"); } } @@ -511,7 +516,6 @@ final class SampleListingWorker extends AbstractLister private void retrievePrimaryBasicSamples(final Iterable<SampleRecord> sampleIteratorOrNull) { assert sampleList != null; - retrieveBasicSamples(sampleIteratorOrNull, sampleList); } @@ -528,6 +532,7 @@ final class SampleListingWorker extends AbstractLister return; } final boolean primarySample = (sampleListOrNull != null); + for (SampleRecord row : sampleIteratorOrNull) { final Sample sampleOrNull = tryCreateSample(row, primarySample); @@ -550,6 +555,7 @@ final class SampleListingWorker extends AbstractLister sample.setCode(IdentifierHelper.convertCode(row.code, null)); sample.setSubCode(IdentifierHelper.convertSubCode(row.code)); sample.setSampleType(sampleTypes.get(row.saty_id)); + // set group or instance if (row.grou_id == null) { @@ -581,8 +587,6 @@ final class SampleListingWorker extends AbstractLister sample.setProperties(new ArrayList<IEntityProperty>()); sample.setPermlink(PermlinkUtilities.createPermlinkURL(baseIndexURL, EntityKind.SAMPLE, row.perm_id)); - sample.setSearchlink(SearchlinkUtilities.createSearchlinkURL(baseIndexURL, - EntityKind.SAMPLE, row.code)); sample.setRegistrationDate(row.registration_timestamp); sample.setModificationDate(row.modification_timestamp); if (row.inva_id != null) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/SearchlinkUtilities.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/SearchlinkUtilities.java index 294e542ee41..d4d18579bde 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/SearchlinkUtilities.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/SearchlinkUtilities.java @@ -31,14 +31,14 @@ public class SearchlinkUtilities public static final String SEARCH_ACTION = "SEARCH"; public final static String createSearchlinkURL(final String baseIndexURL, - final EntityKind entityKind, final String searchString) + final EntityKind entityKind, final String code) { URLMethodWithParameters ulrWithParameters = new URLMethodWithParameters(baseIndexURL); ulrWithParameters.startHistoryToken(); ulrWithParameters.addParameter(BasicConstant.LOCATOR_ACTION_PARAMETER, SEARCH_ACTION); - ulrWithParameters.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, entityKind - .name()); - ulrWithParameters.addParameter(CODE_PARAMETER_KEY, searchString); + ulrWithParameters.addParameter(PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY, + entityKind.name()); + ulrWithParameters.addParameter(CODE_PARAMETER_KEY, code); return ulrWithParameters.toString(); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java index 87657c2a147..0206e2bbf4a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Sample.java @@ -96,6 +96,8 @@ public final class Sample extends CodeWithRegistration<Sample> implements IInval this.permlink = permlink; } + // WORKAROUND for performance reasons search links are not filled in SampleLister + // (they are only used in TrackingServer they are filled just before samples are being returned) public String getSearchlink() { return searchlink; -- GitLab