register several cacheEnpoint with different name
-------------------------------------------------
Key: CAMEL-3473
URL: https://issues.apache.org/jira/browse/CAMEL-3473
Project: Camel
Issue Type: Bug
Affects Versions: 2.5.0
Reporter: skydjol
When you declare in camel context
<camel:endpoint id="cache1" uri="cache:cache1" />
<camel:endpoint id="cache2" uri="cache:cache2" />
<camel:endpoint id="cache3" uri="cache:cache3" />
CamelCacheProducer produce systematically in same cache because in
CacheComponent, CacheConfiguration is modified by method createEndpoint
{code:title=CamelCacheProducer.java|borderStyle=solid}
public void process(Exchange exchange) throws Exception {
if (LOG.isTraceEnabled()) {
LOG.trace("Cache Name: " + config.getCacheName());
}
if (cacheManager.cacheExists(config.getCacheName())) {
if (LOG.isTraceEnabled()) {
LOG.trace("Found an existing cache: " + config.getCacheName());
LOG.trace("Cache " + config.getCacheName() + " currently
contains "
+
cacheManager.getCache(config.getCacheName()).getSize() + " elements");
}
cache = cacheManager.getCache(config.getCacheName());
} else {
cache = new Cache(config.getCacheName(),
config.getMaxElementsInMemory(),
config.getMemoryStoreEvictionPolicy(),
config.isOverflowToDisk(),
config.getDiskStorePath(),
config.isEternal(),
config.getTimeToLiveSeconds(),
config.getTimeToIdleSeconds(),
config.isDiskPersistent(),
config.getDiskExpiryThreadIntervalSeconds(),
null);
cacheManager.addCache(cache);
if (LOG.isDebugEnabled()) {
LOG.debug("Added a new cache: " + cache.getName());
}
}
String key = exchange.getIn().getHeader(CacheConstants.CACHE_KEY,
String.class);
String operation =
exchange.getIn().getHeader(CacheConstants.CACHE_OPERATION, String.class);
if (operation == null) {
throw new CacheException("Operation not specified in the message
header [" + CacheConstants.CACHE_KEY + "]");
}
if ((key == null) &&
(!operation.equalsIgnoreCase(CacheConstants.CACHE_OPERATION_DELETEALL))) {
throw new CacheException("Cache Key is not specified in message
header header or endpoint URL.");
}
performCacheOperation(exchange, operation, key);
}
{code}
{code:title=CacheComponent.java|borderStyle=solid}
public class CacheComponent extends DefaultComponent {
private CacheConfiguration config;
private CacheManagerFactory cacheManagerFactory = new CacheManagerFactory();
public CacheComponent() {
config = new CacheConfiguration();
}
public CacheComponent(CamelContext context) {
super(context);
config = new CacheConfiguration();
}
@Override
@SuppressWarnings("unchecked")
protected Endpoint createEndpoint(String uri, String remaining, Map
parameters) throws Exception {
config.parseURI(new URI(uri));
CacheEndpoint cacheEndpoint = new CacheEndpoint(uri, this, config,
cacheManagerFactory);
setProperties(cacheEndpoint.getConfig(), parameters);
return cacheEndpoint;
}
public CacheManagerFactory getCacheManagerFactory() {
return cacheManagerFactory;
}
public void setCacheManagerFactory(CacheManagerFactory cacheManagerFactory)
{
this.cacheManagerFactory = cacheManagerFactory;
}
@Override
protected void doStart() throws Exception {
super.doStart();
ServiceHelper.startService(cacheManagerFactory);
}
@Override
protected void doStop() throws Exception {
ServiceHelper.stopService(cacheManagerFactory);
super.doStop();
}
}
{code}
The resolution could be in CacheComponent
{code:title=CacheComponent.java|borderStyle=solid}
@Override
@SuppressWarnings("unchecked")
protected Endpoint createEndpoint(String uri, String remaining, Map
parameters) throws Exception {
CacheConfiguration config = new CacheConfiguration();
config.parseURI(new URI(uri));
CacheEndpoint cacheEndpoint = new CacheEndpoint(uri, this, config,
cacheManagerFactory);
setProperties(cacheEndpoint.getConfig(), parameters);
return cacheEndpoint;
}
{code}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.