[[jcache-component]]
= JCache Component
:page-source: components/camel-jcache/src/main/docs/jcache-component.adoc

*Available as of Camel version 2.17*

The JCache component enables you to perform caching operations using JSR107/JCache as cache implementation.

== URI Format

[source,java]
----------------------------
jcache:cacheName[?options]
----------------------------

== URI Options

// endpoint options: START
The JCache endpoint is configured using URI syntax:

----
jcache:cacheName
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *cacheName* | *Required* The name of the cache |  | String
|===


=== Query Parameters (24 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *cacheConfiguration* (common) | A Configuration for the Cache |  | Configuration
| *cacheConfigurationProperties* (common) | The Properties for the javax.cache.spi.CachingProvider to create the CacheManager |  | Properties
| *cachingProvider* (common) | The fully qualified class name of the javax.cache.spi.CachingProvider |  | String
| *configurationUri* (common) | An implementation specific URI for the CacheManager |  | String
| *managementEnabled* (common) | Whether management gathering is enabled | false | boolean
| *readThrough* (common) | If read-through caching should be used | false | boolean
| *statisticsEnabled* (common) | Whether statistics gathering is enabled | false | boolean
| *storeByValue* (common) | If cache should use store-by-value or store-by-reference semantics | true | boolean
| *writeThrough* (common) | If write-through caching should be used | false | boolean
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *filteredEvents* (consumer) | Events a consumer should filter. If using filteredEvents option, then eventFilters one will be ignored |  | List
| *oldValueRequired* (consumer) | if the old value is required for events | false | boolean
| *synchronous* (consumer) | if the event listener should block the thread causing the event | false | boolean
| *eventFilters* (consumer) | The CacheEntryEventFilter. If using eventFilters option, then filteredEvents one will be ignored |  | List
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
| *action* (producer) | To configure using a cache operation by default. If an operation in the message header, then the operation from the header takes precedence. |  | String
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *cacheLoaderFactory* (advanced) | The CacheLoader factory |  | Factory
| *cacheWriterFactory* (advanced) | The CacheWriter factory |  | Factory
| *createCacheIfNotExists* (advanced) | Configure if a cache need to be created if it does exist or can't be pre-configured. | true | boolean
| *expiryPolicyFactory* (advanced) | The ExpiryPolicy factory |  | Factory
| *lookupProviders* (advanced) | Configure if a camel-cache should try to find implementations of jcache api in runtimes like OSGi. | false | boolean
|===
// endpoint options: END
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-jcache-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 6 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.jcache.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
| *camel.component.jcache.cache-configuration* | A Configuration for the Cache. The option is a javax.cache.configuration.Configuration type. |  | String
| *camel.component.jcache.cache-configuration-properties* | The Properties for the javax.cache.spi.CachingProvider to create the CacheManager. The option is a java.util.Properties type. |  | String
| *camel.component.jcache.caching-provider* | The fully qualified class name of the javax.cache.spi.CachingProvider |  | String
| *camel.component.jcache.configuration-uri* | An implementation specific URI for the CacheManager |  | String
| *camel.component.jcache.enabled* | Enable jcache component | true | Boolean
|===
// spring-boot-auto-configure options: END









// component options: START
The JCache component supports 5 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *cachingProvider* (common) | The fully qualified class name of the javax.cache.spi.CachingProvider |  | String
| *cacheConfiguration* (common) | A Configuration for the Cache |  | Configuration
| *cacheConfiguration Properties* (common) | The Properties for the javax.cache.spi.CachingProvider to create the CacheManager |  | Properties
| *configurationUri* (common) | An implementation specific URI for the CacheManager |  | String
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END

== JCache Policy

The JCachePolicy is an interceptor around a route that caches the "result of the route" - the message body - after the route is completed.
  If next time the route is called with a "similar" Exchange, the cached value is used on the Exchange instead of executing the route.
  The policy uses the JSR107/JCache API of a cache implementation, so it's required to add one (e.g. Hazelcast, Ehcache) to the classpath.

The policy takes a _key_ value from the received Exchange to get or store values in the cache. By default the _key_ is the message body.
  For example if the route - having a JCachePolicy - receives an Exchange with a String body "fruit" and the body at the
  end of the route is "apple", it stores a _key/value_ pair "fruit=apple" in the cache. If next time another Exchange arrives
  with a body "fruit", the value "apple" is taken from the cache instead of letting the route process the Exchange.

So by default the message body at the beginning of the route is the cache _key_ and the body at the end is the stored _value_.
  It's possible to use something else as _key_ by setting a Camel Expression via _.setKeyExpression()_
  that will be used to determine the key.

The policy needs a JCache Cache. It can be set directly by _.setCache()_ or the policy will try to get or create the Cache
  based on the other parameters set.

Similar caching solution is available for example in Spring using the @Cacheable annotation.

== JCachePolicy Fields


[width="100%",cols="2,5,3,2",options="header"]
|===
| Name | Description | Default | Type
| *cache* | The Cache to use to store the cached values. If this value is set, _cacheManager_, _cacheName_ and _cacheConfiguration_ is ignored. |  | Cache
| *cacheManager* | The CacheManager to use to lookup or create the Cache. Used only if _cache_ is not set. | Try to find a CacheManager in CamelContext registry or calls the standard JCache _Caching.getCachingProvider().getCacheManager()_. | CacheManager
| *cacheName* | Name of the cache. Get the Cache from cacheManager or create a new one if it doesn't exist. | RouteId of the route. | String
| *cacheConfiguration* | JCache cache configuration to use if a new Cache is created | Default new _MutableConfiguration_ object. | CacheConfiguration
| *keyExpression* | An Expression to evaluate to determine the cache key. | Exchange body | Expression
| *enabled* | If policy is not enabled, no wrapper processor is added to the route. It has impact only during startup, not during runtime. For example it can be used to disable caching from properties. | true | boolean
|===

== How to determine cache to use?


== Set cache

The cache used by the policy can be set directly. This means you have to configure the cache yourself and get a JCache Cache object,
 but this gives the most flexibility. For example it can be setup in the config xml of the cache provider (Hazelcast, EhCache, ...)
 and used here. Or it's possible to use the standard Caching API as below:


[source,java]
----------------------------
MutableConfiguration configuration = new MutableConfiguration<>();
configuration.setTypes(String.class, Object.class);
configuration.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.MINUTES, 60)));
CacheManager cacheManager = Caching.getCachingProvider().getCacheManager();
Cache cache = cacheManager.createCache("orders",configuration);

