| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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.apache.camel.spi; |
| |
| import java.util.List; |
| import java.util.concurrent.ExecutorService; |
| import java.util.concurrent.RejectedExecutionHandler; |
| import java.util.concurrent.ScheduledExecutorService; |
| import java.util.concurrent.TimeUnit; |
| |
| import org.apache.camel.ShutdownableService; |
| |
| /** |
| * Strategy to create thread pools. |
| * <p/> |
| * This strategy is pluggable so you can plugin a custom provider, for example if you want to leverage |
| * the WorkManager for a J2EE server. |
| * <p/> |
| * This strategy has fine grained methods for creating various thread pools, however custom strategies |
| * do not have to exactly create those kind of pools. Feel free to return a shared or different kind of pool. |
| * <p/> |
| * However there are two types of pools: regular and scheduled. |
| * <p/> |
| * If you use the <tt>newXXX</tt> methods to create thread pools, then Camel will by default take care of |
| * shutting down those created pools when {@link org.apache.camel.CamelContext} is shutting down. |
| * |
| * @version |
| */ |
| public interface ExecutorServiceStrategy extends ShutdownableService { |
| |
| /** |
| * Registers the given thread pool profile |
| * |
| * @param profile the profile |
| */ |
| void registerThreadPoolProfile(ThreadPoolProfile profile); |
| |
| /** |
| * Gets the thread pool profile by the given id |
| * |
| * @param id id of the thread pool profile to get |
| * @return the found profile, or <tt>null</tt> if not found |
| */ |
| ThreadPoolProfile getThreadPoolProfile(String id); |
| |
| /** |
| * Gets the default thread pool profile |
| * |
| * @return the default profile which are newer <tt>null</tt> |
| */ |
| ThreadPoolProfile getDefaultThreadPoolProfile(); |
| |
| /** |
| * Sets the default thread pool profile |
| * |
| * @param defaultThreadPoolProfile the new default thread pool profile |
| */ |
| void setDefaultThreadPoolProfile(ThreadPoolProfile defaultThreadPoolProfile); |
| |
| /** |
| * Creates a full thread name |
| * |
| * @param name name which is appended to the full thread name |
| * @return the full thread name |
| */ |
| String getThreadName(String name); |
| |
| /** |
| * Gets the thread name pattern used for creating the full thread name. |
| * |
| * @return the pattern |
| */ |
| String getThreadNamePattern(); |
| |
| /** |
| * Sets the thread name pattern used for creating the full thread name. |
| * <p/> |
| * The default pattern is: <tt>Camel (${camelId}) thread #${counter} - ${name}</tt> |
| * <p/> |
| * Where <tt>${camelId}</tt> is the name of the {@link org.apache.camel.CamelContext} |
| * <br/>and <tt>${counter}</tt> is a unique incrementing counter. |
| * <br/>and <tt>${name}</tt> is the regular thread name. |
| * <br/>You can also use <tt>${longName}</tt> is the long thread name which can includes endpoint parameters etc. |
| * |
| * @param pattern the pattern |
| * @throws IllegalArgumentException if the pattern is invalid. |
| */ |
| void setThreadNamePattern(String pattern) throws IllegalArgumentException; |
| |
| /** |
| * Lookup a {@link java.util.concurrent.ExecutorService} from the {@link org.apache.camel.spi.Registry} |
| * and from known list of {@link org.apache.camel.spi.ThreadPoolProfile ThreadPoolProfile(s)}. |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @param executorServiceRef reference to lookup |
| * @return the {@link java.util.concurrent.ExecutorService} or <tt>null</tt> if not found |
| */ |
| ExecutorService lookup(Object source, String name, String executorServiceRef); |
| |
| /** |
| * Lookup a {@link java.util.concurrent.ScheduledExecutorService} from the {@link org.apache.camel.spi.Registry} |
| * and from known list of {@link org.apache.camel.spi.ThreadPoolProfile ThreadPoolProfile(s)}. |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @param executorServiceRef reference to lookup |
| * @return the {@link java.util.concurrent.ScheduledExecutorService} or <tt>null</tt> if not found |
| */ |
| ScheduledExecutorService lookupScheduled(Object source, String name, String executorServiceRef); |
| |
| /** |
| * Creates a new thread pool using the default thread pool profile. |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @return the created thread pool |
| */ |
| ExecutorService newDefaultThreadPool(Object source, String name); |
| |
| /** |
| * Creates a new thread pool using based on the given profile id. |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @param threadPoolProfileId id of the thread pool profile to use for creating the thread pool |
| * @return the created thread pool, or <tt>null</tt> if the was no thread pool profile with that given id. |
| */ |
| ExecutorService newThreadPool(Object source, String name, String threadPoolProfileId); |
| |
| /** |
| * Creates a new cached thread pool. |
| * <p/> |
| * <b>Important:</b> Using cached thread pool is discouraged as they have no upper bound and can overload the JVM. |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @return the created thread pool |
| */ |
| ExecutorService newCachedThreadPool(Object source, String name); |
| |
| /** |
| * Creates a new scheduled thread pool. |
| * <p/> |
| * Will use the pool size from the default thread pool profile |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @param poolSize the core pool size |
| * @return the created thread pool |
| */ |
| ScheduledExecutorService newScheduledThreadPool(Object source, String name, int poolSize); |
| |
| /** |
| * Creates a new scheduled thread pool. |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @return the created thread pool |
| */ |
| ScheduledExecutorService newScheduledThreadPool(Object source, String name); |
| |
| /** |
| * Creates a new fixed thread pool. |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @param poolSize the core pool size |
| * @return the created thread pool |
| */ |
| ExecutorService newFixedThreadPool(Object source, String name, int poolSize); |
| |
| /** |
| * Creates a new single-threaded thread pool. This is often used for background threads. |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @return the created thread pool |
| */ |
| ExecutorService newSingleThreadExecutor(Object source, String name); |
| |
| /** |
| * Creates a new synchronous thread pool, which executes the task in the caller thread (no task queue). |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @return the created thread pool |
| */ |
| ExecutorService newSynchronousThreadPool(Object source, String name); |
| |
| /** |
| * Creates a new custom thread pool. |
| * <p/> |
| * Will by default use 60 seconds for keep alive time for idle threads. |
| * And use {@link java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy CallerRunsPolicy} as rejection handler |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @param corePoolSize the core pool size |
| * @param maxPoolSize the maximum pool size |
| * @return the created thread pool |
| */ |
| ExecutorService newThreadPool(Object source, String name, int corePoolSize, int maxPoolSize); |
| |
| /** |
| * Creates a new custom thread pool. |
| * <p/> |
| * Will by default use 60 seconds for keep alive time for idle threads. |
| * And use {@link java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy CallerRunsPolicy} as rejection handler |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @param corePoolSize the core pool size |
| * @param maxPoolSize the maximum pool size |
| * @param maxQueueSize the maximum number of tasks in the queue, use <tt>Integer.MAX_INT</tt> or <tt>-1</tt> to indicate unbounded |
| * @return the created thread pool |
| */ |
| ExecutorService newThreadPool(Object source, String name, int corePoolSize, int maxPoolSize, int maxQueueSize); |
| |
| /** |
| * Creates a new custom thread pool. |
| * |
| * @param source the source object, usually it should be <tt>this</tt> passed in as parameter |
| * @param name name which is appended to the thread name |
| * @param corePoolSize the core pool size |
| * @param maxPoolSize the maximum pool size |
| * @param keepAliveTime keep alive time for idle threads |
| * @param timeUnit time unit for keep alive time |
| * @param maxQueueSize the maximum number of tasks in the queue, use <tt>Integer.MAX_INT</tt> or <tt>-1</tt> to indicate unbounded |
| * @param rejectedExecutionHandler the handler for tasks which cannot be executed by the thread pool. |
| * If <tt>null</tt> is provided then {@link java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy CallerRunsPolicy} is used. |
| * @param daemon whether or not the created threads is daemon or not |
| * @return the created thread pool |
| */ |
| ExecutorService newThreadPool(Object source, final String name, int corePoolSize, int maxPoolSize, |
| long keepAliveTime, TimeUnit timeUnit, int maxQueueSize, |
| RejectedExecutionHandler rejectedExecutionHandler, boolean daemon); |
| |
| /** |
| * Shutdown the given executor service. |
| * |
| * @param executorService the executor service to shutdown |
| * @see java.util.concurrent.ExecutorService#shutdown() |
| */ |
| void shutdown(ExecutorService executorService); |
| |
| /** |
| * Shutdown now the given executor service. |
| * |
| * @param executorService the executor service to shutdown now |
| * @return list of tasks that never commenced execution |
| * @see java.util.concurrent.ExecutorService#shutdownNow() |
| */ |
| List<Runnable> shutdownNow(ExecutorService executorService); |
| |
| } |