All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pl.edu.icm.unity.engine.endpoint.InternalEndpointManagement Maven / Gradle / Ivy

/*
 * Copyright (c) 2013 ICM Uniwersytet Warszawski All rights reserved.
 * See LICENCE.txt file for licensing information.
 */
package pl.edu.icm.unity.engine.endpoint;

import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import pl.edu.icm.unity.base.endpoint.Endpoint;
import pl.edu.icm.unity.base.endpoint.Endpoint.EndpointState;
import pl.edu.icm.unity.base.exceptions.EngineException;
import pl.edu.icm.unity.base.utils.Log;
import pl.edu.icm.unity.engine.api.endpoint.EndpointInstance;
import pl.edu.icm.unity.store.api.generic.EndpointDB;
import pl.edu.icm.unity.base.tx.Transactional;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * Implementation of the internal endpoint management. 
 * This is used internally and not exposed by the public interfaces.
 * 

* NOTE: make sure to fix transactions if this class is refactored to implement an interface! * @author K. Benedyczak */ @Component public class InternalEndpointManagement { private static final Logger log = Log.getLogger(Log.U_SERVER_CORE, InternalEndpointManagement.class); private EndpointDB endpointDB; private Map deployedEndpoints = new LinkedHashMap<>(); private EndpointInstanceLoader loader; @Autowired public InternalEndpointManagement(EndpointDB endpointDB, EndpointInstanceLoader loader) { this.endpointDB = endpointDB; this.loader = loader; } /** * Queries DB for persisted endpoints and loads them. * Should be run only on startup * @throws EngineException */ @Transactional public synchronized void loadPersistedEndpoints() throws EngineException { List fromDb = endpointDB.getAll(); for (Endpoint endpoint: fromDb) { if (endpoint.getState().equals(EndpointState.UNDEPLOYED)) continue; try { EndpointInstance instance = loader.createEndpointInstance(endpoint); deploy(instance); log.info(" - " + endpoint.getName() + ": " + endpoint.getTypeId() + " " + endpoint.getConfiguration().getDescription()); } catch (Exception e) { log.error("Can't load endpoint " + endpoint.getName() + " of type " + endpoint.getTypeId(), e); if(e instanceof IllegalEndpointException) throw e; } } } @Transactional public synchronized void removeAllPersistedEndpoints() throws EngineException { endpointDB.deleteAll(); undeployAll(); } public synchronized void deploy(EndpointInstance instance) throws EngineException { instance.start(); deployedEndpoints.put(instance.getEndpointDescription().getName(), instance); } public synchronized void undeploy(String instanceId) throws EngineException { EndpointInstance instance = deployedEndpoints.get(instanceId); if (instance == null) return; instance.destroy(); deployedEndpoints.remove(instanceId); } public synchronized List getDeployedEndpoints() { return new ArrayList<>(deployedEndpoints.values()); } public synchronized void undeployAll() throws EngineException { List keys = new ArrayList<>(deployedEndpoints.keySet()); for (String endpointId: keys) undeploy(endpointId); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy