From a4e74705dcab3a5737361742dc9680856542dff7 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Thu, 9 Apr 2009 14:20:07 +0000 Subject: [PATCH] LMS-809 Communication between DSS and openBIS server changed, new service properties for DSS code and download URL introduced SVN: 10662 --- datastore_server/dist/etc/service.properties | 6 ++ datastore_server/etc/service.properties | 6 ++ .../source/java/applicationContext.xml | 8 ++- .../ch/systemsx/cisd/etlserver/ETLDaemon.java | 8 ++- .../etlserver/TransferredDataSetHandler.java | 13 +++-- .../server/DataStoreServiceLogger.java | 2 +- .../server/EncapsulatedOpenBISService.java | 57 ++++++++++++++----- .../TransferredDataSetHandlerTest.java | 12 ++-- .../EncapsulatedOpenBISServiceTest.java | 47 +++++++++++---- 9 files changed, 121 insertions(+), 38 deletions(-) diff --git a/datastore_server/dist/etc/service.properties b/datastore_server/dist/etc/service.properties index 3255029161d..487dfa5de25 100644 --- a/datastore_server/dist/etc/service.properties +++ b/datastore_server/dist/etc/service.properties @@ -1,3 +1,6 @@ +# Unique code of this Data Store Server. Not more than 40 characters. +data-store-server-code = DSS1 + # The root directory of the data store storeroot-dir = data/store @@ -45,6 +48,9 @@ username = etlserver # The password to use when contacting the openBIS server password = etlserver +# The base URL for Web client access. +download-url = https://localhost:8889 + # SMTP properties (must start with 'mail' to be considered). # mail.smtp.host = localhost # mail.from = datastore_server@localhost diff --git a/datastore_server/etc/service.properties b/datastore_server/etc/service.properties index 3fe083d39a8..8e890e0101c 100644 --- a/datastore_server/etc/service.properties +++ b/datastore_server/etc/service.properties @@ -1,3 +1,6 @@ +# Unique code of this Data Store Server. Not more than 40 characters. +data-store-server-code = my-dss + # The root directory of the data store storeroot-dir = targets/store @@ -43,6 +46,9 @@ username = etlserver # The password to use when contacting the openBIS server password = doesnotmatter +# The base URL for Web client access. +download-url = https://localhost:8889 + # SMTP properties (must start with 'mail' to be considered). # mail.smtp.host = localhost # mail.from = datastore_server@localhost diff --git a/datastore_server/source/java/applicationContext.xml b/datastore_server/source/java/applicationContext.xml index 39f4e82c0da..20b51472da4 100644 --- a/datastore_server/source/java/applicationContext.xml +++ b/datastore_server/source/java/applicationContext.xml @@ -22,9 +22,11 @@ <bean id="openBIS-service" class="ch.systemsx.cisd.openbis.dss.generic.server.EncapsulatedOpenBISService"> <constructor-arg ref="session-token-manager"/> <constructor-arg value="${server-url}"/> - <constructor-arg value="${port}"/> - <constructor-arg value="${username}"/> - <constructor-arg value="${password}"/> + <property name="username" value="${username}"/> + <property name="password" value="${password}"/> + <property name="port" value="${port}"/> + <property name="downloadUrl" value="${download-url}"/> + <property name="dataStoreCode" value="${data-store-server-code}"/> </bean> <bean id="data-store-server" diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java index 23ebd9bfcb5..822547f4c8d 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java @@ -75,6 +75,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; public final class ETLDaemon { static final String STOREROOT_DIR_KEY = "storeroot-dir"; + static final String DSS_CODE_KEY = "data-store-server-code"; static final String NOTIFY_SUCCESSFUL_REGISTRATION = "notify-successful-registration"; @@ -343,8 +344,13 @@ public final class ETLDaemon migrateDataStoreByRenamingObservableTypeToDataSetType(storeRootDir); plugin.getStorageProcessor().setStoreRootDirectory(storeRootDir); final Properties mailProperties = parameters.getMailProperties(); + String dssCode = parameters.getProperties().getProperty(DSS_CODE_KEY); + if (dssCode == null) + { + throw new ConfigurationFailureException("Missing service property '" + DSS_CODE_KEY + "'"); + } final TransferredDataSetHandler pathHandler = - new TransferredDataSetHandler(threadParameters.tryGetGroupCode(), plugin, + new TransferredDataSetHandler(threadParameters.tryGetGroupCode(), dssCode, plugin, authorizedLimsService, mailProperties, highwaterMarkWatcher, notifySuccessfulRegistration, threadParameters.useIsFinishedMarkerFile()); pathHandler.setProcessorFactories(processorFactories); diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandler.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandler.java index f0cb6579050..bf62cdf2cdf 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandler.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandler.java @@ -119,6 +119,8 @@ public final class TransferredDataSetHandler implements IPathHandler, ISelfTesta private final String groupCode; + private final String dssCode; + private final boolean notifySuccessfulRegistration; private final boolean useIsFinishedMarkerFile; @@ -130,33 +132,35 @@ public final class TransferredDataSetHandler implements IPathHandler, ISelfTesta private DatabaseInstancePE homeDatabaseInstance; - /** + /** * @param useIsFinishedMarkerFile if true, file/directory is processed when a marker file for it * appears. Otherwise processing starts if the file/directory is not modified for a * certain amount of time (so called "quiet period"). */ - public TransferredDataSetHandler(final String groupCode, final IETLServerPlugin plugin, + public TransferredDataSetHandler(final String groupCode, String dssCode, final IETLServerPlugin plugin, final IEncapsulatedOpenBISService limsService, final Properties mailProperties, final HighwaterMarkWatcher highwaterMarkWatcher, final boolean notifySuccessfulRegistration, boolean useIsFinishedMarkerFile) { - this(groupCode, plugin.getStorageProcessor(), plugin, limsService, new MailClient( + this(groupCode, dssCode, plugin.getStorageProcessor(), plugin, limsService, new MailClient( mailProperties), notifySuccessfulRegistration, useIsFinishedMarkerFile); } - TransferredDataSetHandler(final String groupCode, + TransferredDataSetHandler(final String groupCode, String dssCode, final IStoreRootDirectoryHolder storeRootDirectoryHolder, final IETLServerPlugin plugin, final IEncapsulatedOpenBISService limsService, final IMailClient mailClient, final boolean notifySuccessfulRegistration, boolean useIsFinishedMarkerFile) { + assert dssCode != null : "Unspecified data store code"; assert storeRootDirectoryHolder != null : "Given store root directory holder can not be null."; assert plugin != null : "IETLServerPlugin implementation can not be null."; assert limsService != null : "IEncapsulatedLimsService implementation can not be null."; assert mailClient != null : "IMailClient implementation can not be null."; + this.dssCode = dssCode; this.groupCode = groupCode; this.storeRootDirectoryHolder = storeRootDirectoryHolder; this.dataSetInfoExtractor = plugin.getDataSetInfoExtractor(); @@ -765,6 +769,7 @@ public final class TransferredDataSetHandler implements IPathHandler, ISelfTesta data.setMeasured(typeExtractor.isMeasuredData(incomingDataSetFile)); data.setStorageFormat(storageFormat); data.setComplete(isCompleteFlag); + data.setDataStoreCode(dssCode); return data; } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceLogger.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceLogger.java index 7d66b7886b1..10c1f70c0ff 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceLogger.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServiceLogger.java @@ -92,7 +92,7 @@ class DataStoreServiceLogger implements IDataStoreService { builder.append(' ').append(externalDataPE.getCode()); } - log("upload_data_sets", "USER(%s) LOCATIONS(%s)", context.getUserID(), builder.toString().trim()); + log("upload_data_sets", "USER(%s) DATASETS(%s)", context.getUserID(), builder.toString().trim()); } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java index d8c48f7c2f1..7b19b094a61 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java @@ -28,6 +28,7 @@ import ch.systemsx.cisd.common.spring.HttpInvokerUtils; import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.generic.shared.IETLLIMSService; +import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServerInfo; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalData; @@ -51,44 +52,67 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, EncapsulatedOpenBISService.class); - private final int port; - - private final String username; - - private final String password; - private final IETLLIMSService service; private final SessionTokenManager sessionTokenManager; + private int port; + + private String username; + + private String password; + + private String downloadUrl; + + private String dataStoreCode; + private String sessionToken; // NOTE: can be changed in parallel by different threads private Integer version; private DatabaseInstancePE homeDatabaseInstance; - public EncapsulatedOpenBISService(SessionTokenManager sessionTokenManager, String serverURL, - int port, String username, String password) + public EncapsulatedOpenBISService(SessionTokenManager sessionTokenManager, String serverURL) { this(sessionTokenManager, HttpInvokerUtils.createServiceStub(IETLLIMSService.class, - serverURL + "/rmi-etl", 5), port, username, password); + serverURL + "/rmi-etl", 5)); } public EncapsulatedOpenBISService(SessionTokenManager sessionTokenManager, - IETLLIMSService service, int port, String username, String password) + IETLLIMSService service) { assert sessionTokenManager != null : "Unspecified session token manager."; assert service != null : "Given IETLLIMSService implementation can not be null."; - assert username != null : "Given username can not be null."; - assert password != null : "Given password can not be null."; this.sessionTokenManager = sessionTokenManager; this.service = service; + } + + public final void setPort(int port) + { this.port = port; + } + + public final void setUsername(String username) + { this.username = username; + } + + public final void setPassword(String password) + { this.password = password; } - + + public final void setDownloadUrl(String downloadUrl) + { + this.downloadUrl = downloadUrl; + } + + public final void setDataStoreCode(String dataStoreCode) + { + this.dataStoreCode = dataStoreCode; + } + public Object getObject() throws Exception { return this; @@ -118,7 +142,12 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer "Authentication failure to openBIS server. Most probable cause: user or password are invalid."; throw new ConfigurationFailureException(msg); } - service.registerDataStoreServer(sessionToken, port, sessionTokenManager.drawSessionToken()); + DataStoreServerInfo dataStoreServerInfo = new DataStoreServerInfo(); + dataStoreServerInfo.setPort(port); + dataStoreServerInfo.setDataStoreCode(dataStoreCode); + dataStoreServerInfo.setDownloadUrl(downloadUrl); + dataStoreServerInfo.setSessionToken(sessionTokenManager.drawSessionToken()); + service.registerDataStoreServer(sessionToken, dataStoreServerInfo); } private final void checkSessionToken() diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java index f5ca427307c..0fc18e3f573 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/TransferredDataSetHandlerTest.java @@ -57,10 +57,10 @@ import ch.systemsx.cisd.common.mail.JavaMailProperties; import ch.systemsx.cisd.common.test.LogMonitoringAppender; import ch.systemsx.cisd.openbis.dss.generic.server.EncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.server.SessionTokenManager; -import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.generic.shared.IETLLIMSService; import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetType; +import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServerInfo; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalData; @@ -267,10 +267,12 @@ public final class TransferredDataSetHandlerTest extends AbstractFileSystemTestC final IETLServerPlugin plugin = new ETLServerPlugin(new MockDataSetInfoExtractor(dataSetInfoExtractor), typeExtractor, storageProcessor); - final IEncapsulatedOpenBISService authorizedLimsService = - new EncapsulatedOpenBISService(new SessionTokenManager(), limsService, 0, "u", "p"); + final EncapsulatedOpenBISService authorizedLimsService = + new EncapsulatedOpenBISService(new SessionTokenManager(), limsService); + authorizedLimsService.setUsername("u"); + authorizedLimsService.setPassword("p"); handler = - new TransferredDataSetHandler(null, storageProcessor, plugin, + new TransferredDataSetHandler(null, "dss", storageProcessor, plugin, authorizedLimsService, mailClient, true, true); handler.setProcessorFactories(map); @@ -389,7 +391,7 @@ public final class TransferredDataSetHandlerTest extends AbstractFileSystemTestC will(returnValue(SESSION_TOKEN)); one(limsService).registerDataStoreServer(with(equal(SESSION_TOKEN)), - with(equal(0)), with(any(String.class))); + with(any(DataStoreServerInfo.class))); atLeast(1).of(limsService).tryToGetBaseExperiment(SESSION_TOKEN, dataSetInformation.getSampleIdentifier()); diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISServiceTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISServiceTest.java index 08e63deba5d..bfd00bdfc25 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISServiceTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISServiceTest.java @@ -16,6 +16,8 @@ package ch.systemsx.cisd.openbis.dss.generic.server; +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; import org.jmock.Expectations; import org.jmock.Mockery; import org.testng.annotations.AfterMethod; @@ -23,14 +25,11 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import ch.systemsx.cisd.common.exceptions.InvalidSessionException; -import ch.systemsx.cisd.openbis.dss.generic.server.EncapsulatedOpenBISService; -import ch.systemsx.cisd.openbis.dss.generic.server.SessionTokenManager; -import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.generic.shared.IETLLIMSService; +import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServerInfo; import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; -import ch.systemsx.cisd.openbis.generic.shared.dto.types.ProcedureTypeCode; /** * Test cases for corresponding {@link EncapsulatedOpenBISService} class. @@ -39,11 +38,17 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.types.ProcedureTypeCode; */ public class EncapsulatedOpenBISServiceTest { + private static final int PORT = 4711; + + private static final String DOWNLOAD_URL = "download-url"; + + private static final String DATA_STORE_CODE = "data-store1"; + private Mockery context; private IETLLIMSService limsService; - private IEncapsulatedOpenBISService encapsulatedLimsService; + private EncapsulatedOpenBISService encapsulatedLimsService; private static final String LIMS_USER = "testuser"; @@ -61,7 +66,7 @@ public class EncapsulatedOpenBISServiceTest { exp.one(limsService).authenticate(LIMS_USER, LIMS_PASSWORD); exp.one(limsService).registerDataStoreServer(exp.with(Expectations.equal("")), - exp.with(Expectations.equal(0)), exp.with(Expectations.any(String.class))); + exp.with(Expectations.any(DataStoreServerInfo.class))); exp.one(limsService).tryToGetBaseExperiment("", dataSetInformation.getSampleIdentifier()); } @@ -76,12 +81,35 @@ public class EncapsulatedOpenBISServiceTest one(limsService).authenticate(LIMS_USER, LIMS_PASSWORD); one(limsService).registerDataStoreServer( - with(equal("")), with(equal(0)), with(any(String.class))); + with(equal("")), with(new BaseMatcher<DataStoreServerInfo>() + { + + public boolean matches(Object item) + { + if (item instanceof DataStoreServerInfo) + { + DataStoreServerInfo info = (DataStoreServerInfo) item; + return DATA_STORE_CODE.equals(info.getDataStoreCode()) + && DOWNLOAD_URL.equals(info.getDownloadUrl()) + && PORT == info.getPort(); + } + return false; + } + + public void describeTo(Description description) + { + } + + })); } }); encapsulatedLimsService = - new EncapsulatedOpenBISService(new SessionTokenManager(), limsService, 0, - LIMS_USER, LIMS_PASSWORD); + new EncapsulatedOpenBISService(new SessionTokenManager(), limsService); + encapsulatedLimsService.setUsername(LIMS_USER); + encapsulatedLimsService.setPassword(LIMS_PASSWORD); + encapsulatedLimsService.setDataStoreCode(DATA_STORE_CODE); + encapsulatedLimsService.setDownloadUrl(DOWNLOAD_URL); + encapsulatedLimsService.setPort(PORT); } @AfterMethod @@ -126,7 +154,6 @@ public class EncapsulatedOpenBISServiceTest public final void testRegisterDataSet() { final DataSetInformation dataSetInfo = createDataSetInformation(); - final ProcedureTypeCode procedureTypeCode = ProcedureTypeCode.DATA_ACQUISITION; final ExternalData data = new ExternalData(); context.checking(new Expectations() { -- GitLab