diff --git a/screening/dist/etc/service.properties b/screening/dist/etc/service.properties index d0fb442545f0a97612c0728652933ad7bcf2bcba..c41aca0a3da83ad96e0d9462d9769a1b7755862c 100644 --- a/screening/dist/etc/service.properties +++ b/screening/dist/etc/service.properties @@ -86,9 +86,11 @@ mail.smtp.host = file://${root-dir} # --------------------------------------------------------------------------- data-sources = imaging-db +imaging-db.version-holder-class = ch.systemsx.cisd.openbis.dss.etl.ImagingDatabaseVersionHolder imaging-db.databaseEngineCode = postgresql imaging-db.basicDatabaseName = imaging imaging-db.databaseKind = productive +imaging-db.scriptFolder = sql # --------------------------------------------------------------------------- # reporting and processing plugins configuration diff --git a/screening/etc/service.properties b/screening/etc/service.properties index a366eea8f7526db895502c91183992074dda659a..6d2f7c43a16ab8ef139a89852f7821507e466404 100644 --- a/screening/etc/service.properties +++ b/screening/etc/service.properties @@ -86,9 +86,11 @@ mail.smtp.host = file://${root-dir}/emails # --------------------------------------------------------------------------- data-sources = imaging-db +imaging-db.version-holder-class = ch.systemsx.cisd.openbis.dss.etl.ImagingDatabaseVersionHolder imaging-db.databaseEngineCode = postgresql imaging-db.basicDatabaseName = imaging imaging-db.databaseKind = dev +imaging-db.scriptFolder = source/sql # --------------------------------------------------------------------------- # reporting and processing plugins configuration diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingDatabaseVersionHolder.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingDatabaseVersionHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..9bf19aec9c090226637c470a147c3943eadc6c7e --- /dev/null +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ImagingDatabaseVersionHolder.java @@ -0,0 +1,34 @@ +/* + * Copyright 2010 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.dss.etl; + +import ch.systemsx.cisd.openbis.dss.generic.shared.IDatabaseVersionHolder; + +/** + * Version holder for imaging database. + * + * @author Franz-Josef Elmer + */ +public class ImagingDatabaseVersionHolder implements IDatabaseVersionHolder +{ + + public String getDatabaseVersion() + { + return "003"; // S83 + } + +} diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java index e5dc92736c6a22dfcd884f453c3a856d91039e57..94b91bfaad93e41958373e687fa7523561521535 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/ScreeningBusinessObjectFactory.java @@ -54,7 +54,7 @@ public final class ScreeningBusinessObjectFactory extends AbstractPluginBusiness public final IHCSDatasetLoader createHCSDatasetLoader(final String datasetPermId) { - return new HCSDatasetLoader(specificDAOFactory.getImagingQueryDAO(), datasetPermId); + return new HCSDatasetLoader(specificDAOFactory.getImagingQueryDAO(datasetPermId), datasetPermId); } public final ISampleBO createSampleBO(final Session session) diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningDAOFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningDAOFactory.java index 4fca2d05c4d3ce0438b6d1d748a3236e4533f414..bf74bea5e8ed588481fcf304e5aab6e81882b413 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningDAOFactory.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/IScreeningDAOFactory.java @@ -25,5 +25,5 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.IImag */ public interface IScreeningDAOFactory { - public IImagingQueryDAO getImagingQueryDAO(); + public IImagingQueryDAO getImagingQueryDAO(String datasetPermId); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java index e73c2a82b543a92d980ec7a5c796c69e78497607..f8abfc1f196b5812d220033507a1e1df75005345 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/dataaccess/db/ScreeningDAOFactory.java @@ -16,14 +16,18 @@ package ch.systemsx.cisd.openbis.plugin.screening.server.dataaccess.db; +import java.util.HashMap; +import java.util.Map; + +import javax.sql.DataSource; + import net.lemnik.eodsql.QueryTool; import org.apache.log4j.Logger; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; -import ch.systemsx.cisd.dbmigration.DBMigrationEngine; -import ch.systemsx.cisd.dbmigration.DatabaseConfigurationContext; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataSourceProvider; import ch.systemsx.cisd.openbis.plugin.screening.server.dataaccess.IScreeningDAOFactory; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.IImagingQueryDAO; @@ -32,26 +36,34 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.IImag */ public class ScreeningDAOFactory implements IScreeningDAOFactory { - /** Current version of the database. */ - public static final String DATABASE_VERSION = "003"; // S83 + private static final String TECHNOLOGY = "screening"; private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, ScreeningDAOFactory.class); - private final IImagingQueryDAO imagingQueryDAO; + private final IDataSourceProvider dataSourceProvider; + + private final Map<DataSource, IImagingQueryDAO> daos = new HashMap<DataSource, IImagingQueryDAO>(); - public ScreeningDAOFactory(DatabaseConfigurationContext context) + public ScreeningDAOFactory(IDataSourceProvider dataSourceProvider) { - DBMigrationEngine.createOrMigrateDatabaseAndGetScriptProvider(context, DATABASE_VERSION); - imagingQueryDAO = QueryTool.getQuery(context.getDataSource(), IImagingQueryDAO.class); + this.dataSourceProvider = dataSourceProvider; if (operationLog.isInfoEnabled()) { - operationLog.info("DAO factory for Screening created."); + operationLog.info("DAO factory for Screening created. Data source provider: " + + dataSourceProvider.getClass()); } } - public IImagingQueryDAO getImagingQueryDAO() + public IImagingQueryDAO getImagingQueryDAO(String datasetPermId) { - return imagingQueryDAO; + DataSource dataSource = dataSourceProvider.getDataSourceByDataSetCode(datasetPermId, TECHNOLOGY); + IImagingQueryDAO dao = daos.get(dataSource); + if (dao == null) + { + dao = QueryTool.getQuery(dataSource, IImagingQueryDAO.class); + daos.put(dataSource, dao); + } + return dao; } } diff --git a/screening/source/java/screening-applicationContext.xml b/screening/source/java/screening-applicationContext.xml index c8f42648252ace1fe19d2b3baa070af337d321e9..9045e564a9730eaddda880c3711ad20be1e0f360 100644 --- a/screening/source/java/screening-applicationContext.xml +++ b/screening/source/java/screening-applicationContext.xml @@ -29,9 +29,17 @@ <property name="databaseInstance" value="${imaging.database-instance}" /> </bean> + <bean id="single-data-source-provider" class="ch.systemsx.cisd.openbis.generic.server.dataaccess.SingleDataSourceProvider"> + <constructor-arg ref="imaging-db-configuration-context"/> + </bean> + + <bean id="dss-based-data-source-provider" class="ch.systemsx.cisd.openbis.generic.server.dataaccess.DataStoreServerBasedDataSourceProvider"> + <constructor-arg ref="dao-factory"/> + </bean> + <bean id="screening-dao-factory" class="ch.systemsx.cisd.openbis.plugin.screening.server.dataaccess.db.ScreeningDAOFactory"> - <constructor-arg ref="imaging-db-configuration-context"/> + <constructor-arg ref="${data-source-provider}"/> </bean> <!-- diff --git a/screening/source/java/service.properties b/screening/source/java/service.properties index 1d4aa1792cebe508c4faa4d855454f61b81e8e35..4e7182c78e673117c2b2f4b4db17811f9dc1e427 100644 --- a/screening/source/java/service.properties +++ b/screening/source/java/service.properties @@ -21,6 +21,13 @@ database.owner-password = database.admin-user = database.admin-password = +data-source-provider = dss-based-data-source-provider + +dss-based-data-source-provider.data-store-servers = dss-screening, my-dss +dss-based-data-source-provider.dss-screening.database-driver = org.postgresql.Driver +dss-based-data-source-provider.dss-screening.database-url = jdbc:postgresql://localhost/imaging_dev +dss-based-data-source-provider.my-dss. = dss-based-data-source-provider.dss-screening. + imaging.database.engine = postgresql imaging.database.create-from-scratch = false imaging.database.script-single-step-mode = false @@ -30,7 +37,6 @@ imaging.database.owner = imaging.database.owner-password = imaging.database.admin-user = imaging.database.admin-password = -imaging.script-folder = source crowd.service.host = crowd-bsse.ethz.ch crowd.service.port = 8443 diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/DBUtilsForTests.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/DBUtilsForTests.java index 702e5448ec29ca8a2224923c3d748d61e0ca06a3..90ba0936bc21ed1fc08d78fdefbddf0a43c36f43 100644 --- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/DBUtilsForTests.java +++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/shared/imaging/dataaccess/DBUtilsForTests.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess; import ch.rinn.restrictions.Friend; import ch.systemsx.cisd.dbmigration.DBMigrationEngine; import ch.systemsx.cisd.dbmigration.DatabaseConfigurationContext; +import ch.systemsx.cisd.openbis.dss.etl.ImagingDatabaseVersionHolder; import ch.systemsx.cisd.openbis.plugin.screening.server.dataaccess.db.ScreeningDAOFactory; /** @@ -32,7 +33,8 @@ public class DBUtilsForTests public static void init(DatabaseConfigurationContext context) { + String databaseVersion = new ImagingDatabaseVersionHolder().getDatabaseVersion(); DBMigrationEngine.createOrMigrateDatabaseAndGetScriptProvider(context, - ScreeningDAOFactory.DATABASE_VERSION); + databaseVersion); } }