From f0f21c51cc050e0165ae423ee071597709e25e1b Mon Sep 17 00:00:00 2001 From: "fabio.sinibaldi" Date: Fri, 22 Mar 2019 18:09:06 +0000 Subject: [PATCH] git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-publishing/gCat-Feeder-Suite@178673 82a268e6-3cf1-43bd-a215-b396298e98cf --- gCat-Feeder/pom.xml | 81 +++++++------ .../gCatFeeder/service/GCatFeeder.java | 7 +- .../gCatFeeder/service/GCatFeederManager.java | 15 +-- .../engine/CatalogueControllersManager.java | 3 - .../service/engine/CollectorsManager.java | 3 - .../impl/CatalogueControllersManagerImpl.java | 48 ++++---- .../engine/impl/CollectorsManagerImpl.java | 47 ++++---- .../engine/impl/ExecutionManagerImpl.java | 23 +++- .../service/engine/impl/ExecutionTask.java | 106 +++++++++--------- .../service/engine/impl/FeederEngineImpl.java | 21 ++-- .../gCatFeeder/service/rest/Executions.java | 5 +- gCat-Feeder/src/main/webapp/WEB-INF/beans.xml | 0 .../gCatFeeder/service/BaseTest.java | 55 +++++++-- .../gCatFeeder/service/ExecutionsTest.java | 27 ++++- .../mockups/PersistenceManagerMock.java | 17 ++- 15 files changed, 263 insertions(+), 195 deletions(-) create mode 100644 gCat-Feeder/src/main/webapp/WEB-INF/beans.xml diff --git a/gCat-Feeder/pom.xml b/gCat-Feeder/pom.xml index d9427b7..059114b 100644 --- a/gCat-Feeder/pom.xml +++ b/gCat-Feeder/pom.xml @@ -1,15 +1,16 @@ - - 4.0.0 - - org.gcube.data-publishing.gCat-Feeder - gCat-Feeder-Suite - 1.0.0-SNAPSHOT - - gCat-Feeder - gCat-Feeder - Service implementation - - + + 4.0.0 + + org.gcube.data-publishing.gCat-Feeder + gCat-Feeder-Suite + 1.0.0-SNAPSHOT + + gCat-Feeder + gCat-Feeder + Service implementation + + org.gcube.distribution @@ -21,32 +22,33 @@ org.glassfish.jersey jersey-bom - 2.25.1 + + 2.14 pom import - + - - - - - + + + + + org.gcube.data-publishing.gCat-Feeder collectors-plugin-framework [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) - - - + + + org.gcube.data-publishing.gCat-Feeder catalogue-plugin-framework [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) - - - + + + org.gcube.core common-smartgears-app @@ -54,7 +56,7 @@ org.gcube.core common-smartgears - + javax.servlet javax.servlet-api 3.0.1 @@ -63,14 +65,14 @@ javax.ws.rs javax.ws.rs-api - - - + + + org.glassfish.jersey.containers jersey-container-servlet - + org.glassfish.jersey.test-framework.providers @@ -83,8 +85,19 @@ 1.0.13 test - - - - + + + org.glassfish.jersey.ext.cdi + jersey-cdi1x + test + + + org.glassfish.jersey.ext.cdi + jersey-weld2-se + test + + + + + \ No newline at end of file diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/GCatFeeder.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/GCatFeeder.java index 0bde7b7..ae5c810 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/GCatFeeder.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/GCatFeeder.java @@ -1,5 +1,6 @@ package org.gcube.data.publishing.gCatFeeder.service; +import javax.inject.Singleton; import javax.ws.rs.ApplicationPath; import org.gcube.data.publishing.gCatFeeder.service.engine.CatalogueControllersManager; @@ -25,9 +26,9 @@ public class GCatFeeder extends ResourceConfig{ @Override protected void configure() { bind(FeederEngineImpl.class).to(FeederEngine.class); - bind(CatalogueControllersManagerImpl.class).to(CatalogueControllersManager.class); - bind(CollectorsManagerImpl.class).to(CollectorsManager.class); - bind(ExecutionManagerImpl.class).to(ExecutionManager.class); + bind(CatalogueControllersManagerImpl.class).to(CatalogueControllersManager.class).in(Singleton.class); + bind(CollectorsManagerImpl.class).to(CollectorsManager.class).in(Singleton.class); + bind(ExecutionManagerImpl.class).to(ExecutionManager.class).in(Singleton.class); } }; register(binder); diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/GCatFeederManager.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/GCatFeederManager.java index 2a9c593..78662e8 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/GCatFeederManager.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/GCatFeederManager.java @@ -2,10 +2,7 @@ package org.gcube.data.publishing.gCatFeeder.service; import javax.inject.Inject; -import org.gcube.data.publishing.gCatFeeder.service.engine.CatalogueControllersManager; -import org.gcube.data.publishing.gCatFeeder.service.engine.CollectorsManager; import org.gcube.data.publishing.gCatFeeder.service.engine.ExecutionManager; -import org.gcube.data.publishing.gCatFeeder.service.model.fault.InternalError; import org.gcube.smartgears.ApplicationManager; public class GCatFeederManager implements ApplicationManager{ @@ -13,20 +10,10 @@ public class GCatFeederManager implements ApplicationManager{ ExecutionManager executions; - @Inject - CollectorsManager collectors; - - @Inject - CatalogueControllersManager controllers; @Override public void onInit() { - try { - collectors.init(); - controllers.init(); - } catch (InternalError e) { - throw new RuntimeException("Initialization Error",e); - } + } diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/CatalogueControllersManager.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/CatalogueControllersManager.java index bb89ad8..bb81dbd 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/CatalogueControllersManager.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/CatalogueControllersManager.java @@ -12,8 +12,5 @@ public interface CatalogueControllersManager { public Set getAvailableControllers(); public CataloguePlugin getPluginById(String collectorId) throws CataloguePluginNotFound; - public void init() throws InternalError; - - public void initInScope() throws InternalError; } diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/CollectorsManager.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/CollectorsManager.java index bd52811..228ed81 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/CollectorsManager.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/CollectorsManager.java @@ -11,8 +11,5 @@ public interface CollectorsManager { public Set getAvailableCollectors(); public CollectorPlugin getPluginById(String collectorId) throws CollectorNotFound; - public void init() throws InternalError; - - public void initInScope() throws InternalError; } diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/CatalogueControllersManagerImpl.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/CatalogueControllersManagerImpl.java index 0a5ac03..007adeb 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/CatalogueControllersManagerImpl.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/CatalogueControllersManagerImpl.java @@ -5,7 +5,7 @@ import java.util.ServiceLoader; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import javax.inject.Singleton; +import javax.annotation.PostConstruct; import org.gcube.data.publishing.gCatFeeder.catalogues.CataloguePlugin; import org.gcube.data.publishing.gCatFeeder.service.engine.CatalogueControllersManager; @@ -15,7 +15,6 @@ import org.gcube.data.publishing.gCatFeeder.utils.ContextUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@Singleton public class CatalogueControllersManagerImpl implements CatalogueControllersManager { private static final Logger log= LoggerFactory.getLogger(CatalogueControllersManagerImpl.class); @@ -25,21 +24,33 @@ public class CatalogueControllersManagerImpl implements CatalogueControllersMana private ConcurrentHashMap availablePlugins=new ConcurrentHashMap(); - - public CatalogueControllersManagerImpl() { + @PostConstruct + public void post() { //load plugins - log.debug("Loading catalogue plugins..."); - cataloguePluginsLoader=ServiceLoader.load(CataloguePlugin.class); - for(CataloguePlugin plugin:cataloguePluginsLoader) { - log.debug("Loading {} ",plugin.getClass()); - log.debug("Descriptor {} ",plugin.getDescriptor()); - availablePlugins.put(plugin.getDescriptor().getId(), plugin); - } - log.trace("Loaded {} catalogue plugins ",availablePlugins.size()); + log.debug("Loading catalogue plugins..."); + cataloguePluginsLoader=ServiceLoader.load(CataloguePlugin.class); + for(CataloguePlugin plugin:cataloguePluginsLoader) { + log.debug("Loading {} ",plugin.getClass()); + log.debug("Descriptor {} ",plugin.getDescriptor()); + availablePlugins.put(plugin.getDescriptor().getId(), plugin); + } + log.trace("Loaded {} catalogue plugins ",availablePlugins.size()); + + log.trace("Static initialization..."); + for(Entry entry:availablePlugins.entrySet()) { + log.debug("Static initialization for : {} ",entry.getKey()); + try { + entry.getValue().init(); + }catch(Throwable t) { + log.error("Unexpected exception while initializing {} ",entry.getKey(),t); + } + } + } + @Override public Set getAvailableControllers() { return availablePlugins.keySet(); @@ -51,18 +62,7 @@ public class CatalogueControllersManagerImpl implements CatalogueControllersMana else throw new CataloguePluginNotFound("Catalogue plugin "+pluginId+" not available."); } - @Override - public void init() throws InternalError { - log.trace("Static initialization..."); - for(Entry entry:availablePlugins.entrySet()) { - log.debug("Static initialization for : {} ",entry.getKey()); - try { - entry.getValue().init(); - }catch(Throwable t) { - log.error("Unexpected exception while initializing {} ",entry.getKey(),t); - } - } - } + @Override public void initInScope() throws InternalError { diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/CollectorsManagerImpl.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/CollectorsManagerImpl.java index bbd2381..602184d 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/CollectorsManagerImpl.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/CollectorsManagerImpl.java @@ -5,6 +5,8 @@ import java.util.Set; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; +import javax.annotation.PostConstruct; +import javax.enterprise.context.ApplicationScoped; import javax.inject.Singleton; import org.gcube.data.publishing.gCatFeeder.catalogues.CataloguePlugin; @@ -17,7 +19,6 @@ import org.gcube.data.publishing.gCatfeeder.collectors.CollectorPlugin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@Singleton public class CollectorsManagerImpl implements CollectorsManager { @@ -28,20 +29,29 @@ public class CollectorsManagerImpl implements CollectorsManager { private ConcurrentHashMap availablePlugins=new ConcurrentHashMap<>(); - - public CollectorsManagerImpl() { + @PostConstruct + public void post() { //load plugins - log.debug("Loading collector plugins..."); - collectorPluginsLoader=ServiceLoader.load(CollectorPlugin.class); - for(CollectorPlugin plugin:collectorPluginsLoader) { - log.debug("Loading {} ",plugin.getClass()); - log.debug("Descriptor {} ",plugin.getDescriptor()); - availablePlugins.put(plugin.getDescriptor().getName(), plugin); - } - log.trace("Loaded {} collector plugins ",availablePlugins.size()); + log.debug("Loading collector plugins..."); + collectorPluginsLoader=ServiceLoader.load(CollectorPlugin.class); + for(CollectorPlugin plugin:collectorPluginsLoader) { + log.debug("Loading {} ",plugin.getClass()); + log.debug("Descriptor {} ",plugin.getDescriptor()); + availablePlugins.put(plugin.getDescriptor().getName(), plugin); + } + log.trace("Loaded {} collector plugins ",availablePlugins.size()); + + log.trace("Static initialization..."); + for(Entry entry:availablePlugins.entrySet()) { + log.debug("Static initialization for : {} ",entry.getKey()); + try { + entry.getValue().init(); + }catch(Throwable t) { + log.error("Unexpected exception while initializing {} ",entry.getKey(),t); + } + } } - @Override public Set getAvailableCollectors() { return availablePlugins.keySet(); @@ -53,18 +63,7 @@ public class CollectorsManagerImpl implements CollectorsManager { else throw new CollectorNotFound("Collector plugin "+collectorId+" not available."); } - @Override - public void init() throws InternalError { - log.trace("Static initialization..."); - for(Entry entry:availablePlugins.entrySet()) { - log.debug("Static initialization for : {} ",entry.getKey()); - try { - entry.getValue().init(); - }catch(Throwable t) { - log.error("Unexpected exception while initializing {} ",entry.getKey(),t); - } - } - } + @Override diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/ExecutionManagerImpl.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/ExecutionManagerImpl.java index 1a6f40f..89e3db0 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/ExecutionManagerImpl.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/ExecutionManagerImpl.java @@ -1,21 +1,32 @@ package org.gcube.data.publishing.gCatFeeder.service.engine.impl; +import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; -import javax.inject.Singleton; +import javax.annotation.PostConstruct; import org.gcube.data.publishing.gCatFeeder.service.engine.ExecutionManager; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@Singleton + public class ExecutionManagerImpl implements ExecutionManager { private ThreadPoolExecutor executor=null; private static final Logger log= LoggerFactory.getLogger(ExecutionManagerImpl.class); - + private boolean defaultConfiguration=true; + + @PostConstruct + private void post() { + executor=new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue()); + } + + + @Override public synchronized void submit(ExecutionDescriptor desc) { log.debug("Checking if {} is already in queue"); @@ -23,7 +34,11 @@ public class ExecutionManagerImpl implements ExecutionManager { if(!executor.getQueue().contains(toSubmit)) { log.trace("Inserting execution in queue {} "); executor.execute(toSubmit); + log.debug("Request submitted"); + }else { + log.debug("Execution already in queue"); } + } @Override @@ -42,7 +57,7 @@ public class ExecutionManagerImpl implements ExecutionManager { @Override public synchronized void init(ExecutionManagerConfiguration config) { // NEED TO BE IDEMPOTENT - if(executor==null) { + if(executor==null||defaultConfiguration) { throw new RuntimeException("NOT YET IMPLEMENTED"); // executor=new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, new ConcurrentLinkedQueue()); } diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/ExecutionTask.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/ExecutionTask.java index f08073b..d3d439c 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/ExecutionTask.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/ExecutionTask.java @@ -103,59 +103,59 @@ public class ExecutionTask implements Runnable { @Override public void run() { - try { - log.debug("Starting to handle {} ",request); - - log.debug("Setting caller token.."); - String actualToken=CommonUtils.decryptString(request.getCallerEncryptedToken()); - SecurityTokenProvider.instance.set(actualToken); - - // try to lock request (FINISH ON FAIL) - if(persistence.acquire(request.getId())) { - try { - - - log.info("Acquired : {} ",request); - - ExecutionReport report=new ExecutionReport(); - report.getGenericInformations().setStartTime(Instant.now()); - report.setStartingScope(ContextUtils.getCurrentScopeName()); - - // -- ON SUCCESS reload request - request =persistence.getById(request.getId()); - - // For ALL COLLECTORS IN REQUEST - for(String collectorId : request.getCollectors()) { - CollectorReport collectorReport=handleCollector(collectorId); - report.getCollectorReports().add(collectorReport); - - } - - // FINALIZE - - report.getGenericInformations().setEndTime(Instant.now()); - - String reportUrl=storeReport(report); - log.info("Stored report at {} ",reportUrl); - request.setReportUrl(reportUrl); - request.setStatus(ExecutionStatus.SUCCESS); - persistence.update(request); - }catch(PersistenceError | InvalidRequest e) { - log.error("Unexpected exception while dealing with persistence ",e); - }catch(Throwable t) { - log.error("Unexpected generic exception.",t); - request.setStatus(ExecutionStatus.FAILED); - persistence.update(request); - } - - - - }else { - log.debug("Request [{}] is already being managed.",request); - } - }catch(Throwable t) { - log.error("THREAD CANNOT HANDLE REQUESTS!!!. ",t); - } +// try { +// log.debug("Starting to handle {} ",request); +// +// log.debug("Setting caller token.."); +// String actualToken=CommonUtils.decryptString(request.getCallerEncryptedToken()); +// SecurityTokenProvider.instance.set(actualToken); +// +// // try to lock request (FINISH ON FAIL) +// if(persistence.acquire(request.getId())) { +// try { +// +// +// log.info("Acquired : {} ",request); +// +// ExecutionReport report=new ExecutionReport(); +// report.getGenericInformations().setStartTime(Instant.now()); +// report.setStartingScope(ContextUtils.getCurrentScopeName()); +// +// // -- ON SUCCESS reload request +// request =persistence.getById(request.getId()); +// +// // For ALL COLLECTORS IN REQUEST +// for(String collectorId : request.getCollectors()) { +// CollectorReport collectorReport=handleCollector(collectorId); +// report.getCollectorReports().add(collectorReport); +// +// } +// +// // FINALIZE +// +// report.getGenericInformations().setEndTime(Instant.now()); +// +// String reportUrl=storeReport(report); +// log.info("Stored report at {} ",reportUrl); +// request.setReportUrl(reportUrl); +// request.setStatus(ExecutionStatus.SUCCESS); +// persistence.update(request); +// }catch(PersistenceError | InvalidRequest e) { +// log.error("Unexpected exception while dealing with persistence ",e); +// }catch(Throwable t) { +// log.error("Unexpected generic exception.",t); +// request.setStatus(ExecutionStatus.FAILED); +// persistence.update(request); +// } +// +// +// +// }else { +// log.debug("Request [{}] is already being managed.",request); +// } +// }catch(Throwable t) { +// log.error("THREAD CANNOT HANDLE REQUESTS!!!. ",t); +// } } diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/FeederEngineImpl.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/FeederEngineImpl.java index de19dab..dca9798 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/FeederEngineImpl.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/engine/impl/FeederEngineImpl.java @@ -3,6 +3,7 @@ package org.gcube.data.publishing.gCatFeeder.service.engine.impl; import java.util.Collection; import java.util.Set; +import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import org.gcube.data.publishing.gCatFeeder.service.engine.CatalogueControllersManager; @@ -19,7 +20,6 @@ import org.gcube.data.publishing.gCatFeeder.service.model.fault.ElementNotFound; import org.gcube.data.publishing.gCatFeeder.service.model.fault.InvalidRequest; import org.gcube.data.publishing.gCatFeeder.service.model.fault.PersistenceError; - public class FeederEngineImpl implements FeederEngine { @Inject @@ -30,7 +30,7 @@ public class FeederEngineImpl implements FeederEngine { private CatalogueControllersManager catalogues; @Inject private PersistenceManager persistence; - + @Override public ExecutionDescriptor submit(ExecutionRequest req) throws InternalError, PersistenceError, InvalidRequest { try{ @@ -53,9 +53,9 @@ public class FeederEngineImpl implements FeederEngine { return persistence.getById(id); } - + private void verifyRequest(ExecutionRequest request) throws InternalError,CollectorNotFound,DescriptorNotFound{ - + Set availableControllers=catalogues.getAvailableControllers(); if(request.getToInvokeControllers().size()==1&&request.getToInvokeControllers().contains("ALL")) { request.setToInvokeControllers(availableControllers); @@ -63,17 +63,16 @@ public class FeederEngineImpl implements FeederEngine { for(String requestedCatalogue:request.getToInvokeControllers()) if(!availableControllers.contains(requestedCatalogue)) throw new DescriptorNotFound("Requested catalogue controller "+requestedCatalogue+" not found."); - - + + Set availableCollectors=collectors.getAvailableCollectors(); if(request.getToInvokeCollectors().size()==1&&request.getToInvokeCollectors().contains("ALL")) { - request.setToInvokeCollectors(availableControllers); - } - + request.setToInvokeCollectors(availableCollectors); + } for(String requestedCollector:request.getToInvokeCollectors()) if(!availableCollectors.contains(requestedCollector)) throw new DescriptorNotFound("Requested collector "+requestedCollector+" not found."); - + } - + } diff --git a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/rest/Executions.java b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/rest/Executions.java index e406673..a4beb75 100644 --- a/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/rest/Executions.java +++ b/gCat-Feeder/src/main/java/org/gcube/data/publishing/gCatFeeder/service/rest/Executions.java @@ -59,7 +59,10 @@ public class Executions { log.trace("Submitting request {} ",request); - return engine.submit(request); + ExecutionDescriptor toReturn= engine.submit(request); + + log.debug("Returning {} ",toReturn); + return toReturn; } catch (PersistenceError e) { log.warn("Unexpected Exception while talking to persistnce",e); throw new WebApplicationException("Invalid Request.", e,Response.Status.INTERNAL_SERVER_ERROR); diff --git a/gCat-Feeder/src/main/webapp/WEB-INF/beans.xml b/gCat-Feeder/src/main/webapp/WEB-INF/beans.xml new file mode 100644 index 0000000..e69de29 diff --git a/gCat-Feeder/src/test/java/org/gcube/data/publishing/gCatFeeder/service/BaseTest.java b/gCat-Feeder/src/test/java/org/gcube/data/publishing/gCatFeeder/service/BaseTest.java index 32f3dac..1c8dd2e 100644 --- a/gCat-Feeder/src/test/java/org/gcube/data/publishing/gCatFeeder/service/BaseTest.java +++ b/gCat-Feeder/src/test/java/org/gcube/data/publishing/gCatFeeder/service/BaseTest.java @@ -3,6 +3,8 @@ package org.gcube.data.publishing.gCatFeeder.service; import java.io.IOException; import java.sql.SQLException; +import javax.inject.Inject; +import javax.inject.Singleton; import javax.ws.rs.core.Application; import org.gcube.data.publishing.gCatFeeder.service.engine.CatalogueControllersManager; @@ -14,35 +16,70 @@ import org.gcube.data.publishing.gCatFeeder.service.engine.impl.CatalogueControl import org.gcube.data.publishing.gCatFeeder.service.engine.impl.CollectorsManagerImpl; import org.gcube.data.publishing.gCatFeeder.service.engine.impl.ExecutionManagerImpl; import org.gcube.data.publishing.gCatFeeder.service.engine.impl.FeederEngineImpl; +import org.gcube.data.publishing.gCatFeeder.service.model.fault.InternalError; import org.gcube.data.publishing.gCatFeeder.service.mockups.PersistenceManagerMock; import org.glassfish.hk2.utilities.binding.AbstractBinder; import org.glassfish.jersey.test.JerseyTest; -import org.junit.BeforeClass; +import org.junit.Before; public class BaseTest extends JerseyTest{ + @Inject + ExecutionManager executions; - @BeforeClass - public static void init() throws IOException, SQLException{ + + @Inject + CollectorsManager collectors; + + @Inject + CatalogueControllersManager controllers; + + + @Before + public void init() throws IOException, SQLException{ +// // basic init +// try { +// collectors.init(); +// controllers.init(); +// } catch (InternalError e) { +// throw new RuntimeException("Initialization Error",e); +// } +// +// +// // scope init +// try { +// collectors.initInScope(); +// controllers.initInScope(); +// } catch (InternalError ex) { +// throw new RuntimeException("Initialization Error",ex); +// } +// +// executions.load(); + + + } @Override protected Application configure() { - + AbstractBinder binder = new AbstractBinder() { @Override protected void configure() { bind(FeederEngineImpl.class).to(FeederEngine.class); - bind(CatalogueControllersManagerImpl.class).to(CatalogueControllersManager.class); - bind(CollectorsManagerImpl.class).to(CollectorsManager.class); - bind(ExecutionManagerImpl.class).to(ExecutionManager.class); - bind(PersistenceManagerMock.class).to(PersistenceManager.class); + bind(CatalogueControllersManagerImpl.class).to(CatalogueControllersManager.class).in(Singleton.class); + bind(CollectorsManagerImpl.class).to(CollectorsManager.class).in(Singleton.class); + bind(ExecutionManagerImpl.class).to(ExecutionManager.class).in(Singleton.class); + bind(PersistenceManagerMock.class).to(PersistenceManager.class).in(Singleton.class); } }; - return new GCatFeeder(binder); + return new GCatFeeder(binder); + } + + } diff --git a/gCat-Feeder/src/test/java/org/gcube/data/publishing/gCatFeeder/service/ExecutionsTest.java b/gCat-Feeder/src/test/java/org/gcube/data/publishing/gCatFeeder/service/ExecutionsTest.java index 5e002f2..c22b50c 100644 --- a/gCat-Feeder/src/test/java/org/gcube/data/publishing/gCatFeeder/service/ExecutionsTest.java +++ b/gCat-Feeder/src/test/java/org/gcube/data/publishing/gCatFeeder/service/ExecutionsTest.java @@ -4,6 +4,8 @@ import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; +import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptor; +import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionStatus; import org.junit.Test; public class ExecutionsTest extends BaseTest { @@ -27,11 +29,30 @@ public class ExecutionsTest extends BaseTest { System.out.println(target.getUri()); Response resp=target.request().post(Entity.json("")); - System.out.println(resp.getStatus() + " : "+ resp.readEntity(String.class)); -// if(resp.getStatus()!=200) throw new RuntimeException("GetAll error should never happen"); - +// System.out.println(resp.getStatus() + " : "+ resp.readEntity(String.class)); + ExecutionDescriptor desc=resp.readEntity(ExecutionDescriptor.class); + String id=desc.getId(); + + WebTarget pollTarget= + target(ServiceConstants.Executions.PATH).path(id); + boolean end=false; + do { + Response pollResp=pollTarget.request().get(); + if(pollResp.getStatus()!=200) throw new RuntimeException("Unexpected status "+pollResp.getStatus()+" while polling. Msg : "+pollResp.readEntity(String.class)); + else { + ExecutionDescriptor pollResult=pollResp.readEntity(ExecutionDescriptor.class); + System.out.println("Current status : "+pollResult.getStatus()); + switch(pollResult.getStatus()) { + case FAILED: + case STOPPED : throw new RuntimeException("Unexpected execution status "+pollResult.getStatus()); + case SUCCESS : end=true; break; + default : try { + Thread.sleep(400);} catch (InterruptedException e) {} + } + } + }while(!end); } @Test diff --git a/gCat-Feeder/src/test/java/org/gcube/data/publishing/gCatFeeder/service/mockups/PersistenceManagerMock.java b/gCat-Feeder/src/test/java/org/gcube/data/publishing/gCatFeeder/service/mockups/PersistenceManagerMock.java index df76ee4..25cbff6 100644 --- a/gCat-Feeder/src/test/java/org/gcube/data/publishing/gCatFeeder/service/mockups/PersistenceManagerMock.java +++ b/gCat-Feeder/src/test/java/org/gcube/data/publishing/gCatFeeder/service/mockups/PersistenceManagerMock.java @@ -5,11 +5,9 @@ import java.util.Collections; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import javax.enterprise.inject.Default; import javax.inject.Singleton; - -import java.util.function.BiFunction; - import org.gcube.data.publishing.gCatFeeder.service.engine.PersistenceManager; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptor; import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptorFilter; @@ -19,7 +17,7 @@ import org.gcube.data.publishing.gCatFeeder.service.model.fault.ElementNotFound; import org.gcube.data.publishing.gCatFeeder.service.model.fault.InvalidRequest; import org.gcube.data.publishing.gCatFeeder.service.model.fault.PersistenceError; -@Singleton + public class PersistenceManagerMock implements PersistenceManager { @Override @@ -28,7 +26,7 @@ public class PersistenceManagerMock implements PersistenceManager { } @Override - public ExecutionDescriptor getById(String id) throws PersistenceError, ElementNotFound, InvalidRequest { + public ExecutionDescriptor getById(String id) throws PersistenceError, ElementNotFound{ if(theMap.containsKey(id)) return theMap.get(id); else throw new ElementNotFound("Unable to find request with id "+id); @@ -51,12 +49,13 @@ public class PersistenceManagerMock implements PersistenceManager { @Override public boolean acquire(String id) throws PersistenceError, ElementNotFound { - theMap.computeIfPresent(id, BiFunction bi = (x,y) ->{ - - }); + ExecutionDescriptor desc=getById(id); + if(desc.getStatus().equals(ExecutionStatus.PENDING)) + desc.setStatus(ExecutionStatus.RUNNING); + return update(desc); } - // Actuall persistence in map + // Actual persistence in map private ConcurrentHashMap theMap=new ConcurrentHashMap<>();