1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
|
3
|
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
4
|
xsi:noNamespaceSchemaLocation="ehcache.xsd" >
|
5
|
<diskStore path="java.io.tmpdir"/>
|
6
|
|
7
|
<!--
|
8
|
Cache configuration
|
9
|
===================
|
10
|
|
11
|
The following attributes are required.
|
12
|
|
13
|
name:
|
14
|
Sets the name of the cache. This is used to identify the cache. It must be unique.
|
15
|
|
16
|
maxElementsInMemory:
|
17
|
Sets the maximum number of objects that will be created in memory
|
18
|
|
19
|
maxElementsOnDisk:
|
20
|
Sets the maximum number of objects that will be maintained in the DiskStore
|
21
|
The default value is zero, meaning unlimited.
|
22
|
|
23
|
eternal:
|
24
|
Sets whether elements are eternal. If eternal, timeouts are ignored and the
|
25
|
element is never expired.
|
26
|
|
27
|
overflowToDisk:
|
28
|
Sets whether elements can overflow to disk when the memory store
|
29
|
has reached the maxInMemory limit.
|
30
|
|
31
|
The following attributes and elements are optional.
|
32
|
|
33
|
timeToIdleSeconds:
|
34
|
Sets the time to idle for an element before it expires.
|
35
|
i.e. The maximum amount of time between accesses before an element expires
|
36
|
Is only used if the element is not eternal.
|
37
|
Optional attribute. A value of 0 means that an Element can idle for infinity.
|
38
|
The default value is 0.
|
39
|
|
40
|
timeToLiveSeconds:
|
41
|
Sets the time to live for an element before it expires.
|
42
|
i.e. The maximum time between creation time and when an element expires.
|
43
|
Is only used if the element is not eternal.
|
44
|
Optional attribute. A value of 0 means that and Element can live for infinity.
|
45
|
The default value is 0.
|
46
|
|
47
|
diskPersistent:
|
48
|
Whether the disk store persists between restarts of the Virtual Machine.
|
49
|
The default value is false.
|
50
|
|
51
|
diskExpiryThreadIntervalSeconds:
|
52
|
The number of seconds between runs of the disk expiry thread. The default value
|
53
|
is 120 seconds.
|
54
|
|
55
|
diskSpoolBufferSizeMB:
|
56
|
This is the size to allocate the DiskStore for a spool buffer. Writes are made
|
57
|
to this area and then asynchronously written to disk. The default size is 30MB.
|
58
|
Each spool buffer is used only by its cache. If you get OutOfMemory errors consider
|
59
|
lowering this value. To improve DiskStore performance consider increasing it. Trace level
|
60
|
logging in the DiskStore will show if put back ups are occurring.
|
61
|
|
62
|
memoryStoreEvictionPolicy:
|
63
|
Policy would be enforced upon reaching the maxElementsInMemory limit. Default
|
64
|
policy is Least Recently Used (specified as LRU). Other policies available -
|
65
|
First In First Out (specified as FIFO) and Less Frequently Used
|
66
|
(specified as LFU)
|
67
|
|
68
|
Cache elements can also contain sub elements which take the same format of a factory class
|
69
|
and properties. Defined sub-elements are:
|
70
|
|
71
|
* cacheEventListenerFactory - Enables registration of listeners for cache events, such as
|
72
|
put, remove, update, and expire.
|
73
|
|
74
|
* bootstrapCacheLoaderFactory - Specifies a BootstrapCacheLoader, which is called by a
|
75
|
cache on initialisation to prepopulate itself.
|
76
|
|
77
|
* cacheExtensionFactory - Specifies a CacheExtension, a generic mechansim to tie a class
|
78
|
which holds a reference to a cache to the cache lifecycle.
|
79
|
|
80
|
* cacheExceptionHandlerFactory - Specifies a CacheExceptionHandler, which is called when
|
81
|
cache exceptions occur.
|
82
|
|
83
|
* cacheLoaderFactory - Specifies a CacheLoader, which can be used both asynchronously and
|
84
|
synchronously to load objects into a cache. More than one cacheLoaderFactory element
|
85
|
can be added, in which case the loaders form a chain which are executed in order. If a
|
86
|
loader returns null, the next in chain is called.
|
87
|
|
88
|
RMI Cache Replication
|
89
|
+++++++++++++++++++++
|
90
|
|
91
|
Each cache that will be distributed needs to set a cache event listener which replicates
|
92
|
messages to the other CacheManager peers. For the built-in RMI implementation this is done
|
93
|
by adding a cacheEventListenerFactory element of type RMICacheReplicatorFactory to each
|
94
|
distributed cache's configuration as per the following example:
|
95
|
|
96
|
<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
|
97
|
properties="replicateAsynchronously=true,
|
98
|
replicatePuts=true,
|
99
|
replicatePutsViaCopy=false,
|
100
|
replicateUpdates=true,
|
101
|
replicateUpdatesViaCopy=true,
|
102
|
replicateRemovals=true
|
103
|
asynchronousReplicationIntervalMillis=<number of milliseconds"
|
104
|
propertySeparator="," />
|
105
|
|
106
|
The RMICacheReplicatorFactory recognises the following properties:
|
107
|
|
108
|
* replicatePuts=true|false - whether new elements placed in a cache are
|
109
|
replicated to others. Defaults to true.
|
110
|
|
111
|
* replicatePutsViaCopy=true|false - whether the new elements are
|
112
|
copied to other caches (true), or whether a remove message is sent. Defaults to true.
|
113
|
|
114
|
* replicateUpdates=true|false - whether new elements which override an
|
115
|
element already existing with the same key are replicated. Defaults to true.
|
116
|
|
117
|
* replicateRemovals=true - whether element removals are replicated. Defaults to true.
|
118
|
|
119
|
* replicateAsynchronously=true | false - whether replications are
|
120
|
asynchronous (true) or synchronous (false). Defaults to true.
|
121
|
|
122
|
* replicateUpdatesViaCopy=true | false - whether the new elements are
|
123
|
copied to other caches (true), or whether a remove message is sent. Defaults to true.
|
124
|
|
125
|
* asynchronousReplicationIntervalMillis=<number of milliseconds> - The asynchronous
|
126
|
replicator runs at a set interval of milliseconds. The default is 1000. The minimum
|
127
|
is 10. This property is only applicable if replicateAsynchronously=true
|
128
|
|
129
|
|
130
|
JGroups Replication
|
131
|
+++++++++++++++++++
|
132
|
|
133
|
For the Jgroups replication this is done with:
|
134
|
<cacheEventListenerFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
|
135
|
properties="replicateAsynchronously=true, replicatePuts=true,
|
136
|
replicateUpdates=true, replicateUpdatesViaCopy=false,
|
137
|
replicateRemovals=true,asynchronousReplicationIntervalMillis=1000"/>
|
138
|
This listener supports the same properties as the RMICacheReplicationFactory.
|
139
|
|
140
|
|
141
|
JMS Replication
|
142
|
+++++++++++++++
|
143
|
|
144
|
For JMS-based replication this is done with:
|
145
|
<cacheEventListenerFactory
|
146
|
class="net.sf.ehcache.distribution.jms.JMSCacheReplicatorFactory"
|
147
|
properties="replicateAsynchronously=true,
|
148
|
replicatePuts=true,
|
149
|
replicateUpdates=true,
|
150
|
replicateUpdatesViaCopy=true,
|
151
|
replicateRemovals=true,
|
152
|
asynchronousReplicationIntervalMillis=1000"
|
153
|
propertySeparator=","/>
|
154
|
|
155
|
This listener supports the same properties as the RMICacheReplicationFactory.
|
156
|
|
157
|
Cluster Bootstrapping
|
158
|
+++++++++++++++++++++
|
159
|
(RMI clusters only)
|
160
|
|
161
|
The RMIBootstrapCacheLoader bootstraps caches in clusters where RMICacheReplicators are
|
162
|
used. It is configured as per the following example:
|
163
|
|
164
|
<bootstrapCacheLoaderFactory
|
165
|
class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
|
166
|
properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"
|
167
|
propertySeparator="," />
|
168
|
|
169
|
The RMIBootstrapCacheLoaderFactory recognises the following optional properties:
|
170
|
|
171
|
* bootstrapAsynchronously=true|false - whether the bootstrap happens in the background
|
172
|
after the cache has started. If false, bootstrapping must complete before the cache is
|
173
|
made available. The default value is true.
|
174
|
|
175
|
* maximumChunkSizeBytes=<integer> - Caches can potentially be very large, larger than the
|
176
|
memory limits of the VM. This property allows the bootstraper to fetched elements in
|
177
|
chunks. The default chunk size is 5000000 (5MB).
|
178
|
|
179
|
|
180
|
Cache Exception Handling
|
181
|
|
182
|
By default, most cache operations will propagate a runtime CacheException on failure. An
|
183
|
interceptor, using a dynamic proxy, may be configured so that a CacheExceptionHandler can
|
184
|
be configured to intercept Exceptions. Errors are not intercepted.
|
185
|
|
186
|
It is configured as per the following example:
|
187
|
|
188
|
<cacheExceptionHandlerFactory class="com.example.ExampleExceptionHandlerFactory"
|
189
|
properties="logLevel=FINE"/>
|
190
|
|
191
|
Caches with ExceptionHandling configured are not of type Cache, but are of type Ehcache only,
|
192
|
and are not available using CacheManager.getCache(), but using CacheManager.getEhcache().
|
193
|
|
194
|
|
195
|
Cache Loader
|
196
|
|
197
|
A default CacheLoader may be set which loads objects into the cache through asynchronous and
|
198
|
synchronous methods on Cache. This is different to the bootstrap cache loader, which is used
|
199
|
only in distributed caching.
|
200
|
|
201
|
It is configured as per the following example:
|
202
|
|
203
|
<cacheLoaderFactory class="com.example.ExampleCacheLoaderFactory"
|
204
|
properties="type=int,startCounter=10"/>
|
205
|
|
206
|
Cache Extension
|
207
|
|
208
|
CacheExtensions are a general purpose mechanism to allow generic extensions to a Cache.
|
209
|
CacheExtensions are tied into the Cache lifecycle.
|
210
|
|
211
|
CacheExtensions are created using the CacheExtensionFactory which has a
|
212
|
<code>createCacheCacheExtension()</code> method which takes as a parameter a
|
213
|
Cache and properties. It can thus call back into any public method on Cache, including, of
|
214
|
course, the load methods.
|
215
|
|
216
|
Extensions are added as per the following example:
|
217
|
|
218
|
<cacheExtensionFactory class="com.example.FileWatchingCacheRefresherExtensionFactory"
|
219
|
properties="refreshIntervalMillis=18000, loaderTimeout=3000,
|
220
|
flushPeriod=whatever, someOtherProperty=someValue ..."/>
|
221
|
|
222
|
-->
|
223
|
|
224
|
<!--
|
225
|
Mandatory Default Cache configuration. These settings will be applied to caches
|
226
|
created programmtically using CacheManager.add(String cacheName).
|
227
|
|
228
|
The defaultCache has an implicit name "default" which is a reserved cache name.
|
229
|
-->
|
230
|
<defaultCache
|
231
|
maxElementsInMemory="1000"
|
232
|
eternal="false"
|
233
|
timeToIdleSeconds="120"
|
234
|
timeToLiveSeconds="120"
|
235
|
overflowToDisk="false"
|
236
|
diskSpoolBufferSizeMB="30"
|
237
|
maxElementsOnDisk="10000000"
|
238
|
diskPersistent="false"
|
239
|
diskExpiryThreadIntervalSeconds="120"
|
240
|
memoryStoreEvictionPolicy="LRU"
|
241
|
/>
|
242
|
|
243
|
<cache name="doar"
|
244
|
maxElementsInMemory="20000"
|
245
|
eternal="false"
|
246
|
timeToIdleSeconds="0"
|
247
|
memoryStoreEvictionPolicy="LRU"/>
|
248
|
|
249
|
</ehcache>
|