...
Options
Name | Default Value | Description |
---|---|---|
|
| The name of the caching provider that could be
|
cacheConfiguration |
| A reference to a javax.cache.configuration.Configuration instance |
cacheConfigurationProperties |
| A reference to a java.util.Properties for the javax.cache.spi.CachingProvider to create the javax.cache.CacheManager |
configurationUri |
| An implementation specific URI for the javax.cache.CacheManager |
cacheLoaderFactory |
| A reference to a javax.cache.configuration.Factory for javax.cache.integration.CacheLoader |
cacheWriterFactory |
| A reference to a javax.cache.configuration.Factory for javax.cache.integration.CacheWriter |
expiryPolicyFactory | null | A reference to a javax.cache.configuration.Factory for javax.cache.expiry.ExpiryPolicy |
readThrough |
| A flag indicating if "read-through" mode is required |
writeThrough |
| A flag indicating if "write-through" mode is required |
storeByValue | true | A flag indicating if the cache will be store-by-value or store-by-reference |
statisticsEnabled |
| A flag indicating if statistics gathering is enabled |
managementEnabled |
| A flag indicating if management is enabled |
filteredEvents |
| A comma separated list of event types to filter. If you use this option eventFilters one will be ignored. |
eventFilters |
| A comma separated list of javax.cache.event.CacheEntryEventFilter references. If you use this option filteredEvents one will be ignored. |
oldValueRequired | false | A flag indicating if the old value is required for events, supported values are CREATED, UPDATED, REMOVED, EXPIRED |
synchronous | false | A flag indicating if the event listener should block the thread causing the event |
action | null | The default action to apply, value in the header has the priority |
createCacheIfNotExists | true | Configure if the cache identified by cacheName need to be created if it does not exists |
lookupProviders | false | OSGi only: When set to true, camel-jcache tries to find the bundle providing the provider configured by the cachingProvider option and it succeeds is sets-up a special classloader to boostrap the cache |
Header variables
Name | Type | Description |
---|---|---|
CamelJCacheAction |
| The action to perform, supported values are PUT, PUTALL, PUTIFABSENT, GET, GETALL, GETANDREMOVE, GETANDREPLACE, GETANDPUT, REPLACE, REMOVE, REMOVEALL, INVOKE, CLEAR |
CamelJCacheResult |
| The result of an action, i.e. Boolean for PUT, REMOVE, REPLACE |
CamelJCacheEventType |
| The type of event javax.cache.event.EventType |
CamelJCacheKey |
| A key to apply an action |
CamelJCacheKeys | java.util.Set<java-lang.Object> | A set of keys to apply an action, used for GETALL, REMOVEALL, INVOKE |
CamelJCacheOldValue | java.lang.Object | On consumer side, the header value contains the old value associated to a key. On producer side, the header must contains the expected old value to use CAS like operation |
CamelJCacheEntryProcessor | javax.cache.processor.EntryProcessor | The entry processor to use for INVOKE action |
CamelJCacheEntryArgs | java.util.collection<java.lang.Object> | Additional arguments to pass to the javax.cache.processor.EntryProcessor |
JCache based idempotent repository example:
Code Block | ||
---|---|---|
| ||
JCacheIdempotentRepository idempotentRepo = new JCacheIdempotentRepository(); idempotentRepo.setCacheName("idempotent-cache") from("direct:in") .idempotentConsumer(header("messageId"), idempotentRepo) .to("mock:out"); |
JCache based aggregation repository example:
Code Block | ||
---|---|---|
| ||
package org.apache.camel.component.jcache.processor.aggregate; import org.apache.camel.EndpointInject; import org.apache.camel.Exchange; import org.apache.camel.Produce; import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.processor.aggregate.AggregationStrategy; import org.junit.Test; public class JCacheAggregationRepositoryRoutesTest extends JCacheAggregationRepositoryTestSupport { private static final String MOCK_GOTCHA = "mock:gotcha"; private static final String DIRECT_ONE = "direct:one"; private static final String DIRECT_TWO = "direct:two"; @EndpointInject(uri = MOCK_GOTCHA) private MockEndpoint mock; @Produce(uri = DIRECT_ONE) private ProducerTemplate produceOne; @Produce(uri = DIRECT_TWO) private ProducerTemplate produceTwo; @Test public void checkAggregationFromTwoRoutes() throws Exception { final JCacheAggregationRepository repoOne = createRepository(false); final JCacheAggregationRepository repoTwo = createRepository(false); final int completionSize = 4; final String correlator = "CORRELATOR"; RouteBuilder rbOne = new RouteBuilder() { @Override public void configure() throws Exception { from(DIRECT_ONE).routeId("AggregatingRouteOne") .aggregate(header(correlator)) .aggregationRepository(repoOne) .aggregationStrategy(new MyAggregationStrategy()) .completionSize(completionSize) .to(MOCK_GOTCHA); } }; RouteBuilder rbTwo = new RouteBuilder() { @Override public void configure() throws Exception { from(DIRECT_TWO).routeId("AggregatingRouteTwo") .aggregate(header(correlator)) .aggregationRepository(repoTwo) .aggregationStrategy(new MyAggregationStrategy()) .completionSize(completionSize) .to(MOCK_GOTCHA); } }; context().addRoutes(rbOne); context().addRoutes(rbTwo); context().start(); mock.expectedMessageCount(1); mock.expectedBodiesReceived(1 + 2 + 3 + 4); produceOne.sendBodyAndHeader(1, correlator, correlator); produceTwo.sendBodyAndHeader(2, correlator, correlator); produceOne.sendBodyAndHeader(3, correlator, correlator); produceOne.sendBodyAndHeader(4, correlator, correlator); mock.assertIsSatisfied(); } private class MyAggregationStrategy implements AggregationStrategy { @Override public Exchange aggregate(Exchange oldExchange, Exchange newExchange) { if (oldExchange == null) { return newExchange; } else { Integer n = newExchange.getIn().getBody(Integer.class); Integer o = oldExchange.getIn().getBody(Integer.class); Integer v = (o == null ? 0 : o) + (n == null ? 0 : n); oldExchange.getIn().setBody(v, Integer.class); return oldExchange; } } } protected JCacheAggregationRepository createRepository(boolean optimistic) throws Exception { JCacheAggregationRepository repository = new JCacheAggregationRepository(); repository.setConfiguration(new JCacheConfiguration()); repository.setCacheName("aggregation-repository"); repository.setOptimistic(optimistic); return repository; } } |