From b93c02a3363dc81ccbbe1abb981adeaf34bfb8da Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 8 Dec 2009 14:52:07 +0000
Subject: [PATCH] LMS-1290 revert changes made since revision 13672

SVN: 13747
---
 .../phosphonetx/server/PhosphoNetXServer.java | 45 +++------
 .../server/business/DataSetProteinTable.java  | 46 ++++------
 .../server/business/ErrorModel.java           | 26 ++----
 .../server/business/ProteinDetailsBO.java     | 85 +++++++----------
 .../server/business/ProteinInfoTable.java     | 92 +++++--------------
 .../server/business/ProteinSequenceTable.java | 47 ++++------
 .../server/business/ProteinSummaryTable.java  | 48 +++++-----
 .../server/business/SampleTable.java          | 36 +++-----
 .../dataaccess/IPhosphoNetXDAOFactory.java    | 16 +---
 .../dataaccess/db/PhosphoNetXDAOFactory.java  | 50 ++--------
 .../java/phosphonetx-applicationContext.xml   |  1 -
 .../source/java/service.properties            |  4 -
 .../server/PhosphoNetXServerTest.java         |  3 +-
 .../server/business/ErrorModelTest.java       |  3 +-
 .../server/business/ProteinInfoTableTest.java |  5 +-
 .../business/ProteinSummaryTableTest.java     |  3 +-
 16 files changed, 161 insertions(+), 349 deletions(-)

diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServer.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServer.java
index 7fb1a68590c..677886ca746 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServer.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServer.java
@@ -108,27 +108,21 @@ public class PhosphoNetXServer extends AbstractServer<IPhosphoNetXServer> implem
     {
         Session session = getSession(sessionToken);
         String experimentPermID = getExperimentPermIDFor(experimentID);
-        final IProteinQueryDAO dao = specificDAOFactory.getProteinQueryDAOFromPool();
+        IProteinQueryDAO dao = specificDAOFactory.getProteinQueryDAO();
+        DataSet<String> samplePermIDs =
+                dao.listAbundanceRelatedSamplePermIDsByExperiment(experimentPermID);
         try
         {
-            DataSet<String> samplePermIDs =
-                    dao.listAbundanceRelatedSamplePermIDsByExperiment(experimentPermID);
-            try
+            IAbundanceColumnDefinitionTable table =
+                    specificBOFactory.createAbundanceColumnDefinitionTable(session);
+            for (String samplePermID : samplePermIDs)
             {
-                IAbundanceColumnDefinitionTable table =
-                        specificBOFactory.createAbundanceColumnDefinitionTable(session);
-                for (String samplePermID : samplePermIDs)
-                {
-                    table.add(samplePermID);
-                }
-                return table.getSortedAndAggregatedDefinitions(treatmentTypeOrNull);
-            } finally
-            {
-                samplePermIDs.close();
+                table.add(samplePermID);
             }
+            return table.getSortedAndAggregatedDefinitions(treatmentTypeOrNull);
         } finally
         {
-            specificDAOFactory.returnProteinQueryDAOToPool(dao);
+            samplePermIDs.close();
         }
     }
 
@@ -158,20 +152,13 @@ public class PhosphoNetXServer extends AbstractServer<IPhosphoNetXServer> implem
             TechId proteinReferenceID) throws UserFailureException
     {
         Session session = getSession(sessionToken);
+        IProteinQueryDAO proteinQueryDAO = specificDAOFactory.getProteinQueryDAO();
         ProteinByExperiment proteinByExperiment = new ProteinByExperiment();
-        final IProteinQueryDAO proteinQueryDAO = specificDAOFactory.getProteinQueryDAOFromPool();
-        final ProteinReference proteinReference;
-        try
-        {
-            proteinReference = proteinQueryDAO.tryToGetProteinReference(proteinReferenceID.getId());
-        } finally
-        {
-            specificDAOFactory.returnProteinQueryDAOToPool(proteinQueryDAO);
-        }
+        ProteinReference proteinReference =
+                proteinQueryDAO.tryToGetProteinReference(proteinReferenceID.getId());
         if (proteinReference == null)
         {
-            throw new UserFailureException("No protein reference found for ID: "
-                    + proteinReferenceID);
+            throw new UserFailureException("No protein reference found for ID: " + proteinReferenceID);
         }
         AccessionNumberBuilder builder =
                 new AccessionNumberBuilder(proteinReference.getAccessionNumber());
@@ -199,10 +186,8 @@ public class PhosphoNetXServer extends AbstractServer<IPhosphoNetXServer> implem
         final Session session = getSession(sessionToken);
         IProteinSequenceTable sequenceTable = specificBOFactory.createProteinSequenceTable(session);
         sequenceTable.loadByReference(proteinReferenceID);
-        IDataSetProteinTable dataSetProteinTable =
-                specificBOFactory.createDataSetProteinTable(session);
-        dataSetProteinTable.load(getExperimentPermIDFor(experimentId), proteinReferenceID,
-                sequenceTable);
+        IDataSetProteinTable dataSetProteinTable = specificBOFactory.createDataSetProteinTable(session);
+        dataSetProteinTable.load(getExperimentPermIDFor(experimentId), proteinReferenceID, sequenceTable);
         return dataSetProteinTable.getDataSetProteins();
     }
 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/DataSetProteinTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/DataSetProteinTable.java
