Author: davsclaus
Date: Fri Oct 5 09:15:22 2012
New Revision: 1394419
URL: http://svn.apache.org/viewvc?rev=1394419&view=rev
Log:
CAMEL-5683: SendProcessor should not use a soft cache as we want the producer
to be kept around, as we only store a single producer. This prevents the
producer to be GC when running low on memory, that can cause Camel JMS
component using temporary queues with request/reply to create new producer, and
not re-use existing. Causing a leak for message listeners over time.
Modified:
camel/branches/camel-2.9.x/ (props changed)
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/ProducerCache.java
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/management/ManagedProducerCacheTest.java
Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Merged /camel/trunk:r1394408
Merged /camel/branches/camel-2.10.x:r1394409
Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified:
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/ProducerCache.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/ProducerCache.java?rev=1394419&r1=1394418&r2=1394419&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/ProducerCache.java
(original)
+++
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/ProducerCache.java
Fri Oct 5 09:15:22 2012
@@ -64,6 +64,10 @@ public class ProducerCache extends Servi
this(source, camelContext, camelContext.getProducerServicePool(),
createLRUCache(cacheSize));
}
+ public ProducerCache(Object source, CamelContext camelContext, Map<String,
Producer> cache) {
+ this(source, camelContext, camelContext.getProducerServicePool(),
cache);
+ }
+
public ProducerCache(Object source, CamelContext camelContext,
ServicePool<Endpoint, Producer> producerServicePool, Map<String, Producer>
cache) {
this.source = source;
this.camelContext = camelContext;
Modified:
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java?rev=1394419&r1=1394418&r2=1394419&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java
(original)
+++
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/impl/converter/AsyncProcessorTypeConverter.java
Fri Oct 5 09:15:22 2012
@@ -44,7 +44,7 @@ public class AsyncProcessorTypeConverter
}
/**
- * @deprecated use AnycProcessorConverter.convert instead
+ * @deprecated use {@link
AsyncProcessorConverterHelper#convert(org.apache.camel.Processor)} instead
*/
@Deprecated
public static AsyncProcessor convert(Processor value) {
Modified:
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java?rev=1394419&r1=1394418&r2=1394419&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
(original)
+++
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
Fri Oct 5 09:15:22 2012
@@ -16,6 +16,8 @@
*/
package org.apache.camel.processor;
+import java.util.HashMap;
+
import org.apache.camel.AsyncCallback;
import org.apache.camel.AsyncProcessor;
import org.apache.camel.AsyncProducerCallback;
@@ -143,7 +145,11 @@ public class SendProcessor extends Servi
protected void doStart() throws Exception {
if (producerCache == null) {
- producerCache = new ProducerCache(this, camelContext);
+ // use a single producer cache as we need to only hold reference
for one destination
+ // and use a regular HashMap as we do not want a soft reference
store that may get re-claimed when low on memory
+ // as we want to ensure the producer is kept around, to ensure its
lifecycle is fully managed,
+ // eg stopping the producer when we stop etc.
+ producerCache = new ProducerCache(this, camelContext, new
HashMap<String, Producer>(1));
// add it as a service so we can manage it
camelContext.addService(producerCache);
}
Modified:
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/management/ManagedProducerCacheTest.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/management/ManagedProducerCacheTest.java?rev=1394419&r1=1394418&r2=1394419&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/management/ManagedProducerCacheTest.java
(original)
+++
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/management/ManagedProducerCacheTest.java
Fri Oct 5 09:15:22 2012
@@ -51,7 +51,7 @@ public class ManagedProducerCacheTest ex
assertNotNull("Should have found ProducerCache", on);
Integer max = (Integer) mbeanServer.getAttribute(on,
"MaximumCacheSize");
- assertEquals(1000, max.intValue());
+ assertEquals(-1, max.intValue());
Integer current = (Integer) mbeanServer.getAttribute(on, "Size");
assertEquals(1, current.intValue());