You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/04/07 09:29:40 UTC
svn commit: r931456 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/
camel-core/src/main/java/org/apache/camel/impl/
camel-core/src/main/java/org/apache/camel/spi/
camel-core/src/test/java/org/apache/camel/impl/
components/camel-guice/src/...
Author: davsclaus
Date: Wed Apr 7 07:29:39 2010
New Revision: 931456
URL: http://svn.apache.org/viewvc?rev=931456&view=rev
Log:
CAMEL-2558: Creating producer and consumer template do not throw checked exception. Added to set capacity using setter on ServicePool.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelContextSharedProducerServicePoolTest.java (with props)
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerServicePool.java
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultServicePool.java
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/SharedProducerServicePool.java
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ServicePool.java
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CustomProducerServicePoolTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MainSupportTest.java
camel/trunk/components/camel-guice/src/main/java/org/apache/camel/guice/Main.java
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=931456&r1=931455&r2=931456&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java Wed Apr 7 07:29:39 2010
@@ -473,9 +473,9 @@ public interface CamelContext extends Se
* before starting the template.
*
* @return the template
- * @throws Exception is thrown if error starting the template
+ * @throws RuntimeCamelException is thrown if error starting the template
*/
- ProducerTemplate createProducerTemplate() throws Exception;
+ ProducerTemplate createProducerTemplate();
/**
* Creates a new {@link ProducerTemplate} which is <b>started</b> and therefore ready to use right away.
@@ -487,9 +487,9 @@ public interface CamelContext extends Se
*
* @param maximumCacheSize the maximum cache size
* @return the template
- * @throws Exception is thrown if error starting the template
+ * @throws RuntimeCamelException is thrown if error starting the template
*/
- ProducerTemplate createProducerTemplate(int maximumCacheSize) throws Exception;
+ ProducerTemplate createProducerTemplate(int maximumCacheSize);
/**
* Creates a new {@link ConsumerTemplate} which is <b>started</b> and therefore ready to use right away.
@@ -503,9 +503,9 @@ public interface CamelContext extends Se
* before starting the template.
*
* @return the template
- * @throws Exception is thrown if error starting the template
+ * @throws RuntimeCamelException is thrown if error starting the template
*/
- ConsumerTemplate createConsumerTemplate() throws Exception;
+ ConsumerTemplate createConsumerTemplate();
/**
* Creates a new {@link ConsumerTemplate} which is <b>started</b> and therefore ready to use right away.
@@ -515,9 +515,9 @@ public interface CamelContext extends Se
*
* @param maximumCacheSize the maximum cache size
* @return the template
- * @throws Exception is thrown if error starting the template
+ * @throws RuntimeCamelException is thrown if error starting the template
*/
- ConsumerTemplate createConsumerTemplate(int maximumCacheSize) throws Exception;
+ ConsumerTemplate createConsumerTemplate(int maximumCacheSize);
/**
* Adds the given interceptor strategy
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=931456&r1=931455&r2=931456&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Wed Apr 7 07:29:39 2010
@@ -149,12 +149,13 @@ public class DefaultCamelContext extends
private ClassResolver classResolver = new DefaultClassResolver();
private PackageScanClassResolver packageScanClassResolver;
// we use a capacity of 100 per endpoint, so for the same endpoint we have at most 100 producers in the pool
- // so if we have 6 endpoints in the pool, we have 6 x 100 producers in total
+ // so if we have 6 endpoints in the pool, we can have 6 x 100 producers in total
private ServicePool<Endpoint, Producer> producerServicePool = new SharedProducerServicePool(100);
private NodeIdFactory nodeIdFactory = new DefaultNodeIdFactory();
private Tracer defaultTracer;
private InflightRepository inflightRepository = new DefaultInflightRepository();
private final List<RouteStartupOrder> routeStartupOrder = new ArrayList<RouteStartupOrder>();
+ // start auto assigning route ids using numbering 1000 and upwards
private int defaultRouteStartupOrder = 1000;
private ShutdownStrategy shutdownStrategy = new DefaultShutdownStrategy(this);
private ShutdownRoute shutdownRoute = ShutdownRoute.Default;
@@ -937,29 +938,37 @@ public class DefaultCamelContext extends
this.delay = delay;
}
- public ProducerTemplate createProducerTemplate() throws Exception {
+ public ProducerTemplate createProducerTemplate() {
int size = CamelContextHelper.getMaximumCachePoolSize(this);
return createProducerTemplate(size);
}
- public ProducerTemplate createProducerTemplate(int maximumCacheSize) throws Exception {
+ public ProducerTemplate createProducerTemplate(int maximumCacheSize) {
DefaultProducerTemplate answer = new DefaultProducerTemplate(this);
answer.setMaximumCacheSize(maximumCacheSize);
// start it so its ready to use
- answer.start();
+ try {
+ answer.start();
+ } catch (Exception e) {
+ throw ObjectHelper.wrapRuntimeCamelException(e);
+ }
return answer;
}
- public ConsumerTemplate createConsumerTemplate() throws Exception {
+ public ConsumerTemplate createConsumerTemplate() {
int size = CamelContextHelper.getMaximumCachePoolSize(this);
return createConsumerTemplate(size);
}
- public ConsumerTemplate createConsumerTemplate(int maximumCacheSize) throws Exception {
+ public ConsumerTemplate createConsumerTemplate(int maximumCacheSize) {
DefaultConsumerTemplate answer = new DefaultConsumerTemplate(this);
answer.setMaximumCacheSize(maximumCacheSize);
// start it so its ready to use
- answer.start();
+ try {
+ answer.start();
+ } catch (Exception e) {
+ throw ObjectHelper.wrapRuntimeCamelException(e);
+ }
return answer;
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerServicePool.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerServicePool.java?rev=931456&r1=931455&r2=931456&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerServicePool.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerServicePool.java Wed Apr 7 07:29:39 2010
@@ -29,6 +29,9 @@ import org.apache.camel.Producer;
*/
public class DefaultProducerServicePool extends DefaultServicePool<Endpoint, Producer> {
+ public DefaultProducerServicePool() {
+ }
+
public DefaultProducerServicePool(int capacity) {
super(capacity);
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultServicePool.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultServicePool.java?rev=931456&r1=931455&r2=931456&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultServicePool.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultServicePool.java Wed Apr 7 07:29:39 2010
@@ -35,17 +35,23 @@ import org.apache.commons.logging.LogFac
public abstract class DefaultServicePool<Key, Service> extends ServiceSupport implements ServicePool<Key, Service> {
protected final Log log = LogFactory.getLog(getClass());
protected final ConcurrentHashMap<Key, BlockingQueue<Service>> pool = new ConcurrentHashMap<Key, BlockingQueue<Service>>();
- protected final int capacity;
+ protected int capacity = 100;
+
+ protected DefaultServicePool() {
+ }
- /**
- * The capacity, note this is per key.
- *
- * @param capacity the capacity per key.
- */
public DefaultServicePool(int capacity) {
this.capacity = capacity;
}
+ public int getCapacity() {
+ return capacity;
+ }
+
+ public void setCapacity(int capacity) {
+ this.capacity = capacity;
+ }
+
public synchronized int size() {
int size = 0;
for (BlockingQueue<Service> entry : pool.values()) {
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java?rev=931456&r1=931455&r2=931456&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java Wed Apr 7 07:29:39 2010
@@ -330,7 +330,7 @@ public abstract class MainSupport extend
return camelTemplate;
}
- protected abstract ProducerTemplate findOrCreateCamelTemplate() throws Exception;
+ protected abstract ProducerTemplate findOrCreateCamelTemplate();
protected abstract Map<String, CamelContext> getCamelContextMap();
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/SharedProducerServicePool.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/SharedProducerServicePool.java?rev=931456&r1=931455&r2=931456&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/SharedProducerServicePool.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/SharedProducerServicePool.java Wed Apr 7 07:29:39 2010
@@ -26,6 +26,9 @@ import org.apache.camel.ShutdownableServ
*/
public class SharedProducerServicePool extends DefaultProducerServicePool implements ShutdownableService {
+ public SharedProducerServicePool() {
+ }
+
public SharedProducerServicePool(int capacity) {
super(capacity);
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ServicePool.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ServicePool.java?rev=931456&r1=931455&r2=931456&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ServicePool.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ServicePool.java Wed Apr 7 07:29:39 2010
@@ -24,17 +24,34 @@ package org.apache.camel.spi;
* <p/>
* Notice the capacity is <b>per key</b> which means that each key can contain at most
* (the capacity) services. The pool can contain an unbounded number of keys.
+ * <p/>
+ * By default the capacity is set to 100.
*
* @version $Revision$
*/
public interface ServicePool<Key, Service> {
/**
+ * Sets the capacity, which is capacity <b>per key</b>.
+ *
+ * @param capacity the capacity per key
+ */
+ void setCapacity(int capacity);
+
+ /**
+ * Gets the capacity per key.
+ *
+ * @return the capacity per key
+ */
+ int getCapacity();
+
+ /**
* Adds the given service to the pool and acquires it.
*
* @param key the key
* @param service the service
* @return the acquired service, is newer <tt>null</tt>
+ * @throws IllegalStateException if the queue is full (capacity has been reached)
*/
Service addAndAcquire(Key key, Service service);
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelContextSharedProducerServicePoolTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelContextSharedProducerServicePoolTest.java?rev=931456&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelContextSharedProducerServicePoolTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelContextSharedProducerServicePoolTest.java Wed Apr 7 07:29:39 2010
@@ -0,0 +1,114 @@
+/**
+ * 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.impl;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Producer;
+import org.apache.camel.ServicePoolAware;
+import org.apache.camel.spi.ServicePool;
+
+/**
+ * @version $Revision$
+ */
+public class CamelContextSharedProducerServicePoolTest extends ContextTestSupport {
+
+ private class MyProducer extends DefaultProducer implements ServicePoolAware {
+
+ private boolean start;
+ private boolean stop;
+
+ public MyProducer(Endpoint endpoint) throws Exception {
+ super(endpoint);
+ start();
+ }
+
+ public void process(Exchange exchange) throws Exception {
+ // noop
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+ assertEquals("Should not be started twice", false, start);
+ start = true;
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ super.doStop();
+ assertEquals("Should not be stopped twice", false, stop);
+ stop = true;
+ }
+ }
+
+ public void testSharedProducerServicePool() throws Exception {
+ // the default capacity
+ assertEquals(100, context.getProducerServicePool().getCapacity());
+
+ // change it
+ context.getProducerServicePool().setCapacity(25);
+ assertEquals(25, context.getProducerServicePool().getCapacity());
+ }
+
+ public void testSharedProducerServicePoolHitMax() throws Exception {
+ // the default capacity
+ assertEquals(100, context.getProducerServicePool().getCapacity());
+
+ // change it
+ ServicePool<Endpoint, Producer> pool = context.getProducerServicePool();
+ pool.setCapacity(3);
+ assertEquals(3, pool.getCapacity());
+
+ Endpoint endpoint = context.getEndpoint("mock:foo");
+
+ assertNull(pool.acquire(endpoint));
+ assertEquals(0, pool.size());
+
+ Producer producer = new MyProducer(endpoint);
+ producer = pool.addAndAcquire(endpoint, producer);
+ assertEquals(0, pool.size());
+
+ Producer producer2 = new MyProducer(endpoint);
+ producer2 = pool.addAndAcquire(endpoint, producer2);
+ assertEquals(0, pool.size());
+
+ Producer producer3 = new MyProducer(endpoint);
+ producer3 = pool.addAndAcquire(endpoint, producer3);
+ assertEquals(0, pool.size());
+
+ pool.release(endpoint, producer);
+ assertEquals(1, pool.size());
+
+ pool.release(endpoint, producer2);
+ assertEquals(2, pool.size());
+
+ pool.release(endpoint, producer3);
+ assertEquals(3, pool.size());
+
+ Producer producer4 = new MyProducer(endpoint);
+ try {
+ producer4 = pool.addAndAcquire(endpoint, producer4);
+ fail("Should throw an exception");
+ } catch (IllegalStateException e) {
+ assertEquals("Queue full", e.getMessage());
+ }
+ assertEquals(3, pool.size());
+ }
+
+}
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelContextSharedProducerServicePoolTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CamelContextSharedProducerServicePoolTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CustomProducerServicePoolTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CustomProducerServicePoolTest.java?rev=931456&r1=931455&r2=931456&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CustomProducerServicePoolTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/CustomProducerServicePoolTest.java Wed Apr 7 07:29:39 2010
@@ -76,6 +76,13 @@ public class CustomProducerServicePoolTe
private Producer producer;
+ public void setCapacity(int capacity) {
+ }
+
+ public int getCapacity() {
+ return 0;
+ }
+
public Producer addAndAcquire(Endpoint endpoint, Producer producer) {
if (endpoint instanceof MyEndpoint) {
return producer;
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MainSupportTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MainSupportTest.java?rev=931456&r1=931455&r2=931456&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MainSupportTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MainSupportTest.java Wed Apr 7 07:29:39 2010
@@ -31,7 +31,7 @@ public class MainSupportTest extends Con
private class MyMainSupport extends MainSupport {
- protected ProducerTemplate findOrCreateCamelTemplate() throws Exception {
+ protected ProducerTemplate findOrCreateCamelTemplate() {
return context.createProducerTemplate();
}
Modified: camel/trunk/components/camel-guice/src/main/java/org/apache/camel/guice/Main.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-guice/src/main/java/org/apache/camel/guice/Main.java?rev=931456&r1=931455&r2=931456&view=diff
==============================================================================
--- camel/trunk/components/camel-guice/src/main/java/org/apache/camel/guice/Main.java (original)
+++ camel/trunk/components/camel-guice/src/main/java/org/apache/camel/guice/Main.java Wed Apr 7 07:29:39 2010
@@ -85,7 +85,6 @@ public class Main extends MainSupport {
return instance;
}
-
// Properties
// -------------------------------------------------------------------------
protected void setInjector(Injector injector) {
@@ -129,7 +128,7 @@ public class Main extends MainSupport {
}
}
- protected ProducerTemplate findOrCreateCamelTemplate() throws Exception {
+ protected ProducerTemplate findOrCreateCamelTemplate() {
if (injector != null) {
Set<ProducerTemplate> set = Injectors.getInstancesOf(injector, ProducerTemplate.class);
if (!set.isEmpty()) {
Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java?rev=931456&r1=931455&r2=931456&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java Wed Apr 7 07:29:39 2010
@@ -186,7 +186,7 @@ public class Main extends MainSupport {
}
}
- protected ProducerTemplate findOrCreateCamelTemplate() throws Exception {
+ protected ProducerTemplate findOrCreateCamelTemplate() {
String[] names = getApplicationContext().getBeanNamesForType(ProducerTemplate.class);
if (names != null && names.length > 0) {
return (ProducerTemplate) getApplicationContext().getBean(names[0], ProducerTemplate.class);