/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.activiti.crystalball.simulator.impl.simulationexecutor;
import org.activiti.crystalball.simulator.SimulationRun;
import org.activiti.crystalball.simulator.SimulationRunHelper;
import org.activiti.crystalball.simulator.impl.context.SimulationContext;
import org.activiti.crystalball.simulator.impl.interceptor.CommandContext;
import org.activiti.crystalball.simulator.impl.persistence.entity.JobEntity;
import org.activiti.crystalball.simulator.impl.persistence.entity.SimulationInstanceEntity;
import org.activiti.crystalball.simulator.impl.persistence.entity.SimulationRunEntity;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* @author Tom Baeyens
* @author Joram Barrez
*/
public class SimulationRunExecuteJobHandler implements JobHandler {
private static Logger log = Logger.getLogger(SimulationRunExecuteJobHandler.class.getName());
public static final String TYPE = "simulation-run";
public String getType() {
return TYPE;
}
public void execute(JobEntity job, String configuration, SimulationInstanceEntity simulationInstance, CommandContext commandContext) {
log.log(Level.INFO,"Starting simulation experiment [" + simulationInstance + "] configuration ["+ configuration+"]");
SimulationRunEntity simulationRun = commandContext.getSimulationRunManager().findSimulationRunWithReferencesById(configuration);
SimulationContext.setSimulationRun(simulationRun);
//initializeSimulationRun
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(simulationRun.getSimulation().getSimulationConfigUrl());
PropertyPlaceholderConfigurer propConfig = new PropertyPlaceholderConfigurer();
Properties properties = new Properties();
properties.put("simulationRunId", configuration);
propConfig.setProperties(properties);
appContext.addBeanFactoryPostProcessor(propConfig);
appContext.refresh();
SimulationRunHelper runHelper = new NoopSimulationRunHelper();
if (appContext.containsBean("simulationRunHelper"))
runHelper = (SimulationRunHelper) appContext.getBean("simulationRunHelper");
try {
runHelper.before( configuration);
SimulationRun simRun = (SimulationRun) appContext.getBean("simulationRun");
simRun.execute(simulationRun);
} catch (Exception e) {
log.log(Level.SEVERE, "SimulationRun handling error" + simulationRun, e);
} finally {
runHelper.after( configuration);
appContext.close();
}
job.delete();
SimulationContext.removeSimulationRun();
// check whether all jobs for given simulationInstance were already executed.
simulationInstance.checkActivity();
log.log(Level.INFO,"finished simulation experiment [" + simulationInstance + "] configuration ["+ configuration+"]");
}
}