///////////////////////////////////////////////////////////////
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
///////////////////////////////////////////////////////////////

[[extension-cache-ehcache, Ehcache Cache]]
= Ehcache Cache =

[devstatus]
--------------
source=extensions/cache-ehcache/dev-status.xml
--------------

EntityStore cache backed by http://ehcache.org/[EhCache].


include::../../build/docs/buildinfo/artifact.txt[]

Not all EntityStore implementations use the Cache extension, so check the implementation details of the
EntityStore whether the cache extension can bring any benefits or not.


== Assembly ==

Assembly is done using the provided Assembler:

[snippet,java]
----
source=extensions/cache-ehcache/src/test/java/org/apache/zest/cache/ehcache/EhCacheTest.java
tag=assembly
----


== Configuration ==

Here are the configuration properties for the EhCache EntityStore Cache:

[snippet,java]
----
source=extensions/cache-ehcache/src/main/java/org/apache/zest/cache/ehcache/EhCacheConfiguration.java
tag=config
----
