From 1d070b4c2b74ab86772b294b0b1066d8e44b5525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Prunayre?= Date: Fri, 7 May 2021 13:17:06 +0200 Subject: [PATCH 1/6] MBean registration / Ignore existing When running multiple GeoNetwork on same Jetty, the following error will happen on startup ``` 2021-05-04 14:30:51,431 ERROR [jeeves] - JeevesContextLoaderListener: Error creating bean with name 'org.fao.geonet.camelPeriodicProducer.MessageProducerFactory#0': Invocation of init method failed; nested exception is org.quartz.SchedulerException: Unable to register scheduler with MBeanServer. [See nested exception: javax.management.InstanceAlreadyExistsException: quartz:type=QuartzScheduler,name=DefaultQuartzScheduler-harvest-wfs,instance=NON_CLUSTERED] ``` and one of the web app will not be available. Using IGNORE_EXISTING registration policy seems to solve the issue but is maybe not the perfect fix ? --- core/src/main/resources/config-spring-geonetwork.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/resources/config-spring-geonetwork.xml b/core/src/main/resources/config-spring-geonetwork.xml index 744c6795423..e05655e8239 100644 --- a/core/src/main/resources/config-spring-geonetwork.xml +++ b/core/src/main/resources/config-spring-geonetwork.xml @@ -221,6 +221,7 @@ + From 3f05204e29c86764d35d04150bc4f0eb09676dc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Prunayre?= Date: Fri, 7 May 2021 15:24:56 +0200 Subject: [PATCH 2/6] Mbean registration / Start the app even if error during quartz init --- .../MessageProducerFactory.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/workers/camelPeriodicProducer/src/main/java/org/fao/geonet/camelPeriodicProducer/MessageProducerFactory.java b/workers/camelPeriodicProducer/src/main/java/org/fao/geonet/camelPeriodicProducer/MessageProducerFactory.java index 83706ee849e..59de34e4fe7 100644 --- a/workers/camelPeriodicProducer/src/main/java/org/fao/geonet/camelPeriodicProducer/MessageProducerFactory.java +++ b/workers/camelPeriodicProducer/src/main/java/org/fao/geonet/camelPeriodicProducer/MessageProducerFactory.java @@ -27,10 +27,15 @@ import org.apache.camel.component.quartz2.QuartzComponent; import org.apache.camel.component.quartz2.QuartzEndpoint; import org.apache.camel.model.RouteDefinition; +import org.fao.geonet.harvester.wfsfeatures.worker.WFSHarvesterRouteBuilder; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.TriggerBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.EnableMBeanExport; +import org.springframework.jmx.support.RegistrationPolicy; import javax.annotation.PostConstruct; @@ -42,9 +47,15 @@ public class MessageProducerFactory { @Autowired protected QuartzComponent quartzComponent; + private static Logger LOGGER = LoggerFactory.getLogger(WFSHarvesterRouteBuilder.LOGGER_NAME); + @PostConstruct public void init() throws Exception { - quartzComponent.start(); + try { + quartzComponent.start(); + } catch (Exception e) { + LOGGER.error(e.getMessage()); + } } public void registerAndStart(MessageProducer messageProducer) throws Exception { From c499106c95b8c4dc03dea5b9f77dcc21a98504e3 Mon Sep 17 00:00:00 2001 From: Francois Prunayre Date: Wed, 30 Jun 2021 15:42:16 +0200 Subject: [PATCH 3/6] MBean registration / Unique ids. --- .../kernel/MetadataIndexerProcessor.java | 2 +- .../datamanager/base/BaseMetadataManager.java | 2 +- .../index/BatchOpsMetadataReindexer.java | 14 +++++++----- .../resources/config-spring-geonetwork.xml | 1 + .../harvest/harvester/AbstractHarvester.java | 4 ++-- .../org/fao/geonet/api/links/EmptySlot.java | 8 ++++--- .../org/fao/geonet/api/links/LinksApi.java | 11 ++++++++-- .../fao/geonet/api/links/MAnalyseProcess.java | 8 +++++-- .../geonet/api/processing/EmptySlotBatch.java | 2 +- .../MInspireEtfValidateProcess.java | 10 ++++++--- .../processing/MetadataSearchAndReplace.java | 2 +- .../fao/geonet/api/processing/ProcessApi.java | 6 ++++- .../geonet/api/processing/ValidateApi.java | 6 ++--- .../geonet/api/processing/XslProcessApi.java | 8 +++++-- .../geonet/api/records/MetadataIndexApi.java | 7 +++++- .../geonet/api/registries/DirectoryApi.java | 6 ++--- .../BatchOpsMetadatReindexerTest.java | 12 +++++----- .../admin/batch/BatchTaskDirective.js | 8 ++++--- .../admin/index/IndexingTaskDirective.js | 8 ++++--- .../js/admin/DashboardRecordLinkController.js | 9 +++++--- .../js/admin/HarvestSettingsController.js | 6 ++--- workers/camelPeriodicProducer/pom.xml | 8 +++++++ .../MessageProducerFactory.java | 22 +++++++++++++------ .../MessageProducerService.java | 2 +- .../resources/config-spring-geonetwork.xml | 15 ++++++++++++- 25 files changed, 128 insertions(+), 59 deletions(-) diff --git a/core/src/main/java/org/fao/geonet/kernel/MetadataIndexerProcessor.java b/core/src/main/java/org/fao/geonet/kernel/MetadataIndexerProcessor.java index a3e1fcc0f37..e0bc0b7391f 100644 --- a/core/src/main/java/org/fao/geonet/kernel/MetadataIndexerProcessor.java +++ b/core/src/main/java/org/fao/geonet/kernel/MetadataIndexerProcessor.java @@ -53,7 +53,7 @@ public MetadataIndexerProcessor(DataManager dm) { this.dm = dm; } - public abstract void process() throws Exception; + public abstract void process(String catalogueId) throws Exception; protected DataManager getDataManager() { return dm; diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java index 1aac8cec5f5..e6c7b555033 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java @@ -238,7 +238,7 @@ public void synchronizeDbWithIndex(ServiceContext context, Boolean force, Boolea Set integerList = toIndex.stream().map(Integer::parseInt).collect(Collectors.toSet()); new BatchOpsMetadataReindexer( context.getBean(DataManager.class), - integerList).process(false); + integerList).process(settingManager.getSiteId(), false); } else { metadataIndexer.batchIndexInThreadPool(context, toIndex); } diff --git a/core/src/main/java/org/fao/geonet/kernel/search/index/BatchOpsMetadataReindexer.java b/core/src/main/java/org/fao/geonet/kernel/search/index/BatchOpsMetadataReindexer.java index a497a9431c1..45a2f1646c3 100644 --- a/core/src/main/java/org/fao/geonet/kernel/search/index/BatchOpsMetadataReindexer.java +++ b/core/src/main/java/org/fao/geonet/kernel/search/index/BatchOpsMetadataReindexer.java @@ -110,17 +110,19 @@ public int getInError() { return inError.intValue(); } - public void process(boolean runInCurrentThread) throws Exception { - wrapAsyncProcess(runInCurrentThread); + public void process(String catalogueId, boolean runInCurrentThread) throws Exception { + wrapAsyncProcess(catalogueId, runInCurrentThread); allCompleted.get(); } - public void process() throws Exception { - process(false); + public void process(String catalogueId) throws Exception { + process(catalogueId, false); } - public String wrapAsyncProcess(boolean runInCurrentThread) throws Exception { - probeName = new ObjectName(String.format("geonetwork:name=indexing-task,idx=%s", this.hashCode())); + public String wrapAsyncProcess(String catalogueId, boolean runInCurrentThread) throws Exception { + probeName = new ObjectName(String.format( + "geonetwork-%s:name=indexing-task,idx=%s", + catalogueId, this.hashCode())); exporter.registerManagedResource(this, probeName); return processAsync(runInCurrentThread); } diff --git a/core/src/main/resources/config-spring-geonetwork.xml b/core/src/main/resources/config-spring-geonetwork.xml index e05655e8239..8df429aaa65 100644 --- a/core/src/main/resources/config-spring-geonetwork.xml +++ b/core/src/main/resources/config-spring-geonetwork.xml @@ -223,6 +223,7 @@ + diff --git a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/AbstractHarvester.java b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/AbstractHarvester.java index f514708afc2..04d4e67a5f1 100644 --- a/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/AbstractHarvester.java +++ b/harvesters/src/main/java/org/fao/geonet/kernel/harvest/harvester/AbstractHarvester.java @@ -601,7 +601,7 @@ public HarvestWithIndexProcessor(DataManager dm, Logger logger) { } @Override - public void process() throws Exception { + public void process(String catalogueId) throws Exception { doHarvest(logger); } } @@ -673,7 +673,7 @@ protected OperResult harvest() { logger.info("Started harvesting from node : " + nodeName); HarvestWithIndexProcessor h = new HarvestWithIndexProcessor(dataMan, logger); // todo check (was: processwithfastindexing) - h.process(); + h.process(settingManager.getSiteId()); logger.info("Ended harvesting from node : " + nodeName); if (getParams().isOneRunOnly()) { diff --git a/services/src/main/java/org/fao/geonet/api/links/EmptySlot.java b/services/src/main/java/org/fao/geonet/api/links/EmptySlot.java index bd9d7b21df5..7b883682fc1 100644 --- a/services/src/main/java/org/fao/geonet/api/links/EmptySlot.java +++ b/services/src/main/java/org/fao/geonet/api/links/EmptySlot.java @@ -11,9 +11,11 @@ public class EmptySlot implements SelfNaming { private ObjectName objectName; - public EmptySlot(int i) { + public EmptySlot(String catalogueId, int i) { try { - objectName = new ObjectName(String.format("geonetwork:name=url-check,idx=empty-slot-%d", i)); + objectName = new ObjectName(String.format( + "geonetwork-%s:name=url-check,idx=empty-slot-%d", + catalogueId, i)); } catch (MalformedObjectNameException e) { e.printStackTrace(); } @@ -23,4 +25,4 @@ public EmptySlot(int i) { public ObjectName getObjectName() throws MalformedObjectNameException { return objectName; } -} \ No newline at end of file +} diff --git a/services/src/main/java/org/fao/geonet/api/links/LinksApi.java b/services/src/main/java/org/fao/geonet/api/links/LinksApi.java index 74a6426bdf9..29daf2e97ef 100644 --- a/services/src/main/java/org/fao/geonet/api/links/LinksApi.java +++ b/services/src/main/java/org/fao/geonet/api/links/LinksApi.java @@ -45,6 +45,7 @@ import org.fao.geonet.kernel.AccessManager; import org.fao.geonet.kernel.DataManager; import org.fao.geonet.kernel.datamanager.IMetadataUtils; +import org.fao.geonet.kernel.setting.SettingManager; import org.fao.geonet.kernel.url.UrlAnalyzer; import org.fao.geonet.repository.LinkRepository; import org.fao.geonet.repository.MetadataRepository; @@ -105,13 +106,15 @@ public class LinksApi { MBeanExporter mBeanExporter; @Autowired AccessManager accessManager; + @Autowired + SettingManager settingManager; private ArrayDeque mAnalyseProcesses = new ArrayDeque<>(NUMBER_OF_SUBSEQUENT_PROCESS_MBEAN_TO_KEEP); @PostConstruct public void iniMBeansSlidingWindowWithEmptySlot() { for (int i = 0; i < NUMBER_OF_SUBSEQUENT_PROCESS_MBEAN_TO_KEEP; i++) { - EmptySlot emptySlot = new EmptySlot(i); + EmptySlot emptySlot = new EmptySlot(settingManager.getSiteId(), i); mAnalyseProcesses.addFirst(emptySlot); try { mBeanExporter.registerManagedResource(emptySlot, emptySlot.getObjectName()); @@ -364,7 +367,11 @@ public ResponseEntity purgeAll() throws IOException, JDOMException { } private MAnalyseProcess getRegistredMAnalyseProcess() { - MAnalyseProcess mAnalyseProcess = new MAnalyseProcess(linkRepository, metadataRepository, urlAnalyser, appContext); + MAnalyseProcess mAnalyseProcess = new MAnalyseProcess( + settingManager.getSiteId(), + linkRepository, + metadataRepository, + urlAnalyser, appContext); mBeanExporter.registerManagedResource(mAnalyseProcess, mAnalyseProcess.getObjectName()); try { mBeanExporter.unregisterManagedResource(mAnalyseProcesses.removeLast().getObjectName()); diff --git a/services/src/main/java/org/fao/geonet/api/links/MAnalyseProcess.java b/services/src/main/java/org/fao/geonet/api/links/MAnalyseProcess.java index 54033b5fbcb..989ea4c767d 100644 --- a/services/src/main/java/org/fao/geonet/api/links/MAnalyseProcess.java +++ b/services/src/main/java/org/fao/geonet/api/links/MAnalyseProcess.java @@ -46,13 +46,17 @@ public class MAnalyseProcess implements SelfNaming { private long testLinkDate = Long.MAX_VALUE; - public MAnalyseProcess(LinkRepository linkRepository, MetadataRepository metadataRepository, UrlAnalyzer urlAnalyser, ApplicationContext appContext) { + public MAnalyseProcess(String catalogueId, + LinkRepository linkRepository, + MetadataRepository metadataRepository, + UrlAnalyzer urlAnalyser, + ApplicationContext appContext) { this.linkRepository = linkRepository; this.metadataRepository = metadataRepository; this.urlAnalyser = urlAnalyser; this.appContext = appContext; try { - this.probeName = new ObjectName(String.format("geonetwork:name=url-check,idx=%s", this.hashCode())); + this.probeName = new ObjectName(String.format("geonetwork-%s:name=url-check,idx=%s", catalogueId, this.hashCode())); } catch (MalformedObjectNameException e) { e.printStackTrace(); } diff --git a/services/src/main/java/org/fao/geonet/api/processing/EmptySlotBatch.java b/services/src/main/java/org/fao/geonet/api/processing/EmptySlotBatch.java index 2ce5a73a968..edf33a052e0 100644 --- a/services/src/main/java/org/fao/geonet/api/processing/EmptySlotBatch.java +++ b/services/src/main/java/org/fao/geonet/api/processing/EmptySlotBatch.java @@ -13,7 +13,7 @@ public class EmptySlotBatch implements SelfNaming { public EmptySlotBatch(String name, int i) { try { - objectName = new ObjectName(String.format("geonetwork:name=%s,idx=empty-slot-%d", name, i)); + objectName = new ObjectName(String.format("geonetwork-%s:idx=empty-slot-%d", name, i)); } catch (MalformedObjectNameException e) { e.printStackTrace(); } diff --git a/services/src/main/java/org/fao/geonet/api/processing/MInspireEtfValidateProcess.java b/services/src/main/java/org/fao/geonet/api/processing/MInspireEtfValidateProcess.java index b6b7708bc68..d071d6de706 100644 --- a/services/src/main/java/org/fao/geonet/api/processing/MInspireEtfValidateProcess.java +++ b/services/src/main/java/org/fao/geonet/api/processing/MInspireEtfValidateProcess.java @@ -60,14 +60,18 @@ public class MInspireEtfValidateProcess implements SelfNaming { private long analyseMdDate = Long.MAX_VALUE; - public MInspireEtfValidateProcess(String URL, - ServiceContext serviceContext, ApplicationContext appContext) { + public MInspireEtfValidateProcess(String catalogueId, + String URL, + ServiceContext serviceContext, + ApplicationContext appContext) { this.URL = URL; this.serviceContext = serviceContext; this.appContext = appContext; try { - this.probeName = new ObjectName(String.format("geonetwork:name=batch-etf-inspire,idx=%s", this.hashCode())); + this.probeName = new ObjectName(String.format( + "geonetwork-%s:name=batch-etf-inspire,idx=%s", + catalogueId, this.hashCode())); } catch (MalformedObjectNameException e) { e.printStackTrace(); } diff --git a/services/src/main/java/org/fao/geonet/api/processing/MetadataSearchAndReplace.java b/services/src/main/java/org/fao/geonet/api/processing/MetadataSearchAndReplace.java index f4f1eedceb4..ab7772769df 100644 --- a/services/src/main/java/org/fao/geonet/api/processing/MetadataSearchAndReplace.java +++ b/services/src/main/java/org/fao/geonet/api/processing/MetadataSearchAndReplace.java @@ -78,7 +78,7 @@ public MetadataSearchAndReplace(DataManager dm, } @Override - public void process() throws Exception { + public void process(String catalogueId) throws Exception { GeonetContext gc = (GeonetContext) context .getHandlerContext(Geonet.CONTEXT_NAME); DataManager dm = gc.getBean(DataManager.class); diff --git a/services/src/main/java/org/fao/geonet/api/processing/ProcessApi.java b/services/src/main/java/org/fao/geonet/api/processing/ProcessApi.java index b1a4ab0930f..358d967989c 100644 --- a/services/src/main/java/org/fao/geonet/api/processing/ProcessApi.java +++ b/services/src/main/java/org/fao/geonet/api/processing/ProcessApi.java @@ -35,6 +35,7 @@ import org.fao.geonet.api.processing.report.ProcessingReport; import org.fao.geonet.api.processing.report.registry.IProcessingReportRegistry; import org.fao.geonet.kernel.DataManager; +import org.fao.geonet.kernel.setting.SettingManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -64,6 +65,9 @@ public class ProcessApi { @Autowired DataManager dataMan; + @Autowired + SettingManager settingManager; + @io.swagger.v3.oas.annotations.Operation( summary = "Get current process reports", description = "When processing, the report is stored in memory and allows to retrieve " + @@ -184,7 +188,7 @@ public MetadataReplacementProcessingReport searchAndReplace( isTesting, isCaseInsensitive, vacuumMode, allParams, ApiUtils.createServiceContext(request), records, report); - m.process(); + m.process(settingManager.getSiteId()); } catch (Exception e) { throw e; } finally { diff --git a/services/src/main/java/org/fao/geonet/api/processing/ValidateApi.java b/services/src/main/java/org/fao/geonet/api/processing/ValidateApi.java index 2f0d5baa7ac..cad940871ab 100644 --- a/services/src/main/java/org/fao/geonet/api/processing/ValidateApi.java +++ b/services/src/main/java/org/fao/geonet/api/processing/ValidateApi.java @@ -207,7 +207,7 @@ public SimpleMetadataProcessingReport validateRecords( // index records BatchOpsMetadataReindexer r = new BatchOpsMetadataReindexer(dataMan, report.getMetadata()); - r.process(true); + r.process(settingManager.getSiteId(), true); } catch (Exception e) { throw e; } finally { @@ -278,7 +278,7 @@ public SimpleMetadataProcessingReport cleanValidationStatus( // index records BatchOpsMetadataReindexer r = new BatchOpsMetadataReindexer(dataMan, report.getMetadata()); - r.process(true); + r.process(settingManager.getSiteId(), true); } catch (Exception e) { throw e; } finally { @@ -344,7 +344,7 @@ public ResponseEntity validateRecordsInspire( private MInspireEtfValidateProcess getRegistredMInspireEtfValidateProcess(ServiceContext serviceContext) { String URL = settingManager.getValue(Settings.SYSTEM_INSPIRE_REMOTE_VALIDATION_URL); - MInspireEtfValidateProcess mAnalyseProcess = new MInspireEtfValidateProcess(URL, serviceContext, appContext); + MInspireEtfValidateProcess mAnalyseProcess = new MInspireEtfValidateProcess(settingManager.getSiteId(), URL, serviceContext, appContext); mBeanExporter.registerManagedResource(mAnalyseProcess, mAnalyseProcess.getObjectName()); try { mBeanExporter.unregisterManagedResource(mAnalyseProcesses.removeLast().getObjectName()); diff --git a/services/src/main/java/org/fao/geonet/api/processing/XslProcessApi.java b/services/src/main/java/org/fao/geonet/api/processing/XslProcessApi.java index 567bd21e661..a802ecaf490 100644 --- a/services/src/main/java/org/fao/geonet/api/processing/XslProcessApi.java +++ b/services/src/main/java/org/fao/geonet/api/processing/XslProcessApi.java @@ -41,6 +41,7 @@ import org.fao.geonet.kernel.DataManager; import org.fao.geonet.kernel.MetadataIndexerProcessor; import org.fao.geonet.kernel.SchemaManager; +import org.fao.geonet.kernel.setting.SettingManager; import org.fao.geonet.utils.Log; import org.fao.geonet.utils.Xml; import org.jdom.Element; @@ -94,6 +95,9 @@ public class XslProcessApi { @Autowired SchemaManager schemaMan; + @Autowired + SettingManager settingManager; + @io.swagger.v3.oas.annotations.Operation( summary = "Preview process result applied to one or more records", description = ApiParams.API_OP_NOTE_PROCESS_PREVIEW + @@ -299,7 +303,7 @@ public XsltMetadataProcessingReport processRecords( ApiUtils.createServiceContext(request), dataMan, records, process, httpSession, siteURL, xslProcessingReport, request, index, updateDateStamp, userSession.getUserIdAsInt()); - m.process(); + m.process(settingManager.getSiteId()); } catch (Exception exception) { xslProcessingReport.addError(exception); @@ -346,7 +350,7 @@ public BatchXslMetadataReindexer(ServiceContext context, } @Override - public void process() throws Exception { + public void process(String catalogueId) throws Exception { DataManager dataMan = context.getBean(DataManager.class); ApplicationContext appContext = ApplicationContextHolder.get(); for (String uuid : this.records) { diff --git a/services/src/main/java/org/fao/geonet/api/records/MetadataIndexApi.java b/services/src/main/java/org/fao/geonet/api/records/MetadataIndexApi.java index c1736e17698..b84cf0c2005 100644 --- a/services/src/main/java/org/fao/geonet/api/records/MetadataIndexApi.java +++ b/services/src/main/java/org/fao/geonet/api/records/MetadataIndexApi.java @@ -37,6 +37,7 @@ import org.fao.geonet.kernel.DataManager; import org.fao.geonet.kernel.SelectionManager; import org.fao.geonet.kernel.search.index.BatchOpsMetadataReindexer; +import org.fao.geonet.kernel.setting.SettingManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -62,6 +63,9 @@ public class MetadataIndexApi { @Autowired DataManager dataManager; + @Autowired + SettingManager settingManager; + @io.swagger.v3.oas.annotations.Operation( summary = "Index a set of records", description = "Index a set of records provided either by a bucket or a list of uuids") @@ -123,7 +127,8 @@ JSONObject index( } } index = ids.size(); - new BatchOpsMetadataReindexer(dataManager, ids).process(false); + new BatchOpsMetadataReindexer(dataManager, ids) + .process(settingManager.getSiteId(), false); JSONObject res = new JSONObject(); res.put("success", true); diff --git a/services/src/main/java/org/fao/geonet/api/registries/DirectoryApi.java b/services/src/main/java/org/fao/geonet/api/registries/DirectoryApi.java index f46658c8073..b9ce5a5a979 100644 --- a/services/src/main/java/org/fao/geonet/api/registries/DirectoryApi.java +++ b/services/src/main/java/org/fao/geonet/api/registries/DirectoryApi.java @@ -307,7 +307,7 @@ private ResponseEntity collectEntries( if (save) { dataManager.flush(); BatchOpsMetadataReindexer r = new BatchOpsMetadataReindexer(dataManager, listOfEntriesInternalId); - r.process(); + r.process(settingManager.getSiteId()); report.close(); return new ResponseEntity<>(report, HttpStatus.CREATED); } else { @@ -496,7 +496,7 @@ private ResponseEntity updateRecordEntries( dataManager.flush(); BatchOpsMetadataReindexer r = new BatchOpsMetadataReindexer(dataManager, listOfRecordInternalId); - r.process(); + r.process(settingManager.getSiteId()); report.close(); return new ResponseEntity<>(report, HttpStatus.CREATED); } else { @@ -714,7 +714,7 @@ public SimpleMetadataProcessingReport importSpatialEntries( )); BatchOpsMetadataReindexer r = new BatchOpsMetadataReindexer(dataManager, listOfRecordInternalId); - r.process(); + r.process(settingManager.getSiteId()); errors.forEach((k, v) -> report.addError(v) diff --git a/services/src/test/java/org/fao/geonet/services/metadata/BatchOpsMetadatReindexerTest.java b/services/src/test/java/org/fao/geonet/services/metadata/BatchOpsMetadatReindexerTest.java index 937c3e95ebd..a2065d4d34a 100644 --- a/services/src/test/java/org/fao/geonet/services/metadata/BatchOpsMetadatReindexerTest.java +++ b/services/src/test/java/org/fao/geonet/services/metadata/BatchOpsMetadatReindexerTest.java @@ -39,7 +39,7 @@ public void syncMonoThread() throws Exception { Set toIndex = createMetadataToIndex(); BatchOpsMetadataReindexer toTest = new BatchOpsMetadataReindexer(mockDataMan, toIndex); - toTest.process(false); + toTest.process("siteId", false); ArgumentCaptor metadataIdCaptor = captureIndexationLaunched(mockDataMan); assertEquals("1-2-3-4", metadataIdCaptor.getAllValues().stream().collect(Collectors.joining("-"))); @@ -56,7 +56,7 @@ public void syncMultiThread() throws Exception { Set toIndex = createMetadataToIndex(); BatchOpsMetadataReindexer toTest = new BatchOpsMetadataReindexer(mockDataMan, toIndex); - toTest.process(false); + toTest.process("siteId", false); ArgumentCaptor metadataIdCaptor = captureIndexationLaunched(mockDataMan); assertEquals("1-2-3-4", metadataIdCaptor.getAllValues().stream().sorted().collect(Collectors.joining("-"))); @@ -72,7 +72,7 @@ public void syncManyThreadButRunInCurrent() throws Exception { Set toIndex = createMetadataToIndex(); BatchOpsMetadataReindexer toTest = new BatchOpsMetadataReindexer(mockDataMan, toIndex); - toTest.process(true); + toTest.process("siteId", true); ArgumentCaptor metadataIdCaptor = captureIndexationLaunched(mockDataMan); assertEquals("1-2-3-4", metadataIdCaptor.getAllValues().stream().sorted().collect(Collectors.joining("-"))); @@ -93,7 +93,7 @@ public void asyncMonoThread() throws Exception { assertEquals(0, toTest.getProcessed()); assertEquals(4, toTest.getToProcessCount()); - toTest.wrapAsyncProcess(false); + toTest.wrapAsyncProcess("siteId", false); latch.countDown(); Thread.sleep(500); @@ -118,7 +118,7 @@ public void asyncMultiThread() throws Exception { assertEquals(0, toTest.getProcessed()); assertEquals(4, toTest.getToProcessCount()); - toTest.wrapAsyncProcess(false); + toTest.wrapAsyncProcess("siteId",false); latch.countDown(); Thread.sleep(500); @@ -143,7 +143,7 @@ public void asyncManyThreadButRunInCurrent() throws Exception { @Override public void run() { try { - toTest.wrapAsyncProcess(true); + toTest.wrapAsyncProcess("siteId",true); } catch (Exception e) { e.printStackTrace(); } diff --git a/web-ui/src/main/resources/catalog/components/admin/batch/BatchTaskDirective.js b/web-ui/src/main/resources/catalog/components/admin/batch/BatchTaskDirective.js index 5d9733f10b0..60558e152c9 100644 --- a/web-ui/src/main/resources/catalog/components/admin/batch/BatchTaskDirective.js +++ b/web-ui/src/main/resources/catalog/components/admin/batch/BatchTaskDirective.js @@ -112,8 +112,8 @@ * */ module.directive('gnBatchTasksContainer', [ - '$http', - function ($http) { + '$http', 'gnConfig', + function ($http, gnConfig) { return { restrict: 'E', scope: { @@ -133,7 +133,9 @@ var me = this; this.refresh = function () { - $http.get('../../jolokia/read/geonetwork:name=' + $scope.task + ',idx=*') + $http.get('../../jolokia/read/' + + 'geonetwork-' + gnConfig['system.site.siteId'] + + ':name=' + $scope.task + ',idx=*') .then(function successCallback(result) { me.tasks.length = 0; diff --git a/web-ui/src/main/resources/catalog/components/admin/index/IndexingTaskDirective.js b/web-ui/src/main/resources/catalog/components/admin/index/IndexingTaskDirective.js index 3b49dc31bcf..c2e193325fb 100644 --- a/web-ui/src/main/resources/catalog/components/admin/index/IndexingTaskDirective.js +++ b/web-ui/src/main/resources/catalog/components/admin/index/IndexingTaskDirective.js @@ -111,8 +111,8 @@ * */ module.directive('gnIndexingTasksContainer', [ - '$http', - function ($http) { + '$http', 'gnConfig', + function ($http, gnConfig) { return { restrict: 'E', scope: {}, @@ -128,7 +128,9 @@ var me = this; this.refresh = function () { - $http.get('../../jolokia/read/geonetwork:name=indexing-task,idx=*') + $http.get('../../jolokia/read/' + + 'geonetwork-' + gnConfig['system.site.siteId'] + + ':name=indexing-task,idx=*') .then(function (result) { //console.log(result); me.tasks.length = 0; diff --git a/web-ui/src/main/resources/catalog/js/admin/DashboardRecordLinkController.js b/web-ui/src/main/resources/catalog/js/admin/DashboardRecordLinkController.js index 3d20c8475cc..9c4def3fb89 100644 --- a/web-ui/src/main/resources/catalog/js/admin/DashboardRecordLinkController.js +++ b/web-ui/src/main/resources/catalog/js/admin/DashboardRecordLinkController.js @@ -187,7 +187,8 @@ var ICON = ['fa-question', 'fa-question', 'fa-spinner fa-spin', 'fa-check', 'fa-exclamation-triangle']; var CLASS = ['', '', '', 'success', 'warning']; - module.directive('gnDashboardRecordLinksProcessesContainer', ['$http', function($http) { + module.directive('gnDashboardRecordLinksProcessesContainer', ['$http', 'gnConfig', + function($http, gnConfig) { return { restrict: 'E', scope: {}, @@ -219,7 +220,9 @@ }; this.refresh = function() { - $http.get('../../jolokia/read/geonetwork:name=url-check,idx=*').then(function(result) { + $http.get('../../jolokia/read/' + + 'geonetwork-' + gnConfig['system.site.siteId'] + + ':name=url-check,idx=*').then(function(result) { if (!result.data || !result.data.value) { return; } @@ -256,7 +259,7 @@ }); } }); - setTimeout(me.refresh, 1000); + setTimeout(me.refresh, 5000); }); }; diff --git a/web-ui/src/main/resources/catalog/js/admin/HarvestSettingsController.js b/web-ui/src/main/resources/catalog/js/admin/HarvestSettingsController.js index fd7cea29baf..7932c49d93d 100644 --- a/web-ui/src/main/resources/catalog/js/admin/HarvestSettingsController.js +++ b/web-ui/src/main/resources/catalog/js/admin/HarvestSettingsController.js @@ -42,10 +42,10 @@ module.controller('GnHarvestSettingsController', [ '$scope', '$q', '$http', '$translate', '$injector', '$rootScope', 'gnSearchManagerService', 'gnUtilityService', '$timeout', - 'Metadata', 'gnMapsManager', 'gnGlobalSettings', + 'Metadata', 'gnMapsManager', 'gnGlobalSettings', 'gnConfig', function($scope, $q, $http, $translate, $injector, $rootScope, gnSearchManagerService, gnUtilityService, $timeout, - Metadata, gnMapsManager, gnGlobalSettings) { + Metadata, gnMapsManager, gnGlobalSettings, gnConfig) { $scope.searchObj = { internal: true, @@ -385,7 +385,7 @@ }; $scope.assignHarvestedRecordToLocalNode = function() { $http.post('../api/harvesters/' + $scope.harvesterSelected.site.uuid + - '/assign?source=' + $scope.info['system/site/siteId']) + '/assign?source=' + gnConfig['system.site.siteId']) .success(function(data) { $scope.harvesterSelected = {}; $scope.harvesterUpdated = false; diff --git a/workers/camelPeriodicProducer/pom.xml b/workers/camelPeriodicProducer/pom.xml index 4fe971a943d..6c061c27dc5 100644 --- a/workers/camelPeriodicProducer/pom.xml +++ b/workers/camelPeriodicProducer/pom.xml @@ -57,5 +57,13 @@ test-jar test + + org.quartz-scheduler + quartz + + + org.quartz-scheduler + quartz + diff --git a/workers/camelPeriodicProducer/src/main/java/org/fao/geonet/camelPeriodicProducer/MessageProducerFactory.java b/workers/camelPeriodicProducer/src/main/java/org/fao/geonet/camelPeriodicProducer/MessageProducerFactory.java index 59de34e4fe7..74120762b24 100644 --- a/workers/camelPeriodicProducer/src/main/java/org/fao/geonet/camelPeriodicProducer/MessageProducerFactory.java +++ b/workers/camelPeriodicProducer/src/main/java/org/fao/geonet/camelPeriodicProducer/MessageProducerFactory.java @@ -28,14 +28,13 @@ import org.apache.camel.component.quartz2.QuartzEndpoint; import org.apache.camel.model.RouteDefinition; import org.fao.geonet.harvester.wfsfeatures.worker.WFSHarvesterRouteBuilder; +import org.fao.geonet.kernel.setting.SettingManager; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.TriggerBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.EnableMBeanExport; -import org.springframework.jmx.support.RegistrationPolicy; import javax.annotation.PostConstruct; @@ -46,6 +45,8 @@ public class MessageProducerFactory { protected RouteBuilder routeBuilder; @Autowired protected QuartzComponent quartzComponent; + @Autowired + protected SettingManager settingManager; private static Logger LOGGER = LoggerFactory.getLogger(WFSHarvesterRouteBuilder.LOGGER_NAME); @@ -59,14 +60,15 @@ public void init() throws Exception { } public void registerAndStart(MessageProducer messageProducer) throws Exception { - quartzComponent.createEndpoint("quartz2://" + messageProducer.getId()); + quartzComponent.createEndpoint(buildFrom(messageProducer.getId())); writeRoute(messageProducer); reschedule(messageProducer); } public void reschedule(MessageProducer messageProducer) throws Exception { QuartzEndpoint toReschedule = (QuartzEndpoint) routeBuilder.getContext().getEndpoints().stream() - .filter(x -> x.getEndpointKey().compareTo("quartz2://" + messageProducer.getId()) == 0).findFirst().get(); + .filter(x -> x.getEndpointKey().compareTo( + buildFrom(messageProducer.getId())) == 0).findFirst().get(); String msgCronExpression = messageProducer.getCronExpession() == null ? NEVER : messageProducer.getCronExpession(); CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(toReschedule.getTriggerKey()).withSchedule(CronScheduleBuilder.cronSchedule(msgCronExpression)).build(); @@ -83,12 +85,18 @@ public void changeMessageAndReschedule(MessageProducer messageProducer) throws E public void destroy(Long id) throws Exception { routeBuilder.getContext().removeRouteDefinition(findRoute(id)); - routeBuilder.getContext().removeEndpoints("quartz2://" + id); + routeBuilder.getContext().removeEndpoints(buildFrom(id)); + } + + private String buildFrom(Long id) { + return String.format("quartz2://%s-%s", + settingManager.getSiteId(), + id); } private void writeRoute(MessageProducer messageProducer) throws Exception { RouteDefinition routeDefinition = routeBuilder - .from("quartz2://" + messageProducer.getId()) + .from(buildFrom(messageProducer.getId())) .noAutoStartup() .setBody(routeBuilder.constant(messageProducer.getMessage())) .to(messageProducer.getTargetUri()); @@ -104,6 +112,6 @@ private RouteDefinition findRoute(Long id) { } private boolean routeInputHasQuart2RouteIdUrl(RouteDefinition route, Long id) { - return route.getInputs().size() == 1 && route.getInputs().get(0).getUri().equalsIgnoreCase("quartz2://" + id); + return route.getInputs().size() == 1 && route.getInputs().get(0).getUri().equalsIgnoreCase(buildFrom(id)); } } diff --git a/workers/camelPeriodicProducer/src/main/java/org/fao/geonet/camelPeriodicProducer/MessageProducerService.java b/workers/camelPeriodicProducer/src/main/java/org/fao/geonet/camelPeriodicProducer/MessageProducerService.java index b097ac92104..d4709610171 100644 --- a/workers/camelPeriodicProducer/src/main/java/org/fao/geonet/camelPeriodicProducer/MessageProducerService.java +++ b/workers/camelPeriodicProducer/src/main/java/org/fao/geonet/camelPeriodicProducer/MessageProducerService.java @@ -87,7 +87,7 @@ public synchronized void configure() { try { messageProducerFactory.registerAndStart(buildWfsHarvesterParameterMessageProducer(messageProducerEntity)); } catch (Exception e) { - LOGGER.error("failed to initialise persisted quartz wfs harvester command messages producer, id: ({}).", messageProducerEntity.getId()); + LOGGER.error("Failed to initialise persisted quartz wfs harvester command messages producer, id: ({}).", messageProducerEntity.getId()); } }); isConfigured = true; diff --git a/workers/camelPeriodicProducer/src/main/resources/config-spring-geonetwork.xml b/workers/camelPeriodicProducer/src/main/resources/config-spring-geonetwork.xml index 06f44c9a273..c8ad7d3d8d2 100644 --- a/workers/camelPeriodicProducer/src/main/resources/config-spring-geonetwork.xml +++ b/workers/camelPeriodicProducer/src/main/resources/config-spring-geonetwork.xml @@ -28,8 +28,21 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> + + + + geonetwork-harvest-wfs + 2 + + + + + + + + - " From 1b9ca838e15cc18d0435eb9626afeb65141f9895 Mon Sep 17 00:00:00 2001 From: Francois Prunayre Date: Wed, 22 Sep 2021 12:24:22 +0200 Subject: [PATCH 4/6] MBean registration / Unique ids / Fix test. --- workers/camelPeriodicProducer/pom.xml | 7 +++-- .../resources/config-spring-geonetwork.xml | 2 +- .../MessageProducerTest.java | 26 ++++++++++++++----- .../TestCamelNetwork.java | 15 +++++------ .../domain-repository-test-context.xml | 5 ++++ 5 files changed, 37 insertions(+), 18 deletions(-) diff --git a/workers/camelPeriodicProducer/pom.xml b/workers/camelPeriodicProducer/pom.xml index 6c061c27dc5..0e6fa8ebe24 100644 --- a/workers/camelPeriodicProducer/pom.xml +++ b/workers/camelPeriodicProducer/pom.xml @@ -58,8 +58,11 @@ test - org.quartz-scheduler - quartz + ${project.groupId} + gn-core + ${project.version} + test-jar + test org.quartz-scheduler diff --git a/workers/camelPeriodicProducer/src/main/resources/config-spring-geonetwork.xml b/workers/camelPeriodicProducer/src/main/resources/config-spring-geonetwork.xml index c8ad7d3d8d2..d85ca478b44 100644 --- a/workers/camelPeriodicProducer/src/main/resources/config-spring-geonetwork.xml +++ b/workers/camelPeriodicProducer/src/main/resources/config-spring-geonetwork.xml @@ -43,6 +43,6 @@ - " + diff --git a/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/MessageProducerTest.java b/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/MessageProducerTest.java index fb691c416b5..b30fcb92b20 100644 --- a/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/MessageProducerTest.java +++ b/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/MessageProducerTest.java @@ -26,12 +26,15 @@ import org.apache.camel.Exchange; import org.apache.camel.component.quartz2.QuartzComponent; import org.apache.camel.component.quartz2.QuartzEndpoint; +import org.fao.geonet.AbstractCoreIntegrationTest; +import org.fao.geonet.kernel.setting.SettingManager; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.quartz.CronTrigger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.io.Serializable; @@ -49,8 +52,12 @@ import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = {"/camel-test-config.xml"}) -public class MessageProducerTest { +@ContextConfiguration(locations = { + "/camel-test-config.xml", + "/domain-repository-test-context.xml", + "/config-spring-geonetwork.xml" +}) +public class MessageProducerTest extends AbstractJUnit4SpringContextTests { private static final String EVERY_SIX_SECOND = "/6 * * ? * * *"; private static final String EVERY_THREE_SECOND = "/3 * * ? * * *"; @@ -60,7 +67,13 @@ public class MessageProducerTest { @Autowired private TestCamelNetwork testCamelNetwork; - private QuartzComponent quartzComponent; + @Autowired + private SettingManager settingManager; + + @Autowired + MessageProducerFactory toTest; + + private QuartzComponent quartzComponent; @Before public void init() throws Exception { @@ -71,7 +84,6 @@ public void init() throws Exception { @Test public void registerAndStart() throws Exception { testCamelNetwork.getContext().start(); - MessageProducerFactory toTest = new MessageProducerFactory(); toTest.routeBuilder = testCamelNetwork; toTest.quartzComponent = quartzComponent; @@ -127,7 +139,6 @@ public void registerAndStart() throws Exception { @Test public void registerAndStartWithoutCronExpression() throws Exception { testCamelNetwork.getContext().start(); - MessageProducerFactory toTest = new MessageProducerFactory(); toTest.routeBuilder = testCamelNetwork; toTest.quartzComponent = quartzComponent; @@ -140,7 +151,8 @@ public void registerAndStartWithoutCronExpression() throws Exception { toTest.registerAndStart(messageProducer); QuartzEndpoint endpoint = (QuartzEndpoint) toTest.routeBuilder.getContext().getEndpoints().stream() - .filter(x -> x.getEndpointKey().compareTo("quartz2://" + messageProducer.getId()) == 0).findFirst().get(); + .filter(x -> x.getEndpointKey().compareTo( + "quartz2://" + settingManager.getSiteId() + "-" + messageProducer.getId()) == 0).findFirst().get(); CronTrigger trigger = (CronTrigger) quartzComponent.getScheduler().getTrigger(endpoint.getTriggerKey()); assertEquals(NEVER, trigger.getCronExpression()); @@ -155,7 +167,7 @@ public void registerAndStartWithoutCronExpression() throws Exception { } - private class TestMessage implements Serializable { + private class TestMessage implements Serializable { private String content; diff --git a/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/TestCamelNetwork.java b/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/TestCamelNetwork.java index 128f4c45d9f..54703be7901 100644 --- a/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/TestCamelNetwork.java +++ b/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/TestCamelNetwork.java @@ -31,8 +31,7 @@ public class TestCamelNetwork extends RouteBuilder { private MessageProducerControllerTest.MessageConsumer wfsHarvesterParamConsumer; - public TestCamelNetwork() - { + public TestCamelNetwork() { messageConsumer = new MessageProducerTest.MessageConsumer("direct:consumer"); wfsHarvesterParamConsumer = new MessageProducerControllerTest.MessageConsumer("direct:wfsHravesterParamConsumer"); } @@ -49,14 +48,14 @@ public MessageProducerControllerTest.MessageConsumer getWfsHarvesterParamConsume public void configure() throws Exception { from(messageConsumer.getUri()) - .id("test_route_id") - .setProperty("configuration", simple("${body}")) - .bean(messageConsumer, "consume"); + .id("test_route_id") + .setProperty("configuration", simple("${body}")) + .bean(messageConsumer, "consume"); from(wfsHarvesterParamConsumer.getUri()) - .id("test_route_id_for_wfs_harvester_param") - .setProperty("configuration", simple("${body.parameters}")) - .bean(wfsHarvesterParamConsumer, "consume"); + .id("test_route_id_for_wfs_harvester_param") + .setProperty("configuration", simple("${body.parameters}")) + .bean(wfsHarvesterParamConsumer, "consume"); } } diff --git a/workers/camelPeriodicProducer/src/test/resources/domain-repository-test-context.xml b/workers/camelPeriodicProducer/src/test/resources/domain-repository-test-context.xml index cb2fe226ea7..77e7ce05a0b 100644 --- a/workers/camelPeriodicProducer/src/test/resources/domain-repository-test-context.xml +++ b/workers/camelPeriodicProducer/src/test/resources/domain-repository-test-context.xml @@ -89,4 +89,9 @@ + + + + From 2a024fcce707e6346f1f94bd7008b7acf1113999 Mon Sep 17 00:00:00 2001 From: Francois Prunayre Date: Wed, 22 Sep 2021 14:20:30 +0200 Subject: [PATCH 5/6] MBean registration / Unique ids / Fix test / Not super elegant but can't make it work. In debug mode evaluating servletContext.getContextPath works fine even on the MockServletContext, so not sure why the exception is triggered. --- .../main/java/jeeves/server/sources/http/ServletPathFinder.java | 2 ++ .../fao/geonet/camelPeriodicProducer/MessageProducerTest.java | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/jeeves/server/sources/http/ServletPathFinder.java b/core/src/main/java/jeeves/server/sources/http/ServletPathFinder.java index 52384ef6eb1..0d4ee9bf193 100644 --- a/core/src/main/java/jeeves/server/sources/http/ServletPathFinder.java +++ b/core/src/main/java/jeeves/server/sources/http/ServletPathFinder.java @@ -59,6 +59,8 @@ public ServletPathFinder(ServletContext servletContext) { baseUrl = resource.substring(resource.indexOf('/', 1), resource.length() - 1); } catch (java.net.MalformedURLException e) { // unlikely baseUrl = servletContext.getServletContextName(); + } catch (NullPointerException e) { // in test using GeonetMockServletContext + baseUrl = "/"; } } diff --git a/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/MessageProducerTest.java b/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/MessageProducerTest.java index b30fcb92b20..220928078ba 100644 --- a/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/MessageProducerTest.java +++ b/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/MessageProducerTest.java @@ -26,7 +26,6 @@ import org.apache.camel.Exchange; import org.apache.camel.component.quartz2.QuartzComponent; import org.apache.camel.component.quartz2.QuartzEndpoint; -import org.fao.geonet.AbstractCoreIntegrationTest; import org.fao.geonet.kernel.setting.SettingManager; import org.junit.Before; import org.junit.Test; From 93449a643a4509bdcb4d84ac77f7de7a3dc2b799 Mon Sep 17 00:00:00 2001 From: Francois Prunayre Date: Wed, 22 Sep 2021 14:32:50 +0200 Subject: [PATCH 6/6] MBean registration / Unique ids / Fix test / Do not create instance directly, let spring autowire beans properly. --- .../MessageProducerControllerTest.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/MessageProducerControllerTest.java b/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/MessageProducerControllerTest.java index d9183effa1a..a33ca56edfd 100644 --- a/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/MessageProducerControllerTest.java +++ b/workers/camelPeriodicProducer/src/test/java/org/fao/geonet/camelPeriodicProducer/MessageProducerControllerTest.java @@ -52,7 +52,11 @@ import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = {"/camel-test-config.xml", "/domain-repository-test-context.xml"}) +@ContextConfiguration(locations = { + "/camel-test-config.xml", + "/domain-repository-test-context.xml", + "/config-spring-geonetwork.xml" +}) public class MessageProducerControllerTest { private static final String EVERY_SECOND = "* * * ? * * *"; @@ -73,12 +77,12 @@ public class MessageProducerControllerTest { private QuartzComponent quartzComponent; - private MessageProducerFactory messageProducerFactory; + @Autowired + MessageProducerFactory messageProducerFactory; @Before public void init() throws Exception { testCamelNetwork.getContext().start(); - messageProducerFactory = new MessageProducerFactory(); messageProducerFactory.routeBuilder = testCamelNetwork; quartzComponent = new QuartzComponent(testCamelNetwork.getContext()); messageProducerFactory.quartzComponent = quartzComponent; @@ -99,7 +103,7 @@ public void createAndDelete() throws Exception { List persisted = toTest.msgProducerRepository.findAll(); assertEquals(1, persisted.size()); - assertEquals(testCamelNetwork.getWfsHarvesterParamConsumer().getFromURI(), "quartz2://" + persisted.get(0).getId()); + assertEquals(testCamelNetwork.getWfsHarvesterParamConsumer().getFromURI(), "quartz2://null-" + persisted.get(0).getId()); toTest.delete(persisted.get(0).getId()); testCamelNetwork.getWfsHarvesterParamConsumer().reset(); @@ -131,7 +135,7 @@ public void updateMessage() throws Exception { assertEquals("url-mod", persistedWfsHarvesterParam.getUrl()); assertEquals("typeName-mod", persistedWfsHarvesterParam.getTypeName()); assertEquals(1, toTest.msgProducerRepository.findAll().size()); - assertEquals(testCamelNetwork.getWfsHarvesterParamConsumer().getFromURI(), "quartz2://" + persisted.getId()); + assertEquals(testCamelNetwork.getWfsHarvesterParamConsumer().getFromURI(), "quartz2://null-" + persisted.getId()); toTest.delete(persisted.getId()); }