From 8275e6a1c91ac13244c245e38347bc03efb64026 Mon Sep 17 00:00:00 2001 From: tpylak <tpylak> Date: Mon, 10 May 2010 09:03:17 +0000 Subject: [PATCH] LMS-1531 yeastx: create DAOs (and connections) first time when they are needed SVN: 15860 --- .../cisd/yeastx/db/AbstractDatasetLoader.java | 35 +++++++++++++++-- .../cisd/yeastx/eicml/EICML2Database.java | 24 ++++-------- .../cisd/yeastx/etl/MLArchiverTask.java | 39 +++++++++++++------ .../cisd/yeastx/fiaml/FIAML2Database.java | 26 +++++-------- .../cisd/yeastx/mzxml/MzXml2Database.java | 25 ++++-------- .../cisd/yeastx/quant/QuantML2Database.java | 21 +++------- .../cisd/yeastx/mzxml/MzXml2DatabaseTest.java | 2 +- 7 files changed, 90 insertions(+), 82 deletions(-) diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/AbstractDatasetLoader.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/AbstractDatasetLoader.java index a360f400414..da604dc960e 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/AbstractDatasetLoader.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/AbstractDatasetLoader.java @@ -16,6 +16,8 @@ package ch.systemsx.cisd.yeastx.db; +import javax.sql.DataSource; + import org.springframework.dao.DataAccessException; import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; @@ -26,13 +28,40 @@ import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; * * @author Tomasz Pylak */ -abstract public class AbstractDatasetLoader implements IDatasetLoader +abstract public class AbstractDatasetLoader<T extends IGenericDAO> implements IDatasetLoader { - abstract protected IGenericDAO getDao(); - // if false transaction has to be commited or rollbacked before the next dataset will be created protected boolean isTransactionCompleted = true; + private final DataSource dataSource; + + private final Class<T> queryClass; + + private T daoOrNull; // created when used for the first time + + protected AbstractDatasetLoader(DataSource dataSource, Class<T> queryClass) + { + this.dataSource = dataSource; + this.queryClass = queryClass; + } + + // for tests only + protected AbstractDatasetLoader(DataSource dataSource, Class<T> queryClass, T dao) + { + this.dataSource = dataSource; + this.queryClass = queryClass; + this.daoOrNull = dao; + } + + protected final T getDao() + { + if (daoOrNull == null) + { + this.daoOrNull = DBUtils.getQuery(dataSource, queryClass); + } + return daoOrNull; + } + /** * Cannot be called twice in a row if {@link #commit()} or {@link #rollback()} has not been * called in between. diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICML2Database.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICML2Database.java index 4856dfc6072..86441c7123f 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICML2Database.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICML2Database.java @@ -23,9 +23,7 @@ import java.util.List; import javax.sql.DataSource; import ch.systemsx.cisd.yeastx.db.AbstractDatasetLoader; -import ch.systemsx.cisd.yeastx.db.DBUtils; import ch.systemsx.cisd.yeastx.db.DMDataSetDTO; -import ch.systemsx.cisd.yeastx.db.IGenericDAO; import ch.systemsx.cisd.yeastx.eicml.EICMLParser.IChromatogramObserver; import ch.systemsx.cisd.yeastx.eicml.EICMLParser.IMSRunObserver; @@ -34,7 +32,7 @@ import ch.systemsx.cisd.yeastx.eicml.EICMLParser.IMSRunObserver; * * @author Bernd Rinn */ -public class EICML2Database extends AbstractDatasetLoader +public class EICML2Database extends AbstractDatasetLoader<IEICMSRunDAO> { private final static int CHROMATOGRAM_BATCH_SIZE = 100; @@ -49,11 +47,9 @@ public class EICML2Database extends AbstractDatasetLoader } } - private final IEICMSRunDAO dao; - - public EICML2Database(DataSource datasource) + public EICML2Database(DataSource dataSource) { - this.dao = DBUtils.getQuery(datasource, IEICMSRunDAO.class); + super(dataSource, IEICMSRunDAO.class); } /** @@ -73,30 +69,26 @@ public class EICML2Database extends AbstractDatasetLoader { // add chromatograms from the last run to the database before setting the // new run id - addChromatograms(dao, eicMLId[0], chromatograms, 1); + addChromatograms(getDao(), eicMLId[0], chromatograms, 1); run.setExperimentId(dataSet.getExperimentId()); run.setSampleId(dataSet.getSampleId()); run.setDataSetId(dataSet.getId()); - eicMLId[0] = dao.addMSRun(run); + eicMLId[0] = getDao().addMSRun(run); } }, new IChromatogramObserver() { public void observe(ChromatogramDTO chromatogram) { chromatograms.add(chromatogram); - addChromatograms(dao, eicMLId[0], chromatograms, CHROMATOGRAM_BATCH_SIZE); + addChromatograms(getDao(), eicMLId[0], chromatograms, + CHROMATOGRAM_BATCH_SIZE); } }); - addChromatograms(dao, eicMLId[0], chromatograms, 1); + addChromatograms(getDao(), eicMLId[0], chromatograms, 1); } catch (Throwable th) { rollbackAndRethrow(th); } } - @Override - protected IGenericDAO getDao() - { - return dao; - } } diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/MLArchiverTask.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/MLArchiverTask.java index 94ab1252646..7a0e3a8c3f4 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/MLArchiverTask.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/MLArchiverTask.java @@ -94,19 +94,9 @@ public class MLArchiverTask extends AbstractArchiverProcessingPlugin Sample sample = null; if (dataset.getSampleCode() != null) { - // NOTE: we assume that it is not a shared sample - SampleIdentifier sampleIdentifier = - new SampleIdentifier(new SpaceIdentifier(dataset.getDatabaseInstanceCode(), - dataset.getGroupCode()), dataset.getSampleCode()); - sample = - ServiceProvider.getOpenBISService().tryGetSampleWithExperiment( - sampleIdentifier); + sample = fetchSample(dataset); } - ExperimentIdentifier experimentIdentifier = - new ExperimentIdentifier(dataset.getDatabaseInstanceCode(), dataset - .getGroupCode(), dataset.getProjectCode(), dataset.getExperimentCode()); - Experiment experiment = - ServiceProvider.getOpenBISService().tryToGetExperiment(experimentIdentifier); + Experiment experiment = getOrFetchExperiment(dataset, sample); databaseUploader = new ML2DatabaseUploader(properties); databaseUploader.upload(getDataFile(dataset), sample, experiment, dataset .getDatasetCode()); @@ -121,6 +111,31 @@ public class MLArchiverTask extends AbstractArchiverProcessingPlugin } } + private Sample fetchSample(DatasetDescription dataset) + { + Sample sample; + // NOTE: we assume that it is not a shared sample + SampleIdentifier sampleIdentifier = + new SampleIdentifier(new SpaceIdentifier(dataset.getDatabaseInstanceCode(), dataset + .getGroupCode()), dataset.getSampleCode()); + sample = ServiceProvider.getOpenBISService().tryGetSampleWithExperiment(sampleIdentifier); + return sample; + } + + private Experiment getOrFetchExperiment(DatasetDescription dataset, Sample sample) + { + if (sample != null && sample.getExperiment() != null) + { + return sample.getExperiment(); + } + ExperimentIdentifier experimentIdentifier = + new ExperimentIdentifier(dataset.getDatabaseInstanceCode(), dataset.getGroupCode(), + dataset.getProjectCode(), dataset.getExperimentCode()); + Experiment experiment = + ServiceProvider.getOpenBISService().tryToGetExperiment(experimentIdentifier); + return experiment; + } + private File getDataFile(DatasetDescription dataset) { File datasetDir = getDataSubDir(dataset); diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/FIAML2Database.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/FIAML2Database.java index d39c187757b..79246af8086 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/FIAML2Database.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/FIAML2Database.java @@ -23,9 +23,7 @@ import java.util.Iterator; import javax.sql.DataSource; import ch.systemsx.cisd.yeastx.db.AbstractDatasetLoader; -import ch.systemsx.cisd.yeastx.db.DBUtils; import ch.systemsx.cisd.yeastx.db.DMDataSetDTO; -import ch.systemsx.cisd.yeastx.db.IGenericDAO; import ch.systemsx.cisd.yeastx.fiaml.FIAMLParser.IMSRunObserver; /** @@ -33,7 +31,7 @@ import ch.systemsx.cisd.yeastx.fiaml.FIAMLParser.IMSRunObserver; * * @author Bernd Rinn */ -public class FIAML2Database extends AbstractDatasetLoader +public class FIAML2Database extends AbstractDatasetLoader<IFIAMSRunDAO> { private final static int PROFILE_CHUNK_SIZE = 250; @@ -73,11 +71,9 @@ public class FIAML2Database extends AbstractDatasetLoader }; } - private final IFIAMSRunDAO dao; - - public FIAML2Database(DataSource datasource) + public FIAML2Database(DataSource dataSource) { - this.dao = DBUtils.getQuery(datasource, IFIAMSRunDAO.class); + super(dataSource, IFIAMSRunDAO.class); } /** @@ -95,10 +91,12 @@ public class FIAML2Database extends AbstractDatasetLoader run.setExperimentId(dataSet.getExperimentId()); run.setSampleId(dataSet.getSampleId()); run.setDataSetId(dataSet.getId()); - final long fiaMsRunId = dao.addMSRun(run); - dao.addProfiles(fiaMsRunId, profileChunk(runData)); - dao.addCentroids(fiaMsRunId, runData.getCentroidMz(), runData - .getCentroidIntensities(), runData.getCentroidCorrelations()); + final long fiaMsRunId = getDao().addMSRun(run); + getDao().addProfiles(fiaMsRunId, profileChunk(runData)); + getDao() + .addCentroids(fiaMsRunId, runData.getCentroidMz(), + runData.getCentroidIntensities(), + runData.getCentroidCorrelations()); } }); } catch (Throwable th) @@ -106,10 +104,4 @@ public class FIAML2Database extends AbstractDatasetLoader rollbackAndRethrow(th); } } - - @Override - protected IGenericDAO getDao() - { - return dao; - } } diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2Database.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2Database.java index 876d18475c1..773f3870a3f 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2Database.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2Database.java @@ -27,9 +27,7 @@ import ch.rinn.restrictions.Private; import ch.systemsx.cisd.common.exceptions.NotImplementedException; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.yeastx.db.AbstractDatasetLoader; -import ch.systemsx.cisd.yeastx.db.DBUtils; import ch.systemsx.cisd.yeastx.db.DMDataSetDTO; -import ch.systemsx.cisd.yeastx.db.IGenericDAO; import ch.systemsx.cisd.yeastx.mzxml.dto.MzPrecursorDTO; import ch.systemsx.cisd.yeastx.mzxml.dto.MzRunDTO; import ch.systemsx.cisd.yeastx.mzxml.dto.MzScanDTO; @@ -41,19 +39,18 @@ import ch.systemsx.cisd.yeastx.utils.JaxbXmlParser; * * @author Tomasz Pylak */ -public class MzXml2Database extends AbstractDatasetLoader +public class MzXml2Database extends AbstractDatasetLoader<IMzXmlDAO> { - private final IMzXmlDAO dao; - public MzXml2Database(DataSource datasource) { - this(DBUtils.getQuery(datasource, IMzXmlDAO.class)); + super(datasource, IMzXmlDAO.class); } @Private - MzXml2Database(IMzXmlDAO dao) + // for tests only + MzXml2Database(DataSource dataSource, IMzXmlDAO dao) { - this.dao = dao; + super(dataSource, IMzXmlDAO.class, dao); } /** @@ -80,7 +77,7 @@ public class MzXml2Database extends AbstractDatasetLoader @Private void uploadRun(MzRunDTO run, DMDataSetDTO dataSet) { - long runId = dao.addRun(dataSet, run.getInstrument()); + long runId = getDao().addRun(dataSet, run.getInstrument()); List<MzScanDTO> scans = run.getScans(); for (MzScanDTO scan : scans) { @@ -111,7 +108,7 @@ public class MzXml2Database extends AbstractDatasetLoader scan.getNumber(), precursors.size()); } } - long scanId = dao.addScan(runId, scan, precursor1, precursor2); + long scanId = getDao().addScan(runId, scan, precursor1, precursor2); uploadPeaks(scanId, scan.getPeaks()); } @@ -119,7 +116,7 @@ public class MzXml2Database extends AbstractDatasetLoader { Iterable<Float> mzArray = createEverySecondIterator(peaks, 0); Iterable<Float> intensityArray = createEverySecondIterator(peaks, 1); - dao.addPeaks(scanId, mzArray, intensityArray); + getDao().addPeaks(scanId, mzArray, intensityArray); } // iterates on every second element of an array starting from the specified initial index @@ -154,10 +151,4 @@ public class MzXml2Database extends AbstractDatasetLoader } }; } - - @Override - protected IGenericDAO getDao() - { - return dao; - } } diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/quant/QuantML2Database.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/quant/QuantML2Database.java index 4f314090303..fda48a38ce4 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/quant/QuantML2Database.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/quant/QuantML2Database.java @@ -23,9 +23,7 @@ import java.util.List; import javax.sql.DataSource; import ch.systemsx.cisd.yeastx.db.AbstractDatasetLoader; -import ch.systemsx.cisd.yeastx.db.DBUtils; import ch.systemsx.cisd.yeastx.db.DMDataSetDTO; -import ch.systemsx.cisd.yeastx.db.IGenericDAO; import ch.systemsx.cisd.yeastx.quant.dto.ConcentrationCompounds; import ch.systemsx.cisd.yeastx.quant.dto.MSConcentrationDTO; import ch.systemsx.cisd.yeastx.quant.dto.MSQuantificationDTO; @@ -37,13 +35,11 @@ import ch.systemsx.cisd.yeastx.utils.JaxbXmlParser; * * @author Tomasz Pylak */ -public class QuantML2Database extends AbstractDatasetLoader +public class QuantML2Database extends AbstractDatasetLoader<IQuantMSDAO> { - private final IQuantMSDAO dao; - public QuantML2Database(DataSource datasource) { - this.dao = DBUtils.getQuery(datasource, IQuantMSDAO.class); + super(datasource, IQuantMSDAO.class); } /** @@ -68,7 +64,7 @@ public class QuantML2Database extends AbstractDatasetLoader for (MSQuantificationDTO quantification : quantifications.getQuantifications()) { long quantificationId = - dao.addQuantification(dataSet.getExperimentId(), dataSet.getId(), + getDao().addQuantification(dataSet.getExperimentId(), dataSet.getId(), quantification); uploadConcentrations(quantificationId, quantification.getConcentrations()); } @@ -78,20 +74,13 @@ public class QuantML2Database extends AbstractDatasetLoader { for (MSConcentrationDTO concentration : concentrations) { - long concentrationId = dao.addConcentration(quantificationId, concentration); + long concentrationId = getDao().addConcentration(quantificationId, concentration); uploadCompoundIds(concentrationId, concentration.getCompounds()); } } private void uploadCompoundIds(long concentrationId, ConcentrationCompounds compounds) { - dao.addCompoundIds(concentrationId, compounds.getCompoundIds()); + getDao().addCompoundIds(concentrationId, compounds.getCompoundIds()); } - - @Override - protected IGenericDAO getDao() - { - return dao; - } - } diff --git a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2DatabaseTest.java b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2DatabaseTest.java index e95c556e8ce..6837a6cf9c7 100644 --- a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2DatabaseTest.java +++ b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/mzxml/MzXml2DatabaseTest.java @@ -110,7 +110,7 @@ public class MzXml2DatabaseTest } }); - new MzXml2Database(dao).uploadRun(run, dataSet); + new MzXml2Database(null, dao).uploadRun(run, dataSet); context.assertIsSatisfied(); } } -- GitLab