Author: davsclaus
Date: Tue Mar 16 13:24:47 2010
New Revision: 923730
URL: http://svn.apache.org/viewvc?rev=923730&view=rev
Log:
CAMEL-1588: Configuring a custom default thread pool profile. Added better
debug logging for thread pool activity.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ThreadsDefinition.java
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelCustomDefaultThreadPoolProfileTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ThreadsCoreAndMaxPoolKeepAliveTimeTest.java
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelThreadPoolFactoryBean.java
camel/trunk/components/camel-spring/src/main/resources/org/apache/camel/spring/jaxb.index
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/ThreadsExternalThreadPoolFactoryBeanTest.xml
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ThreadsDefinition.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ThreadsDefinition.java?rev=923730&r1=923729&r2=923730&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ThreadsDefinition.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ThreadsDefinition.java
Tue Mar 16 13:24:47 2010
@@ -33,6 +33,7 @@ import org.apache.camel.builder.xml.Time
import org.apache.camel.processor.ThreadsProcessor;
import org.apache.camel.processor.UnitOfWorkProcessor;
import org.apache.camel.spi.RouteContext;
+import org.apache.camel.spi.ThreadPoolProfile;
import org.apache.camel.util.concurrent.ExecutorServiceHelper;
/**
@@ -53,12 +54,12 @@ public class ThreadsDefinition extends O
@XmlAttribute
private Integer maxPoolSize;
@XmlAttribute
- private Integer keepAliveTime = 60;
+ private Integer keepAliveTime;
@XmlAttribute
@XmlJavaTypeAdapter(TimeUnitAdapter.class)
- private TimeUnit units = TimeUnit.SECONDS;
+ private TimeUnit timeUnit;
@XmlAttribute
- private Integer maxQueueSize = -1;
+ private Integer maxQueueSize;
@XmlTransient()
private String threadName;
@XmlAttribute
@@ -78,15 +79,21 @@ public class ThreadsDefinition extends O
// use the cached thread pool
executorService =
routeContext.getCamelContext().getExecutorServiceStrategy().newDefaultThreadPool(this,
name);
} else {
+ ThreadPoolProfile profile =
routeContext.getCamelContext().getExecutorServiceStrategy().getDefaultThreadPoolProfile();
+ // use the default thread pool profile as base and then
override with values
// use a custom pool based on the settings
- int max = getMaxPoolSize() != null ? getMaxPoolSize() :
poolSize;
- RejectedExecutionHandler rejected = null;
+ int max = getMaxPoolSize() != null ? getMaxPoolSize() :
profile.getMaxPoolSize();
+ long keepAlive = getKeepAliveTime() != null ?
getKeepAliveTime() : profile.getKeepAliveTime();
+ int maxQueue = getMaxQueueSize() != null ? getMaxQueueSize() :
profile.getMaxQueueSize();
+ TimeUnit tu = getTimeUnit() != null ? getTimeUnit() :
profile.getTimeUnit();
+ RejectedExecutionHandler rejected =
profile.getRejectedExecutionHandler();
if (rejectedPolicy != null) {
rejected = rejectedPolicy.asRejectedExecutionHandler();
}
+
executorService =
routeContext.getCamelContext().getExecutorServiceStrategy()
- .newThreadPool(this, name, poolSize,
max, getKeepAliveTime(), getUnits(),
- getMaxQueueSize(),
rejected, true);
+ .newThreadPool(this, name, poolSize,
max, keepAlive, tu,
+ maxQueue, rejected,
true);
}
}
Processor childProcessor = routeContext.createProcessor(this);
@@ -164,8 +171,8 @@ public class ThreadsDefinition extends O
* @param keepAliveTimeUnits time unit
* @return the builder
*/
- public ThreadsDefinition units(TimeUnit keepAliveTimeUnits) {
- setUnits(keepAliveTimeUnits);
+ public ThreadsDefinition timeUnit(TimeUnit keepAliveTimeUnits) {
+ setTimeUnit(keepAliveTimeUnits);
return this;
}
@@ -265,12 +272,12 @@ public class ThreadsDefinition extends O
this.keepAliveTime = keepAliveTime;
}
- public TimeUnit getUnits() {
- return units;
+ public TimeUnit getTimeUnit() {
+ return timeUnit;
}
- public void setUnits(TimeUnit units) {
- this.units = units;
+ public void setTimeUnit(TimeUnit timeUnit) {
+ this.timeUnit = timeUnit;
}
public Integer getMaxQueueSize() {
Modified:
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelCustomDefaultThreadPoolProfileTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelCustomDefaultThreadPoolProfileTest.java?rev=923730&r1=923729&r2=923730&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelCustomDefaultThreadPoolProfileTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelCustomDefaultThreadPoolProfileTest.java
Tue Mar 16 13:24:47 2010
@@ -57,7 +57,7 @@ public class CamelCustomDefaultThreadPoo
@Override
public void configure() throws Exception {
from("direct:start")
- .threads()
+ .threads(25, 45)
.to("mock:result");
}
};
Modified:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ThreadsCoreAndMaxPoolKeepAliveTimeTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ThreadsCoreAndMaxPoolKeepAliveTimeTest.java?rev=923730&r1=923729&r2=923730&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ThreadsCoreAndMaxPoolKeepAliveTimeTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ThreadsCoreAndMaxPoolKeepAliveTimeTest.java
Tue Mar 16 13:24:47 2010
@@ -41,7 +41,7 @@ public class ThreadsCoreAndMaxPoolKeepAl
public void configure() throws Exception {
from("direct:start")
// will use a a custom thread pool with 5 in core and 10
as max
- .threads(5, 10).keepAliveTime(10).units(TimeUnit.SECONDS)
+ .threads(5,
10).keepAliveTime(10).timeUnit(TimeUnit.SECONDS)
.to("mock:result");
}
};
Modified:
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelThreadPoolFactoryBean.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelThreadPoolFactoryBean.java?rev=923730&r1=923729&r2=923730&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelThreadPoolFactoryBean.java
(original)
+++
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelThreadPoolFactoryBean.java
Tue Mar 16 13:24:47 2010
@@ -47,7 +47,7 @@ import static org.apache.camel.util.Obje
@XmlAccessorType(XmlAccessType.FIELD)
public class CamelThreadPoolFactoryBean extends IdentifiedType implements
FactoryBean, CamelContextAware, ApplicationContextAware {
- @XmlAttribute
+ @XmlAttribute(required = true)
private Integer poolSize;
@XmlAttribute
private Integer maxPoolSize;
@@ -55,11 +55,11 @@ public class CamelThreadPoolFactoryBean
private Long keepAliveTime = 60L;
@XmlAttribute
@XmlJavaTypeAdapter(TimeUnitAdapter.class)
- private TimeUnit units = TimeUnit.SECONDS;
+ private TimeUnit timeUnit = TimeUnit.SECONDS;
@XmlAttribute
private Integer maxQueueSize = -1;
@XmlAttribute
- private ThreadPoolRejectedPolicy rejectedPolicy;
+ private ThreadPoolRejectedPolicy rejectedPolicy =
ThreadPoolRejectedPolicy.CallerRuns;
@XmlAttribute
private String threadName;
@XmlAttribute
@@ -75,24 +75,22 @@ public class CamelThreadPoolFactoryBean
if (camelContext == null && camelContextId != null) {
camelContext =
CamelContextResolverHelper.getCamelContextWithId(applicationContext,
camelContextId);
}
+
notNull(camelContext, "camelContext");
+ if (poolSize == null || poolSize <= 0) {
+ throw new IllegalArgumentException("PoolSize must be a positive
number");
+ }
String name = getThreadName() != null ? getThreadName() : getId();
- ExecutorService answer;
- if (getPoolSize() == null || getPoolSize() <= 0) {
- // use the default profile
- answer =
camelContext.getExecutorServiceStrategy().newDefaultThreadPool(getId(), name);
- } else {
- // use a custom pool based on the settings
- int max = getMaxPoolSize() != null ? getMaxPoolSize() :
getPoolSize();
- RejectedExecutionHandler rejected = null;
- if (rejectedPolicy != null) {
- rejected = rejectedPolicy.asRejectedExecutionHandler();
- }
- answer =
camelContext.getExecutorServiceStrategy().newThreadPool(getId(), name,
getPoolSize(), max,
- getKeepAliveTime(), getUnits(), getMaxQueueSize(),
rejected, isDaemon());
+ int max = getMaxPoolSize() != null ? getMaxPoolSize() : getPoolSize();
+ RejectedExecutionHandler rejected = null;
+ if (rejectedPolicy != null) {
+ rejected = rejectedPolicy.asRejectedExecutionHandler();
}
+
+ ExecutorService answer =
camelContext.getExecutorServiceStrategy().newThreadPool(getId(), name,
getPoolSize(), max,
+ getKeepAliveTime(), getTimeUnit(), getMaxQueueSize(),
rejected, isDaemon());
return answer;
}
@@ -128,12 +126,12 @@ public class CamelThreadPoolFactoryBean
this.keepAliveTime = keepAliveTime;
}
- public TimeUnit getUnits() {
- return units;
+ public TimeUnit getTimeUnit() {
+ return timeUnit;
}
- public void setUnits(TimeUnit units) {
- this.units = units;
+ public void setTimeUnit(TimeUnit timeUnit) {
+ this.timeUnit = timeUnit;
}
public Integer getMaxQueueSize() {
Modified:
camel/trunk/components/camel-spring/src/main/resources/org/apache/camel/spring/jaxb.index
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/resources/org/apache/camel/spring/jaxb.index?rev=923730&r1=923729&r2=923730&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/main/resources/org/apache/camel/spring/jaxb.index
(original)
+++
camel/trunk/components/camel-spring/src/main/resources/org/apache/camel/spring/jaxb.index
Tue Mar 16 13:24:47 2010
@@ -18,9 +18,9 @@ CamelBeanPostProcessor
CamelConsumerTemplateFactoryBean
CamelContextFactoryBean
CamelEndpointFactoryBean
-CamelExecutorServiceFactoryBean
CamelJMXAgentDefinition
CamelProducerTemplateFactoryBean
CamelPropertyPlaceholderDefinition
CamelProxyFactoryDefinition
CamelServiceExporterDefinition
+CamelThreadPoolFactoryBean
Modified:
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/ThreadsExternalThreadPoolFactoryBeanTest.xml
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/ThreadsExternalThreadPoolFactoryBeanTest.xml?rev=923730&r1=923729&r2=923730&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/ThreadsExternalThreadPoolFactoryBeanTest.xml
(original)
+++
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/ThreadsExternalThreadPoolFactoryBeanTest.xml
Tue Mar 16 13:24:47 2010
@@ -31,7 +31,7 @@
threadName="myPool"
keepAliveTime="30"
rejectedPolicy="DiscardOldest"
- units="SECONDS"
+ timeUnit="SECONDS"
daemon="true"
xmlns="http://camel.apache.org/schema/spring"/>