index 995562e8b33..de3f83c4db3 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/DataSetProteinTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/DataSetProteinTable.java
@@ -50,37 +50,25 @@ class DataSetProteinTable extends AbstractBusinessObject implements IDataSetProt
     public void load(String experimentPermID, TechId proteinReferenceID,
             IProteinSequenceTable sequenceTable)
     {
-        final ErrorModel errorModel = new ErrorModel(getSpecificDAOFactory());
-        final IProteinQueryDAO proteinQueryDAO =
-                getSpecificDAOFactory().getProteinQueryDAOFromPool();
-        try
+        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO();
+        ErrorModel errorModel = new ErrorModel(getSpecificDAOFactory());
+        DataSet<IdentifiedProtein> proteins =
+                proteinQueryDAO.listProteinsByProteinReferenceAndExperiment(experimentPermID,
+                        proteinReferenceID.getId());
+        dataSetProteins = new ArrayList<DataSetProtein>();
+        for (IdentifiedProtein protein : proteins)
         {
-            final DataSet<IdentifiedProtein> proteins =
-                    proteinQueryDAO.listProteinsByProteinReferenceAndExperiment(experimentPermID,
-                            proteinReferenceID.getId());
-            try
-            {
-                dataSetProteins = new ArrayList<DataSetProtein>();
-                for (IdentifiedProtein protein : proteins)
-                {
-                    errorModel.setFalseDiscoveryRateFor(protein);
-                    DataSetProtein dataSetProtein = new DataSetProtein();
-                    dataSetProtein.setDataSetID(new TechId(protein.getDataSetID()));
-                    dataSetProtein.setDataSetPermID(protein.getDataSetPermID());
-                    dataSetProtein.setFalseDiscoveryRate(protein.getFalseDiscoveryRate());
-                    dataSetProtein.setPeptideCount(protein.getPeptideCount());
-                    dataSetProtein.setProteinID(new TechId(protein.getProteinID()));
-                    dataSetProtein.setSequenceName(sequenceTable.getShortName(protein.getDatabaseID()));
-                    dataSetProteins.add(dataSetProtein);
-                }
-            } finally
-            {
-                proteins.close();
-            }
-        } finally
-        {
-            getSpecificDAOFactory().returnProteinQueryDAOToPool(proteinQueryDAO);
+            errorModel.setFalseDiscoveryRateFor(protein);
+            DataSetProtein dataSetProtein = new DataSetProtein();
+            dataSetProtein.setDataSetID(new TechId(protein.getDataSetID()));
+            dataSetProtein.setDataSetPermID(protein.getDataSetPermID());
+            dataSetProtein.setFalseDiscoveryRate(protein.getFalseDiscoveryRate());
+            dataSetProtein.setPeptideCount(protein.getPeptideCount());
+            dataSetProtein.setProteinID(new TechId(protein.getProteinID()));
+            dataSetProtein.setSequenceName(sequenceTable.getShortName(protein.getDatabaseID()));
+            dataSetProteins.add(dataSetProtein);
         }
+        proteins.close();
     }
 
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ErrorModel.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ErrorModel.java
index 8e0db8c2655..945ecc7b86a 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ErrorModel.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ErrorModel.java
@@ -69,27 +69,15 @@ class ErrorModel
         if (calculator == null)
         {
             calculator = new ProbabilityToFDRCalculator();
-            final IProteinQueryDAO dao = specificDAOFactory.getProteinQueryDAOFromPool();
-            try
+            IProteinQueryDAO dao = specificDAOFactory.getProteinQueryDAO();
+            DataSet<ProbabilityFDRMapping> mappings = dao.getProbabilityFDRMapping(dataSetID);
+            for (ProbabilityFDRMapping probabilityFDRMapping : mappings)
             {
-                final DataSet<ProbabilityFDRMapping> mappings =
-                        dao.getProbabilityFDRMapping(dataSetID);
-                try
-                {
-                    for (ProbabilityFDRMapping probabilityFDRMapping : mappings)
-                    {
-                        double probability = probabilityFDRMapping.getProbability();
-                        double falseDiscoveryRate = probabilityFDRMapping.getFalseDiscoveryRate();
-                        calculator.add(probability, falseDiscoveryRate);
-                    }
-                } finally
-                {
-                    mappings.close();
-                }
-            } finally
-            {
-                specificDAOFactory.returnProteinQueryDAOToPool(dao);
+                double probability = probabilityFDRMapping.getProbability();
+                double falseDiscoveryRate = probabilityFDRMapping.getFalseDiscoveryRate();
+                calculator.add(probability, falseDiscoveryRate);
             }
+            mappings.close();
             calculator.init();
             calculators.put(dataSetID, calculator);
         }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinDetailsBO.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinDetailsBO.java
