2015-10-12 18:33:47 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
package org.gcube.vremanagement.executor.persistence;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
|
2020-09-30 11:19:49 +02:00
|
|
|
import org.gcube.vremanagement.executor.ContextUtility;
|
2017-02-01 17:01:15 +01:00
|
|
|
import org.gcube.vremanagement.executor.persistence.orientdb.OrientDBPersistenceConnector;
|
2015-10-12 18:33:47 +02:00
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
/**
|
2017-02-01 17:01:15 +01:00
|
|
|
* @author Luca Frosini (ISTI - CNR)
|
2015-10-12 18:33:47 +02:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
public abstract class SmartExecutorPersistenceFactory {
|
|
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(SmartExecutorPersistenceFactory.class);
|
2020-12-02 11:22:48 +01:00
|
|
|
|
2015-10-12 18:33:47 +02:00
|
|
|
private static Map<String, SmartExecutorPersistenceConnector> persistenceConnectors;
|
2020-12-02 11:22:48 +01:00
|
|
|
|
2015-10-12 18:33:47 +02:00
|
|
|
static {
|
|
|
|
persistenceConnectors = new HashMap<String, SmartExecutorPersistenceConnector>();
|
|
|
|
}
|
2020-12-02 11:22:48 +01:00
|
|
|
|
|
|
|
private static synchronized SmartExecutorPersistenceConnector getPersistenceConnector(String context) throws Exception {
|
|
|
|
if (context == null) {
|
|
|
|
String error = "No Context available.";
|
2015-10-12 18:33:47 +02:00
|
|
|
logger.error(error);
|
2020-12-02 11:22:48 +01:00
|
|
|
throw new RuntimeException(error);
|
2015-10-12 18:33:47 +02:00
|
|
|
}
|
|
|
|
|
2020-12-02 11:22:48 +01:00
|
|
|
logger.trace("Retrieving {} for context {}", SmartExecutorPersistenceConnector.class.getSimpleName(), context);
|
|
|
|
|
|
|
|
SmartExecutorPersistenceConnector persistence = persistenceConnectors.get(context);
|
|
|
|
|
|
|
|
if (persistence == null) {
|
|
|
|
logger.trace("Retrieving {} for context {} not found on internal {}. Intializing it.",
|
|
|
|
SmartExecutorPersistenceConnector.class.getSimpleName(), context, Map.class.getSimpleName());
|
|
|
|
|
2017-02-01 17:01:15 +01:00
|
|
|
String className = OrientDBPersistenceConnector.class.getSimpleName();
|
2020-12-02 11:22:48 +01:00
|
|
|
SmartExecutorPersistenceConfiguration configuration = new SmartExecutorPersistenceConfiguration(className);
|
|
|
|
|
2017-05-25 14:38:46 +02:00
|
|
|
persistence = new OrientDBPersistenceConnector(configuration);
|
2020-12-02 11:22:48 +01:00
|
|
|
persistenceConnectors.put(ContextUtility.getCurrentContext(), persistence);
|
2015-10-12 18:33:47 +02:00
|
|
|
}
|
2020-12-02 11:22:48 +01:00
|
|
|
|
2015-10-12 18:33:47 +02:00
|
|
|
return persistence;
|
|
|
|
}
|
2020-12-02 11:22:48 +01:00
|
|
|
|
2017-05-25 14:38:46 +02:00
|
|
|
/**
|
|
|
|
* @return the persistenceConnector
|
|
|
|
*/
|
2020-12-02 11:22:48 +01:00
|
|
|
public static SmartExecutorPersistenceConnector getPersistenceConnector() throws Exception {
|
|
|
|
String context = ContextUtility.getCurrentContext();
|
|
|
|
return getPersistenceConnector(context);
|
2017-05-25 14:38:46 +02:00
|
|
|
}
|
2020-12-02 11:22:48 +01:00
|
|
|
|
|
|
|
public static void closeCurrentPersistenceConnector() throws Exception {
|
|
|
|
String context = ContextUtility.getCurrentContext();
|
|
|
|
closePersistenceConnector(context);
|
|
|
|
}
|
|
|
|
|
|
|
|
private static synchronized void closePersistenceConnector(String context) throws Exception {
|
|
|
|
SmartExecutorPersistenceConnector persistence = getPersistenceConnector(context);
|
|
|
|
if (persistence != null) {
|
2015-11-30 12:25:05 +01:00
|
|
|
persistence.close();
|
2020-12-02 11:22:48 +01:00
|
|
|
persistenceConnectors.remove(context);
|
|
|
|
if(persistenceConnectors.isEmpty()) {
|
|
|
|
|
|
|
|
}
|
2015-11-30 12:25:05 +01:00
|
|
|
}
|
|
|
|
}
|
2015-10-12 18:33:47 +02:00
|
|
|
|
2020-12-02 11:22:48 +01:00
|
|
|
public static void closeAll() {
|
|
|
|
for (String context : persistenceConnectors.keySet()) {
|
|
|
|
try {
|
|
|
|
closePersistenceConnector(context);
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.error("Unable to close {} for context {}",
|
|
|
|
SmartExecutorPersistenceConnector.class.getSimpleName(), context);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void shutdown() {
|
|
|
|
OrientDBPersistenceConnector.shutdown();
|
|
|
|
}
|
|
|
|
|
2015-10-12 18:33:47 +02:00
|
|
|
}
|