JCachePolicy jcachePolicy = new JCachePolicy();
jcachePolicy.setCache(cache);

from("direct:get-orders")
    .policy(jcachePolicy)
    .log("Getting order with id: ${body}")
    .bean(OrderService.class,"findOrderById(${body})");
----------------------------

== Set cacheManager

If the _cache_ is not set, the policy will try to lookup or create the cache automatically.
 If the _cacheManager_ is set on the policy, it will try to get cache with the set _cacheName_ (routeId by default) from the CacheManager.
 Is the cache does not exist it will create a new one using the _cacheConfiguration_ (new MutableConfiguration by default).

[source,java]
----------------------------
//In a Spring environment for example the CacheManager may already exist as a bean
@Autowire
CacheManager cacheManager;
...

//Cache "items" is used or created if not exists
JCachePolicy jcachePolicy = new JCachePolicy();
jcachePolicy.setCacheManager(cacheManager);
jcachePolicy.setCacheName("items")
----------------------------

== Find cacheManager

If _cacheManager_ (and the _cache_) is not set, the policy will try to find a JCache CacheManager object:

* Lookup a CacheManager in Camel registry - that falls back on JNDI or Spring context based on the environment
* Use the standard api _Caching.getCachingProvider().getCacheManager()_

[source,java]
----------------------------
//A Cache "getorders" will be used (or created) from the found CacheManager
from("direct:get-orders").routeId("getorders")
    .policy(new JCachePolicy())
    .log("Getting order with id: ${body}")
    .bean(OrderService.class,"findOrderById(${body})");
----------------------------

== Partially wrapped route

In the examples above the whole route was executed or skipped. A policy can be used to wrap only a segment of the route instead of all processors.

[source,java]
----------------------------
from("direct:get-orders")
    .log("Order requested: ${body}")
    .policy(new JCachePolicy())
        .log("Getting order with id: ${body}")
        .bean(OrderService.class,"findOrderById(${body})")
    .end()
    .log("Order found: ${body}");
