[[jcache-component]]
= JCache Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-jcache/src/main/docs/jcache-component.adoc
:docTitle: JCache
:artifactId: camel-jcache
:description: Perform caching operations against JSR107/JCache.
:since: 2.17
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

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 (multiple events can be separated by comma). If using filteredEvents option, then eventFilters one will be ignored. The value can be one of: CREATED, UPDATED, REMOVED, EXPIRED |  | String
| *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. The value can be one of: InOnly, InOut, InOptionalOut |  | 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









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



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *cacheConfiguration* (common) | A Configuration for the Cache |  | Configuration
| *cacheConfigurationProperties* (common) | Properties to configure jcache |  | Map
| *cacheConfigurationProperties Ref* (common) | References to an existing Properties or Map to lookup in the registry to use for configuring jcache. |  | String
| *cachingProvider* (common) | The fully qualified class name of the javax.cache.spi.CachingProvider |  | String
| *configurationUri* (common) | An implementation specific URI for the CacheManager |  | String
| *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
| *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 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.
 If 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 DSL, 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]
----------------------------
<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 http://www.hazelcast.com/schema/config/hazelcast-config-4.0.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.

include::camel-spring-boot::page$jcache-starter.adoc[]
