diff --git a/pom.xml b/pom.xml
index 06741b463b614a07ff060164133dceab6eadd04f..fb363d3136e047017a1b44491ad9d8a5d560c14c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,10 +59,6 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context-support</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>org.apache.tomcat.embed</groupId>
@@ -74,18 +70,6 @@
             <artifactId>jstl</artifactId>
         </dependency>
 
-
-        <!-- used for EhCacheCacheManager -->
-        <dependency>
-            <groupId>org.aspectj</groupId>
-            <artifactId>aspectjrt</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.aspectj</groupId>
-            <artifactId>aspectjweaver</artifactId>
-            <scope>runtime</scope>
-        </dependency>
-
         <!-- Date and Time -->
         <dependency>
             <groupId>joda-time</groupId>
@@ -123,14 +107,12 @@
 
         <!-- EhCache -->
         <dependency>
-            <groupId>net.sf.ehcache</groupId>
+            <groupId>javax.cache</groupId>
+            <artifactId>cache-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.ehcache</groupId>
             <artifactId>ehcache</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>commons-logging</groupId>
-                    <artifactId>commons-logging</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
 
         <!-- Dandelion -->
diff --git a/src/main/java/org/springframework/samples/petclinic/config/CacheConfig.java b/src/main/java/org/springframework/samples/petclinic/config/CacheConfig.java
index fc4a0bcc15499696f24b2f4990a9d6a2062e068a..4e1a6a0b0620a181ed1ec97709ebab87b8dfc81c 100644
--- a/src/main/java/org/springframework/samples/petclinic/config/CacheConfig.java
+++ b/src/main/java/org/springframework/samples/petclinic/config/CacheConfig.java
@@ -1,6 +1,19 @@
 package org.springframework.samples.petclinic.config;
 
+import java.util.concurrent.TimeUnit;
+import javax.cache.CacheManager;
+
+import org.ehcache.config.CacheConfiguration;
+import org.ehcache.config.builders.CacheConfigurationBuilder;
+import org.ehcache.config.builders.ResourcePoolsBuilder;
+import org.ehcache.config.units.EntryUnit;
+import org.ehcache.expiry.Duration;
+import org.ehcache.expiry.Expirations;
+import org.ehcache.jsr107.Eh107Configuration;
+
+import org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer;
 import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Profile;
 
@@ -11,4 +24,21 @@ import org.springframework.context.annotation.Profile;
 @EnableCaching
 @Profile("production")
 public class CacheConfig {
+
+    @Bean
+    public JCacheManagerCustomizer cacheManagerCustomizer() {
+        return new JCacheManagerCustomizer() {
+            @Override
+            public void customize(CacheManager cacheManager) {
+                CacheConfiguration<Object, Object> config = CacheConfigurationBuilder
+                    .newCacheConfigurationBuilder(Object.class, Object.class,
+                        ResourcePoolsBuilder.newResourcePoolsBuilder()
+                            .heap(100, EntryUnit.ENTRIES))
+                    .withExpiry(Expirations.timeToLiveExpiration(Duration.of(60, TimeUnit.SECONDS)))
+                    .build();
+                cacheManager.createCache("vets", Eh107Configuration.fromEhcacheCacheConfiguration(config));
+            }
+        };
+    }
+
 }
