package org.molgenis.data.jobs;
import org.molgenis.data.DataService;
import org.molgenis.data.Entity;
import org.molgenis.data.jobs.model.JobExecution;
import org.molgenis.data.support.DynamicEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import static org.molgenis.security.core.runas.RunAsSystemProxy.runAsSystem;
public class JobExecutionUpdaterImpl implements JobExecutionUpdater
{
private static final Logger LOG = LoggerFactory.getLogger(JobExecutionUpdater.class);
@Autowired
private DataService dataService;
private ExecutorService executorService = Executors.newSingleThreadExecutor();
@Override
public void update(JobExecution jobExecution)
{
Entity copy = new DynamicEntity(jobExecution.getEntityType());
copy.set(jobExecution);
executorService.execute(() -> updateInternal(copy));
}
private void updateInternal(Entity jobExecution)
{
runAsSystem(() -> tryUpdate(jobExecution));
}
private void tryUpdate(Entity jobExecution)
{
try
{
dataService.update(jobExecution.getEntityType().getName(), jobExecution);
}
catch (Exception ex)
{
LOG.warn("Error updating job execution", ex);
}
}
}