re base code
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / distribution / engine / ExecutorFactory.java
1 package org.openecomp.sdc.be.components.distribution.engine;
2
3 import com.google.common.util.concurrent.ThreadFactoryBuilder;
4 import org.openecomp.sdc.common.log.wrappers.Logger;
5 import org.slf4j.LoggerFactory;
6 import org.springframework.stereotype.Component;
7
8 import java.lang.Thread.UncaughtExceptionHandler;
9 import java.util.concurrent.ExecutorService;
10 import java.util.concurrent.Executors;
11 import java.util.concurrent.ScheduledExecutorService;
12 import java.util.concurrent.ThreadFactory;
13 @Component("executorFactory")
14 /**
15  * Allows to create next kinds of single thread executors: SingleThreadExecutor and SingleThreadScheduledExecutor
16  */
17 public class ExecutorFactory {
18
19     private static final Logger logger = Logger.getLogger(EnvironmentsEngine.class.getName());
20
21     public ExecutorService create(String name, UncaughtExceptionHandler exceptionHandler){
22         logger.info("Going to create single thread executor. ");
23         ThreadFactory threadFactory = createThreadFactory(name, exceptionHandler);
24         return Executors.newSingleThreadExecutor(threadFactory);
25     }
26
27     public ScheduledExecutorService createScheduled(String name){
28         logger.info("Going to create single thread scheduled executor. ");
29         ThreadFactory threadFactory = createThreadFactory(name,
30                 (t, e) -> LoggerFactory.getLogger(UncaughtExceptionHandler.class).error("An error occurred: ", e));
31         return Executors.newSingleThreadScheduledExecutor(threadFactory);
32     }
33
34     private ThreadFactory createThreadFactory(String name, UncaughtExceptionHandler exceptionHandler) {
35         String nameFormat = name + "-%d";
36         return new ThreadFactoryBuilder()
37                 .setThreadFactory(Executors.defaultThreadFactory())
38                 .setNameFormat(nameFormat)
39                 .setUncaughtExceptionHandler(exceptionHandler)
40                 .setDaemon(true)
41                 .build();
42     }
43 }