diff --git a/src/main/resources/ehcache.xml b/src/main/resources/ehcache.xml
deleted file mode 100644
index 32e509953fb574c4d8d553f990121c766ac8a470..0000000000000000000000000000000000000000
--- a/src/main/resources/ehcache.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="ehcache.xsd"
-         updateCheck="false">
-    <diskStore path="java.io.tmpdir"/>
-
-    <!-- objects are evicted from the cache every 60 seconds -->
-    <cache name="vets"
-           timeToLiveSeconds="60"
-           maxElementsInMemory="100"
-           eternal="false"
-           overflowToDisk="false"
-           maxElementsOnDisk="10000000"
-           diskPersistent="false"
-           diskExpiryThreadIntervalSeconds="1"
-           memoryStoreEvictionPolicy="LRU"/>
-
-</ehcache>
diff --git a/src/main/resources/ehcache.xsd b/src/main/resources/ehcache.xsd
deleted file mode 100644
index bfc19ddb1e7d3c2f437ad36c129b5520f6c46f87..0000000000000000000000000000000000000000
--- a/src/main/resources/ehcache.xsd
+++ /dev/null
@@ -1,419 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="1.7">
-
-    <xs:element name="ehcache">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element maxOccurs="1" minOccurs="0" ref="managementRESTService"/>
-                <xs:element maxOccurs="1" minOccurs="0" ref="diskStore"/>
-                <xs:element maxOccurs="1" minOccurs="0" ref="sizeOfPolicy"/>
-                <xs:element maxOccurs="1" minOccurs="0" ref="transactionManagerLookup"/>
-                <xs:element maxOccurs="1" minOccurs="0" ref="cacheManagerEventListenerFactory"/>
-                <xs:element maxOccurs="unbounded" minOccurs="0" ref="cacheManagerPeerProviderFactory"/>
-                <xs:element maxOccurs="unbounded" minOccurs="0" ref="cacheManagerPeerListenerFactory"/>
-                <xs:element maxOccurs="1" minOccurs="0" ref="terracottaConfig"/>
-                <xs:element maxOccurs="1" minOccurs="0" ref="defaultCache"/>
-                <xs:element maxOccurs="unbounded" minOccurs="0" ref="cache"/>
-            </xs:sequence>
-            <xs:attribute name="name" use="optional"/>
-            <xs:attribute default="true" name="updateCheck" type="xs:boolean" use="optional"/>
-            <xs:attribute default="autodetect" name="monitoring" type="monitoringType" use="optional"/>
-            <xs:attribute default="true" name="dynamicConfig" type="xs:boolean" use="optional"/>
-            <xs:attribute default="15" name="defaultTransactionTimeoutInSeconds" type="xs:integer" use="optional"/>
-            <xs:attribute default="0" name="maxBytesLocalHeap" type="memoryUnitOrPercentage" use="optional"/>
-            <xs:attribute default="0" name="maxBytesLocalOffHeap" type="memoryUnit" use="optional"/>
-            <xs:attribute default="0" name="maxBytesLocalDisk" type="memoryUnit" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="managementRESTService">
-        <xs:complexType>
-            <xs:attribute name="enabled" type="xs:boolean" use="optional"/>
-            <xs:attribute name="bind" use="optional"/>
-            <xs:attribute name="securityServiceLocation" use="optional"/>
-            <xs:attribute name="securityServiceTimeout" use="optional" type="xs:integer"/>
-            <xs:attribute name="sslEnabled" use="optional" type="xs:boolean"/>
-            <xs:attribute name="needClientAuth" use="optional" type="xs:boolean"/>
-            <xs:attribute name="sampleHistorySize" use="optional" type="xs:integer"/>
-            <xs:attribute name="sampleIntervalSeconds" use="optional" type="xs:integer"/>
-            <xs:attribute name="sampleSearchIntervalSeconds" use="optional" type="xs:integer"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="diskStore">
-        <xs:complexType>
-            <xs:attribute name="path" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="transactionManagerLookup">
-        <xs:complexType>
-            <xs:attribute name="class" use="required"/>
-            <xs:attribute name="properties" use="optional"/>
-            <xs:attribute name="propertySeparator" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="cacheManagerEventListenerFactory">
-        <xs:complexType>
-            <xs:attribute name="class" use="required"/>
-            <xs:attribute name="properties" use="optional"/>
-            <xs:attribute name="propertySeparator" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="cacheManagerPeerProviderFactory">
-        <xs:complexType>
-            <xs:attribute name="class" use="required"/>
-            <xs:attribute name="properties" use="optional"/>
-            <xs:attribute name="propertySeparator" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="cacheManagerPeerListenerFactory">
-        <xs:complexType>
-            <xs:attribute name="class" use="required"/>
-            <xs:attribute name="properties" use="optional"/>
-            <xs:attribute name="propertySeparator" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="terracottaConfig">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element maxOccurs="1" minOccurs="0" name="tc-config">
-                    <xs:complexType>
-                        <xs:sequence>
-                            <xs:any maxOccurs="unbounded" minOccurs="0" processContents="skip"/>
-                        </xs:sequence>
-                    </xs:complexType>
-                </xs:element>
-            </xs:sequence>
-            <xs:attribute default="localhost:9510" name="url" use="optional"/>
-            <xs:attribute name="rejoin" type="xs:boolean" use="optional" default="false"/>
-        </xs:complexType>
-    </xs:element>
-    <!-- add clone support for addition of cacheExceptionHandler. Important! -->
-    <xs:element name="defaultCache">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheEventListenerFactory"/>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheExtensionFactory"/>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheLoaderFactory"/>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheDecoratorFactory"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="bootstrapCacheLoaderFactory"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="cacheExceptionHandlerFactory"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="pinning"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="terracotta"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="cacheWriter"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="copyStrategy"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="elementValueComparator"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="sizeOfPolicy"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="persistence"/>
-            </xs:sequence>
-            <xs:attribute name="diskExpiryThreadIntervalSeconds" type="xs:integer" use="optional"/>
-            <xs:attribute name="diskSpoolBufferSizeMB" type="xs:integer" use="optional"/>
-            <xs:attribute name="diskPersistent" type="xs:boolean" use="optional"/>
-            <xs:attribute name="diskAccessStripes" type="xs:integer" use="optional" default="1"/>
-            <xs:attribute name="eternal" type="xs:boolean" use="optional" default="false"/>
-            <xs:attribute name="maxElementsInMemory" type="xs:integer" use="optional"/>
-            <xs:attribute name="maxEntriesLocalHeap" type="xs:integer" use="optional"/>
-            <xs:attribute name="clearOnFlush" type="xs:boolean" use="optional"/>
-            <xs:attribute name="memoryStoreEvictionPolicy" type="xs:string" use="optional"/>
-            <xs:attribute name="overflowToDisk" type="xs:boolean" use="optional"/>
-            <xs:attribute name="timeToIdleSeconds" type="xs:integer" use="optional"/>
-            <xs:attribute name="timeToLiveSeconds" type="xs:integer" use="optional"/>
-            <xs:attribute name="maxElementsOnDisk" type="xs:integer" use="optional"/>
-            <xs:attribute name="maxEntriesLocalDisk" type="xs:integer" use="optional"/>
-            <xs:attribute name="transactionalMode" type="transactionalMode" use="optional" default="off"/>
-            <xs:attribute name="statistics" type="xs:boolean" use="optional" default="false"/>
-            <xs:attribute name="copyOnRead" type="xs:boolean" use="optional" default="false"/>
-            <xs:attribute name="copyOnWrite" type="xs:boolean" use="optional" default="false"/>
-            <xs:attribute name="cacheLoaderTimeoutMillis" type="xs:integer" use="optional" default="0"/>
-            <xs:attribute name="overflowToOffHeap" type="xs:boolean" use="optional" default="false"/>
-            <xs:attribute name="maxMemoryOffHeap" type="xs:string" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="cache">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheEventListenerFactory"/>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheExtensionFactory"/>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheLoaderFactory"/>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="cacheDecoratorFactory"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="bootstrapCacheLoaderFactory"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="cacheExceptionHandlerFactory"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="pinning"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="terracotta"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="cacheWriter"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="copyStrategy"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="searchable"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="elementValueComparator"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="sizeOfPolicy"/>
-                <xs:element minOccurs="0" maxOccurs="1" ref="persistence"/>
-            </xs:sequence>
-            <xs:attribute name="diskExpiryThreadIntervalSeconds" type="xs:integer" use="optional"/>
-            <xs:attribute name="diskSpoolBufferSizeMB" type="xs:integer" use="optional"/>
-            <xs:attribute name="diskPersistent" type="xs:boolean" use="optional"/>
-            <xs:attribute name="diskAccessStripes" type="xs:integer" use="optional" default="1"/>
-            <xs:attribute name="eternal" type="xs:boolean" use="optional" default="false"/>
-            <xs:attribute name="maxElementsInMemory" type="xs:integer" use="optional"/>
-            <xs:attribute name="maxEntriesLocalHeap" type="xs:integer" use="optional"/>
-            <xs:attribute name="memoryStoreEvictionPolicy" type="xs:string" use="optional"/>
-            <xs:attribute name="clearOnFlush" type="xs:boolean" use="optional"/>
-            <xs:attribute name="name" type="xs:string" use="required"/>
-            <xs:attribute name="overflowToDisk" type="xs:boolean" use="optional"/>
-            <xs:attribute name="timeToIdleSeconds" type="xs:integer" use="optional"/>
-            <xs:attribute name="timeToLiveSeconds" type="xs:integer" use="optional"/>
-            <xs:attribute name="maxElementsOnDisk" type="xs:integer" use="optional"/>
-            <xs:attribute name="maxEntriesLocalDisk" type="xs:integer" use="optional"/>
-            <xs:attribute name="transactionalMode" type="transactionalMode" use="optional" default="off"/>
-            <xs:attribute name="statistics" type="xs:boolean" use="optional" default="false"/>
-            <xs:attribute name="copyOnRead" type="xs:boolean" use="optional" default="false"/>
-            <xs:attribute name="copyOnWrite" type="xs:boolean" use="optional" default="false"/>
-            <xs:attribute name="logging" type="xs:boolean" use="optional" default="false"/>
-            <xs:attribute name="cacheLoaderTimeoutMillis" type="xs:integer" use="optional" default="0"/>
-            <xs:attribute name="overflowToOffHeap" type="xs:boolean" use="optional" default="false"/>
-            <xs:attribute name="maxMemoryOffHeap" type="xs:string" use="optional"/>
-            <xs:attribute default="0" name="maxBytesLocalHeap" type="memoryUnitOrPercentage" use="optional"/>
-            <xs:attribute default="0" name="maxBytesLocalOffHeap" type="memoryUnitOrPercentage" use="optional"/>
-            <xs:attribute default="0" name="maxBytesLocalDisk" type="memoryUnitOrPercentage" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="cacheEventListenerFactory">
-        <xs:complexType>
-            <xs:attribute name="class" use="required"/>
-            <xs:attribute name="properties" use="optional"/>
-            <xs:attribute name="propertySeparator" use="optional"/>
-            <xs:attribute name="listenFor" use="optional" type="notificationScope" default="all"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="bootstrapCacheLoaderFactory">
-        <xs:complexType>
-            <xs:attribute name="class" use="required"/>
-            <xs:attribute name="properties" use="optional"/>
-            <xs:attribute name="propertySeparator" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="cacheExtensionFactory">
-        <xs:complexType>
-            <xs:attribute name="class" use="required"/>
-            <xs:attribute name="properties" use="optional"/>
-            <xs:attribute name="propertySeparator" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="cacheExceptionHandlerFactory">
-        <xs:complexType>
-            <xs:attribute name="class" use="required"/>
-            <xs:attribute name="properties" use="optional"/>
-            <xs:attribute name="propertySeparator" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="cacheLoaderFactory">
-        <xs:complexType>
-            <xs:attribute name="class" use="required"/>
-            <xs:attribute name="properties" use="optional"/>
-            <xs:attribute name="propertySeparator" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="cacheDecoratorFactory">
-        <xs:complexType>
-            <xs:attribute name="class" use="required"/>
-            <xs:attribute name="properties" use="optional"/>
-            <xs:attribute name="propertySeparator" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="searchAttribute">
-        <xs:complexType>
-            <xs:attribute name="name" use="required" type="xs:string"/>
-            <xs:attribute name="expression" type="xs:string"/>
-            <xs:attribute name="class" type="xs:string"/>
-            <xs:attribute name="properties" use="optional"/>
-            <xs:attribute name="propertySeparator" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-
-    <xs:element name="searchable">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="searchAttribute"/>
-            </xs:sequence>
-            <xs:attribute name="keys" use="optional" type="xs:boolean" default="true"/>
-            <xs:attribute name="values" use="optional" type="xs:boolean" default="true"/>
-        </xs:complexType>
-    </xs:element>
-
-    <xs:element name="pinning">
-        <xs:complexType>
-            <xs:attribute name="store" use="required" type="pinningStoreType"/>
-        </xs:complexType>
-    </xs:element>
-
-    <xs:element name="terracotta">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element minOccurs="0" maxOccurs="1" ref="nonstop"/>
-            </xs:sequence>
-            <xs:attribute name="clustered" use="optional" type="xs:boolean" default="true"/>
-            <xs:attribute name="valueMode" use="optional" type="terracottaCacheValueType" default="serialization"/>
-            <xs:attribute name="coherentReads" use="optional" type="xs:boolean" default="true"/>
-            <xs:attribute name="localKeyCache" use="optional" type="xs:boolean" default="false"/>
-            <xs:attribute name="localKeyCacheSize" use="optional" type="xs:positiveInteger" default="300000"/>
-            <xs:attribute name="orphanEviction" use="optional" type="xs:boolean" default="true"/>
-            <xs:attribute name="orphanEvictionPeriod" use="optional" type="xs:positiveInteger" default="4"/>
-            <xs:attribute name="copyOnRead" use="optional" type="xs:boolean" default="false"/>
-            <xs:attribute name="coherent" use="optional" type="xs:boolean" default="false"/>
-            <xs:attribute name="consistency" use="optional" type="consistencyType" default="eventual"/>
-            <xs:attribute name="synchronousWrites" use="optional" type="xs:boolean" default="false"/>
-            <xs:attribute name="concurrency" use="optional" type="xs:nonNegativeInteger" default="0"/>
-            <xs:attribute name="localCacheEnabled" use="optional" type="xs:boolean" default="true"/>
-            <xs:attribute name="compressionEnabled" use="optional" type="xs:boolean" default="false"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:simpleType name="consistencyType">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="strong"/>
-            <xs:enumeration value="eventual"/>
-        </xs:restriction>
-    </xs:simpleType>
-    <xs:element name="nonstop">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element minOccurs="0" maxOccurs="1" ref="timeoutBehavior"/>
-            </xs:sequence>
-            <xs:attribute name="enabled" use="optional" type="xs:boolean" default="true"/>
-            <xs:attribute name="immediateTimeout" use="optional" type="xs:boolean" default="false"/>
-            <xs:attribute name="timeoutMillis" use="optional" type="xs:positiveInteger" default="30000"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:element name="timeoutBehavior">
-        <xs:complexType>
-            <xs:attribute name="type" use="optional" type="timeoutBehaviorType" default="exception"/>
-            <xs:attribute name="properties" use="optional" default=""/>
-            <xs:attribute name="propertySeparator" use="optional" default=","/>
-        </xs:complexType>
-    </xs:element>
-    <xs:simpleType name="timeoutBehaviorType">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="noop"/>
-            <xs:enumeration value="exception"/>
-            <xs:enumeration value="localReads"/>
-        </xs:restriction>
-    </xs:simpleType>
-    <xs:simpleType name="monitoringType">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="autodetect"/>
-            <xs:enumeration value="on"/>
-            <xs:enumeration value="off"/>
-        </xs:restriction>
-    </xs:simpleType>
-    <xs:simpleType name="pinningStoreType">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="localHeap"/>
-            <xs:enumeration value="localMemory"/>
-            <xs:enumeration value="inCache"/>
-        </xs:restriction>
-    </xs:simpleType>
-    <xs:simpleType name="terracottaCacheValueType">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="serialization"/>
-            <xs:enumeration value="identity"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:simpleType name="transactionalMode">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="off"/>
-            <xs:enumeration value="xa_strict"/>
-            <xs:enumeration value="xa"/>
-            <xs:enumeration value="local"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:element name="cacheWriter">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element minOccurs="0" maxOccurs="1" ref="cacheWriterFactory"/>
-            </xs:sequence>
-            <xs:attribute name="writeMode" use="optional" type="writeModeType" default="write-through"/>
-            <xs:attribute name="notifyListenersOnException" use="optional" type="xs:boolean" default="false"/>
-            <xs:attribute name="minWriteDelay" use="optional" type="xs:nonNegativeInteger" default="1"/>
-            <xs:attribute name="maxWriteDelay" use="optional" type="xs:nonNegativeInteger" default="1"/>
-            <xs:attribute name="rateLimitPerSecond" use="optional" type="xs:nonNegativeInteger" default="0"/>
-            <xs:attribute name="writeCoalescing" use="optional" type="xs:boolean" default="false"/>
-            <xs:attribute name="writeBatching" use="optional" type="xs:boolean" default="false"/>
-            <xs:attribute name="writeBatchSize" use="optional" type="xs:positiveInteger" default="1"/>
-            <xs:attribute name="retryAttempts" use="optional" type="xs:nonNegativeInteger" default="0"/>
-            <xs:attribute name="retryAttemptDelaySeconds" use="optional" type="xs:nonNegativeInteger" default="1"/>
-            <xs:attribute name="writeBehindConcurrency" use="optional" type="xs:nonNegativeInteger" default="1"/>
-            <xs:attribute name="writeBehindMaxQueueSize" use="optional" type="xs:nonNegativeInteger" default="0"/>
-        </xs:complexType>
-    </xs:element>
-    <xs:simpleType name="writeModeType">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="write-through"/>
-            <xs:enumeration value="write-behind"/>
-        </xs:restriction>
-    </xs:simpleType>
-    <xs:element name="cacheWriterFactory">
-        <xs:complexType>
-            <xs:attribute name="class" use="required"/>
-            <xs:attribute name="properties" use="optional"/>
-            <xs:attribute name="propertySeparator" use="optional"/>
-        </xs:complexType>
-    </xs:element>
-
-    <xs:element name="copyStrategy">
-        <xs:complexType>
-            <xs:attribute name="class" use="required" type="xs:string"/>
-        </xs:complexType>
-    </xs:element>
-
-    <xs:element name="elementValueComparator">
-        <xs:complexType>
-            <xs:attribute name="class" use="required" type="xs:string"/>
-        </xs:complexType>
-    </xs:element>
-
-    <xs:element name="sizeOfPolicy">
-        <xs:complexType>
-            <xs:attribute name="maxDepth" use="required" type="xs:integer"/>
-            <xs:attribute name="maxDepthExceededBehavior" use="optional" default="continue"
-                          type="maxDepthExceededBehavior"/>
-        </xs:complexType>
-    </xs:element>
-
-    <xs:element name="persistence">
-        <xs:complexType>
-            <xs:attribute name="strategy" use="required" type="persistenceStrategy"/>
-            <xs:attribute name="synchronousWrites" use="optional" default="false" type="xs:boolean"/>
-        </xs:complexType>
-    </xs:element>
-
-    <xs:simpleType name="persistenceStrategy">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="localTempSwap"/>
-            <xs:enumeration value="localRestartable"/>
-            <xs:enumeration value="none"/>
-            <xs:enumeration value="distributed"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:simpleType name="maxDepthExceededBehavior">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="continue"/>
-            <xs:enumeration value="abort"/>
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:simpleType name="notificationScope">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="local"/>
-            <xs:enumeration value="remote"/>
-            <xs:enumeration value="all"/>
-        </xs:restriction>
-    </xs:simpleType>
-    <xs:simpleType name="memoryUnit">
-        <xs:restriction base="xs:token">
-            <xs:pattern value="[0-9]+[bBkKmMgG]?"/>
-        </xs:restriction>
-    </xs:simpleType>
-    <xs:simpleType name="memoryUnitOrPercentage">
-        <xs:restriction base="xs:token">
-            <xs:pattern value="([0-9]+[bBkKmMgG]?|100%|[0-9]{1,2}%)"/>
-        </xs:restriction>
-    </xs:simpleType>
-</xs:schema>
\ No newline at end of file