Engine startup
This commit is contained in:
parent
bb47c90c9e
commit
5d3e56754f
|
@ -2,14 +2,17 @@ package org.gcube.application.cms.implementations;
|
|||
|
||||
|
||||
import lombok.Synchronized;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.gcube.application.cms.caches.Cache;
|
||||
import org.gcube.application.cms.caches.Engine;
|
||||
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@Slf4j
|
||||
public class ImplementationProvider {
|
||||
|
||||
private static ImplementationProvider instance=null;
|
||||
|
@ -45,4 +48,50 @@ public class ImplementationProvider {
|
|||
);
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
private boolean isInit=false;
|
||||
|
||||
@Synchronized
|
||||
public void initEngines(){
|
||||
if(!isInit) {
|
||||
log.info("INITIALIZING ENGINES. Size : {} ", implementationsRegistry.size());
|
||||
HashSet<Class> failed = new HashSet<>();
|
||||
implementationsRegistry.forEach((aClass, engine) -> {
|
||||
log.info("Init : {} -> {}", engine.getClass().toGenericString(), aClass.getCanonicalName());
|
||||
try {
|
||||
engine.init();
|
||||
} catch (Throwable t) {
|
||||
failed.add(engine.getClass());
|
||||
log.error("Unable to start engine {} ", engine.getClass(), t);
|
||||
}
|
||||
});
|
||||
if (failed.isEmpty())
|
||||
log.info("INIT OK");
|
||||
else {
|
||||
log.warn("!!!!! Following Engines FAILED INIT :");
|
||||
failed.forEach(aClass -> log.warn(String.valueOf(aClass)));
|
||||
}
|
||||
isInit = true;
|
||||
}else log.info("Received Init request but Engines already started");
|
||||
}
|
||||
|
||||
public void shutdownEngines(){
|
||||
log.info("SHUTTING DOWN ENGINES. Size : {} ",implementationsRegistry.size());
|
||||
HashSet<Class> failed= new HashSet<>();
|
||||
implementationsRegistry.forEach((aClass, engine) -> {
|
||||
log.info("ShotDown : {} -> {}",engine.getClass().toGenericString(),aClass.getCanonicalName());
|
||||
try{
|
||||
engine.shutdown();
|
||||
}catch (Throwable t){
|
||||
failed.add(engine.getClass());
|
||||
log.error("Unable to shutdown engine {} ",engine.getClass(),t);
|
||||
}
|
||||
});
|
||||
if(failed.isEmpty())
|
||||
log.info("SHUTDOWN OK");
|
||||
else {
|
||||
log.warn("!!!!! Following Engines FAILED SHUTDOWN :");
|
||||
failed.forEach(aClass->log.warn(String.valueOf(aClass)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ public class GCubeTest {
|
|||
|
||||
|
||||
// testContext = "/pred4s/preprod/preVRE";
|
||||
//testContext = "/gcube/devsec/devVRE";
|
||||
testContext = "/gcube/devsec/devVRE";
|
||||
|
||||
|
||||
System.out.println("TEST CONTEXT = "+testContext);
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
<artifactId>common-smartgears</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- INTERNAL LOGIC -->
|
||||
<dependency>
|
||||
<groupId>org.gcube.application.cms</groupId>
|
||||
|
|
|
@ -1,18 +1,22 @@
|
|||
package org.gcube.application.geoportal.service;
|
||||
|
||||
public class AppManager {
|
||||
|
||||
// implements ApplicationManager{
|
||||
//}
|
||||
//
|
||||
// @Override
|
||||
// public void onInit() {
|
||||
// ImplementationProvider.get().shutdown();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onShutdown() {
|
||||
// ImplementationProvider.get().shutdown();
|
||||
// }
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.gcube.application.cms.implementations.ImplementationProvider;
|
||||
import org.gcube.smartgears.ApplicationManager;
|
||||
|
||||
@Slf4j
|
||||
public class AppManager implements ApplicationManager {
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onInit() {
|
||||
ImplementationProvider.get().initEngines();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShutdown() {
|
||||
ImplementationProvider.get().shutdownEngines();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -66,6 +66,7 @@ public class GeoPortalService extends ResourceConfig{
|
|||
ImplementationProvider.get().getManagerList().forEach(
|
||||
(aClass, s) -> log.debug("{} serving {} ",aClass,s));
|
||||
|
||||
ImplementationProvider.get().initEngines();
|
||||
|
||||
log.info("Initializing serialization");
|
||||
JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider();
|
||||
|
@ -73,6 +74,8 @@ public class GeoPortalService extends ResourceConfig{
|
|||
register(provider);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package org.gcube.application.geoportal.service;
|
||||
|
||||
import com.fasterxml.jackson.databind.cfg.ContextAttributes;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.gcube.application.cms.caches.Engine;
|
||||
import org.gcube.application.cms.implementations.ImplementationProvider;
|
||||
|
@ -11,6 +12,7 @@ import org.gcube.application.geoportal.service.engine.providers.ucd.ProfileMap;
|
|||
import org.gcube.application.geoportal.service.rest.GuardedMethod;
|
||||
import org.gcube.application.cms.serialization.Serialization;
|
||||
import org.glassfish.jersey.test.JerseyTest;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.opengis.annotation.Profile;
|
||||
|
||||
|
@ -25,7 +27,7 @@ import static org.junit.Assume.assumeTrue;
|
|||
@Slf4j
|
||||
public class BasicServiceTestUnit extends JerseyTest {
|
||||
|
||||
|
||||
protected static Boolean USE_LOCAL_FOLDER=false;
|
||||
|
||||
|
||||
@Override
|
||||
|
@ -33,9 +35,12 @@ public class BasicServiceTestUnit extends JerseyTest {
|
|||
return new GeoPortalService(){
|
||||
@Override
|
||||
public Map<Engine<?>, Class<?>> customImplementations() {
|
||||
if(USE_LOCAL_FOLDER)
|
||||
return Collections.singletonMap((Engine<ProfileMap>)
|
||||
new LocalFolderProfileMapCache(TestProfiles.BASE_FOLDER.getAbsolutePath()),ProfileMap.class);
|
||||
else return Collections.emptyMap();
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -55,7 +60,10 @@ public class BasicServiceTestUnit extends JerseyTest {
|
|||
});
|
||||
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void shutdown(){
|
||||
ImplementationProvider.get().shutdownEngines();
|
||||
}
|
||||
|
||||
protected static<T> T check(Response resp, Class<T> clazz) throws Exception {
|
||||
String resString=resp.readEntity(String.class);
|
||||
|
|
|
@ -19,6 +19,7 @@ import javax.ws.rs.core.MediaType;
|
|||
import javax.ws.rs.core.Response;
|
||||
import java.util.List;
|
||||
|
||||
import static junit.framework.Assert.fail;
|
||||
import static junit.framework.TestCase.assertEquals;
|
||||
import static junit.framework.TestCase.assertTrue;
|
||||
import static org.junit.Assume.assumeTrue;
|
||||
|
@ -47,8 +48,19 @@ public class UCDCalls extends BasicServiceTestUnit {
|
|||
|
||||
@Test
|
||||
public void getById() throws Exception {
|
||||
String testProfileId="profiledConcessioni";
|
||||
check(baseTarget().path(testProfileId).request(MediaType.APPLICATION_JSON_TYPE).get(), UseCaseDescriptor.class);
|
||||
List result=check(baseTarget().path(InterfaceConstants.Methods.QUERY_PATH).request(MediaType.APPLICATION_JSON_TYPE).
|
||||
post(Entity.entity(Serialization.write(new QueryRequest()),MediaType.APPLICATION_JSON)), List.class);
|
||||
|
||||
assertTrue("Existing UCDs : ",result.size()>0);
|
||||
result.forEach(c->{
|
||||
try{
|
||||
UseCaseDescriptor d= Serialization.convert(c,UseCaseDescriptor.class);
|
||||
check(baseTarget().path(d.getId()).request(MediaType.APPLICATION_JSON_TYPE).get(), UseCaseDescriptor.class);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace(System.err);
|
||||
fail(e.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
Loading…
Reference in New Issue