index 8ae15ff9eb1..20ce913bf62 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinDetailsBO.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinDetailsBO.java
@@ -54,74 +54,53 @@ class ProteinDetailsBO extends AbstractBusinessObject implements IProteinDetails
     public void loadByExperimentAndReference(TechId experimentID, TechId proteinReferenceID)
     {
         String experimentPermID = getExperimentPermIDFor(experimentID);
-        final IProteinQueryDAO proteinQueryDAO =
-                getSpecificDAOFactory().getProteinQueryDAOFromPool();
+        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO();
+        DataSet<IdentifiedProtein> proteins =
+                proteinQueryDAO.listProteinsByProteinReferenceAndExperiment(experimentPermID,
+                        proteinReferenceID.getId());
         try
         {
-            final DataSet<IdentifiedProtein> proteins =
-                    proteinQueryDAO.listProteinsByProteinReferenceAndExperiment(experimentPermID,
-                            proteinReferenceID.getId());
-            try
+            if (proteins.size() == 1)
             {
-                if (proteins.size() == 1)
+                ErrorModel errorModel = new ErrorModel(getSpecificDAOFactory());
+                IdentifiedProtein protein = proteins.get(0);
+                errorModel.setFalseDiscoveryRateFor(protein);
+                details = new ProteinDetails();
+                details.setSequence(protein.getSequence());
+                details.setDatabaseNameAndVersion(protein.getDatabaseNameAndVersion());
+                details.setFalseDiscoveryRate(protein.getFalseDiscoveryRate());
+                String dataSetPermID = protein.getDataSetPermID();
+                details.setDataSetPermID(dataSetPermID);
+                DataPE ds = getDaoFactory().getExternalDataDAO().tryToFindDataSetByCode(dataSetPermID);
+                if (ds != null)
                 {
-                    ErrorModel errorModel = new ErrorModel(getSpecificDAOFactory());
-                    IdentifiedProtein protein = proteins.get(0);
-                    errorModel.setFalseDiscoveryRateFor(protein);
-                    details = new ProteinDetails();
-                    details.setSequence(protein.getSequence());
-                    details.setDatabaseNameAndVersion(protein.getDatabaseNameAndVersion());
-                    details.setFalseDiscoveryRate(protein.getFalseDiscoveryRate());
-                    String dataSetPermID = protein.getDataSetPermID();
-                    details.setDataSetPermID(dataSetPermID);
-                    DataPE ds =
-                            getDaoFactory().getExternalDataDAO().tryToFindDataSetByCode(
-                                    dataSetPermID);
-                    if (ds != null)
-                    {
-                        details.setDataSetTechID(ds.getId());
-                        details.setDataSetTypeCode(ds.getDataSetType().getCode());
-                    }
-                    details.setPeptides(loadPeptides(protein));
-                    details.setProteinID(new TechId(protein.getProteinID()));
+                    details.setDataSetTechID(ds.getId());
+                    details.setDataSetTypeCode(ds.getDataSetType().getCode());
                 }
-            } finally
-            {
-                proteins.close();
+                details.setPeptides(loadPeptides(protein));
+                details.setProteinID(new TechId(protein.getProteinID()));
             }
         } finally
         {
-            getSpecificDAOFactory().returnProteinQueryDAOToPool(proteinQueryDAO);
+            proteins.close();
         }
     }
 
     private List<Peptide> loadPeptides(IdentifiedProtein protein)
     {
-        final IProteinQueryDAO proteinQueryDAO =
-                getSpecificDAOFactory().getProteinQueryDAOFromPool();
-        try
-        {
-            final DataSet<IdentifiedPeptide> identifiedPeptides =
-                    proteinQueryDAO.listIdentifiedPeptidesByProtein(protein.getProteinID());
-            try
-            {
-                final List<Peptide> peptides = new ArrayList<Peptide>();
-                for (IdentifiedPeptide identifiedPeptide : identifiedPeptides)
-                {
-                    Peptide peptide = new Peptide();
-                    peptide.setSequence(identifiedPeptide.getSequence());
-                    peptide.setCharge(identifiedPeptide.getCharge());
-                    peptides.add(peptide);
-                }
-                return peptides;
-            } finally
-            {
-                identifiedPeptides.close();
-            }
-        } finally
+        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO();
+        DataSet<IdentifiedPeptide> identifiedPeptides =
+                proteinQueryDAO.listIdentifiedPeptidesByProtein(protein.getProteinID());
+        List<Peptide> peptides = new ArrayList<Peptide>();
+        for (IdentifiedPeptide identifiedPeptide : identifiedPeptides)
         {
-            getSpecificDAOFactory().returnProteinQueryDAOToPool(proteinQueryDAO);
+            Peptide peptide = new Peptide();
+            peptide.setSequence(identifiedPeptide.getSequence());
+            peptide.setCharge(identifiedPeptide.getCharge());
+            peptides.add(peptide);
         }
+        identifiedPeptides.close();
+        return peptides;
     }
 
     private String getExperimentPermIDFor(TechId experimentId)
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinInfoTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinInfoTable.java
index d96357e3bba..22c16518f60 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinInfoTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinInfoTable.java
@@ -21,14 +21,9 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
 
 import net.lemnik.eodsql.DataSet;
 