----------------------------

The _.log()_ at the beginning and at the end of the route is always called, but the section inside _.policy()_ and _.end()_ is executed based on the cache.

== KeyExpression

By default the policy uses the received Exchange body as _key_, so the default expression is like _simple("$\{body\})_.
 We can set a different Camel Expression as _keyExpression_ which will be evaluated to determine the key.
 For example if we try to find an _order_ by an _orderId_ which is in the message headers,
 set _header("orderId")_ (or _simple("${header.orderId})_ as _keyExpression_.

The expression is evaluated only once at the beginning of the route to determine the _key_. If nothing was found in cache,
 this _key_ is used to store the _value_ in cache at the end of the route.

[source,java]
----------------------------
MutableConfiguration configuration = new MutableConfiguration<>();
configuration.setTypes(String.class, Order.class);
configuration.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.MINUTES, 10)));

JCachePolicy jcachePolicy = new JCachePolicy();
jcachePolicy.setCacheConfiguration(configuration);
jcachePolicy.setCacheName("orders")
jcachePolicy.setKeyExpression(simple("${header.orderId}))

//The cache key is taken from "orderId" header.
from("direct:get-orders")
    .policy(jcachePolicy)
    .log("Getting order with id: ${header.orderId}")
    .bean(OrderService.class,"findOrderById(${header.orderId})");
----------------------------

== Camel XML DSL examples

== Use JCachePolicy in an XML route

In Camel XML DSL we need a named reference to the JCachePolicy instance (registered in CamelContext or simply in Spring).
 We have to wrap the route between <policy>...</policy> tags after <from>.

[source,xml]
----------------------------
<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="direct:get-order"/>
        <policy ref="jCachePolicy" >
            <setBody>
                <method ref="orderService" method="findOrderById(${body})"/>
            </setBody>
        </policy>
    </route>
</camelContext>
----------------------------

See this example when only a part of the route is wrapped:

[source,xml]
----------------------------
<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="direct:get-order"/>
        <log message="Start - This is always called. body:${body}"/>
        <policy ref="jCachePolicy" >
            <log message="Executing route, not found in cache. body:${body}"/>
            <setBody>
                <method ref="orderService" method="findOrderById(${body})"/>
            </setBody>
        </policy>
        <log message="End - This is always called. body:${body}"/>
    </route>
</camelContext>
----------------------------


== Define CachePolicy in Spring

It's more convenient to create a JCachePolicy in Java especially within a RouteBuilder using the Camel DSL expressions,
 but see this example to define it in a Spring XML:

[source,xml]
----------------------------
<bean id="jCachePolicy" class="org.apache.camel.component.jcache.policy.JCachePolicy">
    <property name="cacheName" value="spring"/>
    <property name="keyExpression">
        <bean class="org.apache.camel.model.language.SimpleExpression">
            <property name="expression" value="${header.mykey}"/>
        </bean>
    </property>
</bean>
----------------------------

== Create Cache from XML

It's not strictly speaking related to Camel XML DLS, but JCache providers usually have a way to configure the cache in an XML file.
 For example with Hazelcast you can add a _hazelcast.xml_ to classpath to configure the cache "spring" used in the example above.

[source,xml]
----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<hazelcast xmlns="http://www.hazelcast.com/schema/config"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.11.xsd" >

    <cache name="spring">
        <key-type class-name="java.lang.String"/>
        <value-type class-name="java.lang.String"/>
        <expiry-policy-factory>
            <timed-expiry-policy-factory expiry-policy-type="CREATED" duration-amount="60" time-unit="MINUTES"/>
        </expiry-policy-factory>
    </cache>

</hazelcast>
----------------------------


== Special scenarios and error handling

If the Cache used by the policy is closed (can be done dynamically), the whole caching functionality is skipped,
 the route will be executed every time.

If the determined _key_ is _null_, nothing is looked up or stored in cache.

In case of an exception during the route, the error handled is called as always. If the exception gets _handled()_,
 the policy stores the Exchange body, otherwise nothing is added to the cache.
 If an exception happens during evaluating the keyExpression, the routing fails, the error handler is called as normally.
