001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.camel.builder;
018
019 import java.util.concurrent.ExecutorService;
020 import java.util.concurrent.ScheduledExecutorService;
021 import java.util.concurrent.TimeUnit;
022
023 import org.apache.camel.CamelContext;
024 import org.apache.camel.ThreadPoolRejectedPolicy;
025 import org.apache.camel.spi.ThreadPoolProfile;
026
027 /**
028 * A builder to create thread pools.
029 *
030 * @version
031 */
032 public final class ThreadPoolBuilder {
033
034 // reuse a profile to store the settings
035 private final ThreadPoolProfile profile;
036 private final CamelContext context;
037
038 public ThreadPoolBuilder(CamelContext context) {
039 this.context = context;
040 this.profile = new ThreadPoolProfile();
041 }
042
043 public ThreadPoolBuilder poolSize(int poolSize) {
044 profile.setPoolSize(poolSize);
045 return this;
046 }
047
048 public ThreadPoolBuilder maxPoolSize(int maxPoolSize) {
049 profile.setMaxPoolSize(maxPoolSize);
050 return this;
051 }
052
053 public ThreadPoolBuilder keepAliveTime(long keepAliveTime, TimeUnit timeUnit) {
054 profile.setKeepAliveTime(keepAliveTime);
055 profile.setTimeUnit(timeUnit);
056 return this;
057 }
058
059 public ThreadPoolBuilder keepAliveTime(long keepAliveTime) {
060 profile.setKeepAliveTime(keepAliveTime);
061 return this;
062 }
063
064 public ThreadPoolBuilder maxQueueSize(int maxQueueSize) {
065 profile.setMaxQueueSize(maxQueueSize);
066 return this;
067 }
068
069 public ThreadPoolBuilder rejectedPolicy(ThreadPoolRejectedPolicy rejectedPolicy) {
070 profile.setRejectedPolicy(rejectedPolicy);
071 return this;
072 }
073
074 /**
075 * Builds the new thread pool
076 *
077 * @return the created thread pool
078 * @throws Exception is thrown if error building the thread pool
079 */
080 public ExecutorService build() throws Exception {
081 return build(null, null);
082 }
083
084 /**
085 * Builds the new thread pool
086 *
087 * @param name name which is appended to the thread name
088 * @return the created thread pool
089 * @throws Exception is thrown if error building the thread pool
090 */
091 public ExecutorService build(String name) throws Exception {
092 return build(null, name);
093 }
094
095 /**
096 * Builds the new thread pool
097 *
098 * @param source the source object, usually it should be <tt>this</tt> passed in as parameter
099 * @param name name which is appended to the thread name
100 * @return the created thread pool
101 * @throws Exception is thrown if error building the thread pool
102 */
103 public ExecutorService build(Object source, String name) throws Exception {
104 return context.getExecutorServiceManager().newThreadPool(source, name, profile);
105 }
106
107 /**
108 * Builds the new scheduled thread pool
109 *
110 * @return the created scheduled thread pool
111 * @throws Exception is thrown if error building the scheduled thread pool
112 */
113 public ScheduledExecutorService buildScheduled() throws Exception {
114 return buildScheduled(null, null);
115 }
116
117 /**
118 * Builds the new scheduled thread pool
119 *
120 * @param name name which is appended to the thread name
121 * @return the created scheduled thread pool
122 * @throws Exception is thrown if error building the scheduled thread pool
123 */
124 public ScheduledExecutorService buildScheduled(String name) throws Exception {
125 return buildScheduled(null, name);
126 }
127
128 /**
129 * Builds the new scheduled thread pool
130 *
131 * @param source the source object, usually it should be <tt>this</tt> passed in as parameter
132 * @param name name which is appended to the thread name
133 * @return the created scheduled thread pool
134 * @throws Exception is thrown if error building the scheduled thread pool
135 */
136 public ScheduledExecutorService buildScheduled(Object source, String name) throws Exception {
137 return context.getExecutorServiceManager().newScheduledThreadPool(source, name, profile);
138 }
139
140 }