-import ch.systemsx.cisd.base.namedthread.NamingThreadPoolExecutor;
-import ch.systemsx.cisd.common.concurrent.ConcurrencyUtilities;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExperimentDAO;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
@@ -49,9 +44,6 @@ import ch.systemsx.cisd.openbis.plugin.phosphonetx.shared.dto.ProteinWithAbundan
  */
 class ProteinInfoTable extends AbstractBusinessObject implements IProteinInfoTable
 {
-    private static final ExecutorService executor =
-            new NamingThreadPoolExecutor("ProteinInfoTableQuery").daemonize();
-
     private List<ProteinInfo> infos;
 
     ProteinInfoTable(IDAOFactory daoFactory, IPhosphoNetXDAOFactory specificDAOFactory,
@@ -72,50 +64,17 @@ class ProteinInfoTable extends AbstractBusinessObject implements IProteinInfoTab
     public void load(List<AbundanceColumnDefinition> definitions, TechId experimentID,
             double falseDiscoveryRate, AggregateFunction function, boolean aggregateOnOriginal)
     {
-        final IExperimentDAO experimentDAO = getDaoFactory().getExperimentDAO();
-        final String permID = experimentDAO.getByTechId(experimentID).getPermId();
-        final CoverageCalculator coverageCalculator;
-        final Collection<ProteinWithAbundances> proteins;
-        final DataSet<ProteinReferenceWithPeptideSequence> proteinReferencesWithPeptides;
-        final DataSet<ProteinReferenceWithProbability> proteinReferencesWithProbability;
-        final IProteinQueryDAO dao1 = getSpecificDAOFactory().getProteinQueryDAOFromPool();
-        final IProteinQueryDAO dao2OrNull = getSpecificDAOFactory().tryGetProteinQueryDAOFromPool();
-        try
-        {
-            if (dao2OrNull != null)
-            {
-                // Run 2nd query in a separate thread in parallel to the 1st one
-                final Future<DataSet<ProteinReferenceWithPeptideSequence>> proteinReferencesWithPeptidesFuture =
-                        getProteinReferencesWithPeptideAsynchronously(dao1, permID);
-                proteinReferencesWithProbability = dao2OrNull.listProteinsByExperiment(permID);
-                proteinReferencesWithPeptides =
-                        ConcurrencyUtilities.tryGetResult(proteinReferencesWithPeptidesFuture,
-                                ConcurrencyUtilities.NO_TIMEOUT);
-            } else
-            {
-                // Run queries sequentially in the current thread
-                proteinReferencesWithPeptides = dao1.listProteinsWithPeptidesByExperiment(permID);
-                proteinReferencesWithProbability = dao1.listProteinsByExperiment(permID);
-            }
-            coverageCalculator = setUpCoverageCalculator(proteinReferencesWithPeptides);
-            proteins =
-                    setUpAbundanceManager(proteinReferencesWithProbability, falseDiscoveryRate)
-                            .getProteinsWithAbundances();
-        } finally
-        {
-            getSpecificDAOFactory().returnProteinQueryDAOToPool(dao1);
-            if (dao2OrNull != null)
-            {
-                getSpecificDAOFactory().returnProteinQueryDAOToPool(dao2OrNull);
-            }
-        }
+        IExperimentDAO experimentDAO = getDaoFactory().getExperimentDAO();
+        String permID = experimentDAO.getByTechId(experimentID).getPermId();
+        CoverageCalculator coverageCalculator = setUpCoverageCalculator(permID);
+        AbundanceManager abundanceManager = setUpAbundanceManager(permID, falseDiscoveryRate);
+        Collection<ProteinWithAbundances> proteins = abundanceManager.getProteinsWithAbundances();
         infos = new ArrayList<ProteinInfo>(proteins.size());
         for (ProteinWithAbundances protein : proteins)
         {
             ProteinInfo proteinInfo = new ProteinInfo();
             proteinInfo.setId(new TechId(protein.getId()));
-            AccessionNumberBuilder builder =
-                    new AccessionNumberBuilder(protein.getAccessionNumber());
+            AccessionNumberBuilder builder = new AccessionNumberBuilder(protein.getAccessionNumber());
             proteinInfo.setCoverage(coverageCalculator.calculateCoverageFor(protein.getId()));
             proteinInfo.setAccessionNumber(builder.getAccessionNumber());
             proteinInfo.setDescription(protein.getDescription());
@@ -130,8 +89,7 @@ class ProteinInfoTable extends AbstractBusinessObject implements IProteinInfoTab
                     double[] values = protein.getAbundancesForSample(sampleID);
                     if (values != null && values.length > 0 && aggregateOnOriginal == false)
                     {
-                        values = new double[]
-                            { function.aggregate(values) };
+                        values = new double[] {function.aggregate(values)};
                     }
                     abundanceValues = concatenate(abundanceValues, values);
                 }
@@ -146,14 +104,17 @@ class ProteinInfoTable extends AbstractBusinessObject implements IProteinInfoTab
         }
     }
 
-    private AbundanceManager setUpAbundanceManager(
-            DataSet<ProteinReferenceWithProbability> proteinReferences, double falseDiscoveryRate)
+    private AbundanceManager setUpAbundanceManager(String experimentPermID,
+            double falseDiscoveryRate)
     {
         AbundanceManager abundanceManager = new AbundanceManager(getDaoFactory().getSampleDAO());
+        IProteinQueryDAO dao = getSpecificDAOFactory().getProteinQueryDAO();
         ErrorModel errorModel = new ErrorModel(getSpecificDAOFactory());
+        DataSet<ProteinReferenceWithProbability> resultSet =
+                dao.listProteinsByExperiment(experimentPermID);
         try
         {
-            for (ProteinReferenceWithProbability protein : proteinReferences)
+            for (ProteinReferenceWithProbability protein : resultSet)
             {
                 if (errorModel.passProtein(protein, falseDiscoveryRate))
                 {
@@ -162,35 +123,24 @@ class ProteinInfoTable extends AbstractBusinessObject implements IProteinInfoTab
             }
         } finally
         {
-            proteinReferences.close();
+            resultSet.close();
         }
         return abundanceManager;
     }
-
-    private Future<DataSet<ProteinReferenceWithPeptideSequence>> getProteinReferencesWithPeptideAsynchronously(
-            final IProteinQueryDAO dao, final String experimentPermID)
-    {
-        return executor.submit(new Callable<DataSet<ProteinReferenceWithPeptideSequence>>()
-            {
-                public DataSet<ProteinReferenceWithPeptideSequence> call() throws Exception
-                {
-                    return dao.listProteinsWithPeptidesByExperiment(experimentPermID);
-                }
-            });
-    }
-
-    private CoverageCalculator setUpCoverageCalculator(
-            DataSet<ProteinReferenceWithPeptideSequence> proteinReferences)
+    
+    private CoverageCalculator setUpCoverageCalculator(String experimentPermID)
     {
+        IProteinQueryDAO dao = getSpecificDAOFactory().getProteinQueryDAO();
+        DataSet<ProteinReferenceWithPeptideSequence> resultSet = dao.listProteinsWithPeptidesByExperiment(experimentPermID);
         try
         {
-            return new CoverageCalculator(proteinReferences);
+            return new CoverageCalculator(resultSet);
         } finally
         {
-            proteinReferences.close();
+            resultSet.close();
         }
     }
-
+    
     private static double[] concatenate(double[] array1OrNull, double[] array2OrNull)
     {
         if (array1OrNull == null || array1OrNull.length == 0)
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinSequenceTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinSequenceTable.java
index 5bc51e8d584..ffd31325cb7 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinSequenceTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinSequenceTable.java
@@ -72,37 +72,26 @@ class ProteinSequenceTable extends AbstractBusinessObject implements IProteinSeq
 
     public void loadByReference(TechId proteinReferenceID)
     {
-        final IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAOFromPool();
-        try
+        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO();
+        DataSet<Sequence> sequences =
+                proteinQueryDAO.listProteinSequencesByProteinReference(proteinReferenceID.getId());
+        proteinSequences = new ArrayList<ProteinSequence>(sequences.size());
+        databaseIDToShortNameMap = new HashMap<Long, String>();
+        int number = 0;
+        for (Sequence sequence : sequences)
         {
-            final DataSet<Sequence> sequences =
-                    proteinQueryDAO.listProteinSequencesByProteinReference(proteinReferenceID.getId());
-            try
-            {
-                proteinSequences = new ArrayList<ProteinSequence>(sequences.size());
-                databaseIDToShortNameMap = new HashMap<Long, String>();
-                int number = 0;
-                for (Sequence sequence : sequences)
-                {
-                    ProteinSequence proteinSequence = new ProteinSequence();
-                    proteinSequence.setId(new TechId(sequence.getId()));
-                    String shortName = createShortName(number++);
-                    proteinSequence.setShortName(shortName);
-                    proteinSequence.setSequence(sequence.getSequence());
-                    long databaseID = sequence.getDatabaseID();
-                    proteinSequence.setDatabaseID(new TechId(databaseID));
-                    proteinSequence.setDatabaseNameAndVersion(sequence.getDatabaseNameAndVersion());
-                    proteinSequences.add(proteinSequence);
-                    databaseIDToShortNameMap.put(databaseID, shortName);
-                }
-            } finally
-            {
-                sequences.close();
-            }
-        } finally
-        {
-            getSpecificDAOFactory().returnProteinQueryDAOToPool(proteinQueryDAO);
+            ProteinSequence proteinSequence = new ProteinSequence();
+            proteinSequence.setId(new TechId(sequence.getId()));
+            String shortName = createShortName(number++);
+            proteinSequence.setShortName(shortName);
+            proteinSequence.setSequence(sequence.getSequence());
+            long databaseID = sequence.getDatabaseID();
+            proteinSequence.setDatabaseID(new TechId(databaseID));
+            proteinSequence.setDatabaseNameAndVersion(sequence.getDatabaseNameAndVersion());
+            proteinSequences.add(proteinSequence);
+            databaseIDToShortNameMap.put(databaseID, shortName);
         }
+        sequences.close();
     }
 
     private String createShortName(int number)
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinSummaryTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinSummaryTable.java
index ec08d8e6c53..f15ea14ce74 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinSummaryTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinSummaryTable.java
@@ -88,43 +88,37 @@ class ProteinSummaryTable extends AbstractBusinessObject implements IProteinSumm
 
     public void load(TechId experimentID)
     {
-        final IExperimentDAO experimentDAO = getDaoFactory().getExperimentDAO();
-        final String permID = experimentDAO.getByTechId(experimentID).getPermId();
-        final ErrorModel errorModel = new ErrorModel(getSpecificDAOFactory());
-        final IProteinQueryDAO dao = getSpecificDAOFactory().getProteinQueryDAOFromPool();
+        IExperimentDAO experimentDAO = getDaoFactory().getExperimentDAO();
+        String permID = experimentDAO.getByTechId(experimentID).getPermId();
+        IProteinQueryDAO dao = getSpecificDAOFactory().getProteinQueryDAO();
+        ErrorModel errorModel = new ErrorModel(getSpecificDAOFactory());
+        DataSet<ProteinReferenceWithProbabilityAndPeptide> resultSet =
+                dao.listProteinsWithProbabilityAndPeptidesByExperiment(permID);
+        List<Counter> counters = new ArrayList<Counter>(FDR_LEVELS.length);
+        for (double fdrLevel : FDR_LEVELS)
+        {
+            counters.add(new Counter(fdrLevel));
+        }
         try
         {
-            final DataSet<ProteinReferenceWithProbabilityAndPeptide> resultSet =
-                    dao.listProteinsWithProbabilityAndPeptidesByExperiment(permID);
-            final List<Counter> counters = new ArrayList<Counter>(FDR_LEVELS.length);
-            for (double fdrLevel : FDR_LEVELS)
-            {
-                counters.add(new Counter(fdrLevel));
-            }
-            try
+            for (ProteinReferenceWithProbabilityAndPeptide protein : resultSet)
             {
-                for (ProteinReferenceWithProbabilityAndPeptide protein : resultSet)
-                {
-                    long dataSetID = protein.getDataSetID();
-                    double probability = protein.getProbability();
-                    double fdr = errorModel.calculateFalsDiscoveryRate(dataSetID, probability);
-                    for (Counter counter : counters)
-                    {
-                        counter.handle(fdr, protein);
-                    }
-                }
-                summaries = new ArrayList<ProteinSummary>(counters.size());
+                long dataSetID = protein.getDataSetID();
+                double probability = protein.getProbability();
+                double fdr = errorModel.calculateFalsDiscoveryRate(dataSetID, probability);
                 for (Counter counter : counters)
                 {
-                    summaries.add(counter.getProteinSummary());
+                    counter.handle(fdr, protein);
                 }
-            } finally
+            }
+            summaries = new ArrayList<ProteinSummary>(counters.size());
+            for (Counter counter : counters)
             {
-                resultSet.close();
+                summaries.add(counter.getProteinSummary());
             }
         } finally
         {
-            getSpecificDAOFactory().returnProteinQueryDAOToPool(dao);
+            resultSet.close();
         }
     }
 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/SampleTable.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/SampleTable.java
index 8431a210fd4..898e5efbda3 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/SampleTable.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/SampleTable.java
@@ -62,33 +62,27 @@ class SampleTable extends AbstractBusinessObject implements ISampleTable
     public void loadSamplesWithAbundance(TechId experimentID, TechId proteinReferenceID)
     {
         samples = new ArrayList<SampleWithPropertiesAndAbundance>();
-        final IDAOFactory daoFactory = getDaoFactory();
-        final String experimentPermID = daoFactory.getExperimentDAO().getByTechId(experimentID).getPermId();
-        final IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAOFromPool();
+        IProteinQueryDAO proteinQueryDAO = getSpecificDAOFactory().getProteinQueryDAO();
+        IDAOFactory daoFactory = getDaoFactory();
+        String experimentPermID = daoFactory.getExperimentDAO().getByTechId(experimentID).getPermId();
+        DataSet<SampleAbundance> sampleAbundances =
+                proteinQueryDAO.listSampleAbundanceByProtein(experimentPermID, proteinReferenceID.getId());
         try
         {
-            final DataSet<SampleAbundance> sampleAbundances =
-                    proteinQueryDAO.listSampleAbundanceByProtein(experimentPermID, proteinReferenceID.getId());
-            try
+            ISampleDAO sampleDAO = daoFactory.getSampleDAO();
+            for (SampleAbundance sampleAbundance : sampleAbundances)
             {
-                ISampleDAO sampleDAO = daoFactory.getSampleDAO();
-                for (SampleAbundance sampleAbundance : sampleAbundances)
-                {
-                    SampleWithPropertiesAndAbundance sample = new SampleWithPropertiesAndAbundance();
-                    sample.setAbundance(sampleAbundance.getAbundance());
-                    String samplePermID = sampleAbundance.getSamplePermID();
-                    long sampleID = sampleIDProvider.getSampleIDOrParentSampleID(samplePermID);
-                    SamplePE samplePE = sampleDAO.getByTechId(new TechId(sampleID));
-                    fillSampleData(sample, samplePE);
-                    samples.add(sample);
-                }
-            } finally
-            {
-                sampleAbundances.close();
+                SampleWithPropertiesAndAbundance sample = new SampleWithPropertiesAndAbundance();
+                sample.setAbundance(sampleAbundance.getAbundance());
+                String samplePermID = sampleAbundance.getSamplePermID();
+                long sampleID = sampleIDProvider.getSampleIDOrParentSampleID(samplePermID);
+                SamplePE samplePE = sampleDAO.getByTechId(new TechId(sampleID));
+                fillSampleData(sample, samplePE);
+                samples.add(sample);
             }
         } finally
         {
-            getSpecificDAOFactory().returnProteinQueryDAOToPool(proteinQueryDAO);
+            sampleAbundances.close();
         }
     }
 
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/IPhosphoNetXDAOFactory.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/IPhosphoNetXDAOFactory.java
index 2b49f2c9b17..670a00f1c6b 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/IPhosphoNetXDAOFactory.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/IPhosphoNetXDAOFactory.java
@@ -23,19 +23,5 @@ package ch.systemsx.cisd.openbis.plugin.phosphonetx.server.dataaccess;
  */
 public interface IPhosphoNetXDAOFactory
 {
-    /**
-     * Retrieves a {@link IProteinQueryDAO} from the pool.
-     */
-    public IProteinQueryDAO getProteinQueryDAOFromPool();
-
-    /**
-     * Retrieves a {@link IProteinQueryDAO} from the pool or <code>null</code> if none is currently 
-     * available.
-     */
-    public IProteinQueryDAO tryGetProteinQueryDAOFromPool();
-
-    /**
-     * Returns the given <var>proteinQueryDAO</var> to the pool.
-     */
-    public void returnProteinQueryDAOToPool(IProteinQueryDAO proteinQueryDAO);
+    public IProteinQueryDAO getProteinQueryDAO();
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/db/PhosphoNetXDAOFactory.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/db/PhosphoNetXDAOFactory.java
index 10f7fc1b068..63fe09c0b92 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/db/PhosphoNetXDAOFactory.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/dataaccess/db/PhosphoNetXDAOFactory.java
@@ -16,9 +16,8 @@
 
 package ch.systemsx.cisd.openbis.plugin.phosphonetx.server.dataaccess.db;
 
+import java.sql.Connection;
 import java.sql.SQLException;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
 
 import net.lemnik.eodsql.QueryTool;
 
@@ -43,57 +42,28 @@ public class PhosphoNetXDAOFactory implements IPhosphoNetXDAOFactory
     private static final Logger operationLog =
             LogFactory.getLogger(LogCategory.OPERATION, PhosphoNetXDAOFactory.class);
 
-    private final BlockingQueue<IProteinQueryDAO> availableProteinQueryObjects =
-            new LinkedBlockingQueue<IProteinQueryDAO>();
+    private IProteinQueryDAO proteinQueryDAO;
 
-    public PhosphoNetXDAOFactory(DatabaseConfigurationContext context,
-            int numberOfParallelQueriesHint)
+    public PhosphoNetXDAOFactory(DatabaseConfigurationContext context)
     {
-        final int numberOfParallelQueries =
-                (numberOfParallelQueriesHint <= 0) ? Runtime.getRuntime().availableProcessors()
-                        : numberOfParallelQueriesHint;
         DBMigrationEngine.createOrMigrateDatabaseAndGetScriptProvider(context, DATABASE_VERSION);
-        for (int i = 0; i < numberOfParallelQueries; ++i)
-        {
-            availableProteinQueryObjects.add(createQuery(context));
-        }
-        if (operationLog.isInfoEnabled())
-        {
-            operationLog.info("DAO factory for PhosphoNetX created.");
-        }
-    }
-
-    private IProteinQueryDAO createQuery(DatabaseConfigurationContext context)
-    {
+        Connection connection = null;
         try
         {
-            return QueryTool.getQuery(context.getDataSource().getConnection(),
-                    IProteinQueryDAO.class);
+            connection = context.getDataSource().getConnection();
         } catch (SQLException ex)
         {
             throw CheckedExceptionTunnel.wrapIfNecessary(ex);
         }
-    }
-
-    public IProteinQueryDAO getProteinQueryDAOFromPool()
-    {
-        try
-        {
-            return availableProteinQueryObjects.take();
-        } catch (InterruptedException ex)
+        proteinQueryDAO = QueryTool.getQuery(connection, IProteinQueryDAO.class);
+        if (operationLog.isInfoEnabled())
         {
-            throw CheckedExceptionTunnel.wrapIfNecessary(ex);
+            operationLog.info("DAO factory for PhosphoNetX created.");
         }
     }
 
-    public IProteinQueryDAO tryGetProteinQueryDAOFromPool()
+    public IProteinQueryDAO getProteinQueryDAO()
     {
-        return availableProteinQueryObjects.poll();
+        return proteinQueryDAO;
     }
-
-    public void returnProteinQueryDAOToPool(IProteinQueryDAO proteinQueryDAO)
-    {
-        availableProteinQueryObjects.add(proteinQueryDAO);
-    }
-
 }
diff --git a/rtd_phosphonetx/source/java/phosphonetx-applicationContext.xml b/rtd_phosphonetx/source/java/phosphonetx-applicationContext.xml
index be242ac6f94..3af8c91f361 100644
--- a/rtd_phosphonetx/source/java/phosphonetx-applicationContext.xml
+++ b/rtd_phosphonetx/source/java/phosphonetx-applicationContext.xml
@@ -32,7 +32,6 @@
     <bean id="phosphonetx-dao-factory"
           class="ch.systemsx.cisd.openbis.plugin.phosphonetx.server.dataaccess.db.PhosphoNetXDAOFactory">
         <constructor-arg ref="phosphonetx-db-configuration-context"/>
-        <constructor-arg value="${phosphonetx.number-of-parallel-queries}"/>
     </bean>
     
     <bean id="phosphonetx-bo-factory"
diff --git a/rtd_phosphonetx/source/java/service.properties b/rtd_phosphonetx/source/java/service.properties
index 5f9578be35d..67190951302 100644
--- a/rtd_phosphonetx/source/java/service.properties
+++ b/rtd_phosphonetx/source/java/service.properties
@@ -35,10 +35,6 @@ phosphonetx.database.owner-password =
 phosphonetx.database.admin-user = 
 phosphonetx.database.admin-password =
 phosphonetx.script-folder = source
-# Provide here the number of long-running queries that should be executed in parallel on the database
-# 0 means: use number of CPUs in the system (which assumes that the database and the application 
-# server are running on the same host).
-phosphonetx.number-of-parallel-queries = 0
 
 crowd.service.host = crowd.systemsx.ch
 crowd.service.port = 8443
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServerTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServerTest.java
index 4d1a7ea859e..a794e34a8c0 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServerTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/PhosphoNetXServerTest.java
@@ -70,9 +70,8 @@ public class PhosphoNetXServerTest extends AbstractServerTestCase
         context.checking(new Expectations()
             {
                 {
-                    allowing(phosphoNetXDAOFactory).getProteinQueryDAOFromPool();
+                    allowing(phosphoNetXDAOFactory).getProteinQueryDAO();
                     will(returnValue(proteinDAO));
-                    allowing(phosphoNetXDAOFactory).returnProteinQueryDAOToPool(proteinDAO);
                 }
             });
     }
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ErrorModelTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ErrorModelTest.java
index f027d67255b..3aace8dbac0 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ErrorModelTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ErrorModelTest.java
@@ -56,9 +56,8 @@ public class ErrorModelTest extends AssertJUnit
         context.checking(new Expectations()
             {
                 {
-                    allowing(specificDAOFactory).getProteinQueryDAOFromPool();
+                    allowing(specificDAOFactory).getProteinQueryDAO();
                     will(returnValue(proteinQueryDAO));
-                    allowing(specificDAOFactory).returnProteinQueryDAOToPool(proteinQueryDAO);
                     
                     atMost(1).of(proteinQueryDAO).getProbabilityFDRMapping(DATA_SET1_ID);
                     MockDataSet<ProbabilityFDRMapping> dataSet1 = new MockDataSet<ProbabilityFDRMapping>();
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinInfoTableTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinInfoTableTest.java
index 23bf9ae0c6a..350d680a55a 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinInfoTableTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinInfoTableTest.java
@@ -75,11 +75,8 @@ public class ProteinInfoTableTest extends AbstractServerTestCase
         context.checking(new Expectations()
             {
                 {
-                    allowing(specificDAOFactory).getProteinQueryDAOFromPool();
+                    allowing(specificDAOFactory).getProteinQueryDAO();
                     will(returnValue(proteinDAO));
-                    allowing(specificDAOFactory).tryGetProteinQueryDAOFromPool();
-                    will(returnValue(proteinDAO));
-                    allowing(specificDAOFactory).returnProteinQueryDAOToPool(proteinDAO);
                 }
             });
         table = new ProteinInfoTable(daoFactory, specificDAOFactory, SESSION);
diff --git a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinSummaryTableTest.java b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinSummaryTableTest.java
index 9dadc30a08b..fd86e373abf 100644
--- a/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinSummaryTableTest.java
+++ b/rtd_phosphonetx/sourceTest/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/server/business/ProteinSummaryTableTest.java
@@ -62,9 +62,8 @@ public class ProteinSummaryTableTest extends AbstractServerTestCase
         context.checking(new Expectations()
             {
                 {
-                    allowing(specificDAOFactory).getProteinQueryDAOFromPool();
+                    allowing(specificDAOFactory).getProteinQueryDAO();
                     will(returnValue(proteinDAO));
-                    allowing(specificDAOFactory).returnProteinQueryDAOToPool(proteinDAO);
                 }
             });
         table = new ProteinSummaryTable(daoFactory, specificDAOFactory, SESSION);
-- 
GitLab