diff --git a/mobi.chouette.service/src/main/java/mobi/chouette/service/JobServiceManager.java b/mobi.chouette.service/src/main/java/mobi/chouette/service/JobServiceManager.java index 110aae116d..091b862928 100644 --- a/mobi.chouette.service/src/main/java/mobi/chouette/service/JobServiceManager.java +++ b/mobi.chouette.service/src/main/java/mobi/chouette/service/JobServiceManager.java @@ -21,13 +21,18 @@ import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.ejb.EJB; +import javax.ejb.Singleton; import javax.ejb.Startup; -import javax.ejb.Stateless; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import javax.enterprise.concurrent.ManagedExecutorService; import javax.ws.rs.core.MediaType; +import org.apache.commons.io.FileUtils; + +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; + import lombok.extern.log4j.Log4j; import mobi.chouette.common.Constant; import mobi.chouette.common.ContenerChecker; @@ -43,12 +48,7 @@ import mobi.chouette.persistence.hibernate.ChouetteIdentifierGenerator; import mobi.chouette.scheduler.Scheduler; -import org.apache.commons.io.FileUtils; - -import com.google.common.base.Predicate; -import com.google.common.collect.Collections2; - -@Stateless(name = JobServiceManager.BEAN_NAME) +@Singleton(name = JobServiceManager.BEAN_NAME) @Startup @Log4j public class JobServiceManager { @@ -64,24 +64,19 @@ public class JobServiceManager { @EJB(beanName = ContenerChecker.NAME) ContenerChecker checker; - @EJB - JobServiceManager jobServiceManager; - @EJB Scheduler scheduler; @Resource(lookup = "java:comp/DefaultManagedExecutorService") ManagedExecutorService executor; - private static Set referentials = Collections.synchronizedSet(new HashSet<>()); + private Set referentials = Collections.synchronizedSet(new HashSet<>()); - private static int maxJobs = 5; - - private static String lock = "lock"; + private int maxJobs = 5; private String rootDirectory; - private static Set intializedContexts = new HashSet<>(); + private Set intializedContexts = new HashSet<>(); @PostConstruct public synchronized void init() { @@ -131,15 +126,13 @@ public JobService create(String referential, String action, String type, Map= maxJobs) { - throw new RequestServiceException(RequestExceptionCode.TOO_MANY_ACTIVE_JOBS, "" + maxJobs - + " active jobs"); - } - JobService jobService = jobServiceManager.createJob(referential, action, type, inputStreamsByName); - scheduler.schedule(referential); - return jobService; + if (scheduler.getActivejobsCount() >= maxJobs) { + throw new RequestServiceException(RequestExceptionCode.TOO_MANY_ACTIVE_JOBS, "" + maxJobs + + " active jobs"); } + JobService jobService = createJob(referential, action, type, inputStreamsByName); + scheduler.schedule(referential); + return jobService; } public List getMontlyStats() throws ServiceException {