| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| 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. |
| --> |
| |
| <!-- |
| CacheManager Configuration |
| ========================== |
| An ehcache-marmotta.xml corresponds to a single CacheManager. |
| |
| See instructions below or the ehcache schema (ehcache.xsd) on how to configure. |
| |
| System property tokens can be specified in this file which are replaced when the configuration |
| is loaded. For example multicastGroupPort=${multicastGroupPort} can be replaced with the |
| System property either from an environment variable or a system property specified with a |
| command line switch such as -DmulticastGroupPort=4446. |
| |
| The attributes of <ehcache> are: |
| * name - an optional name for the CacheManager. The name is optional and primarily used |
| for documentation or to distinguish Terracotta clustered cache state. With Terracotta |
| clustered caches, a combination of CacheManager name and cache name uniquely identify a |
| particular cache store in the Terracotta clustered memory. |
| * updateCheck - an optional boolean flag specifying whether this CacheManager should check |
| for new versions of Ehcache over the Internet. If not specified, updateCheck="true". |
| * monitoring - an optional setting that determines whether the CacheManager should |
| automatically register the SampledCacheMBean with the system MBean server. Currently, |
| this monitoring is only useful when using Terracotta and thus the "autodetect" value |
| will detect the presence of Terracotta and register the MBean. Other allowed values |
| are "on" and "off". The default is "autodetect". |
| --> |
| <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd"> |
| |
| <!-- |
| DiskStore configuration |
| ======================= |
| |
| The diskStore element is optional. To turn off disk store path creation, comment out the diskStore |
| element below. |
| |
| Configure it if you have overflowToDisk or diskPersistent enabled for any cache. |
| |
| If it is not configured, and a cache is created which requires a disk store, a warning will be |
| issued and java.io.tmpdir will automatically be used. |
| |
| diskStore has only one attribute - "path". It is the path to the directory where |
| .data and .index files will be created. |
| |
| If the path is one of the following Java System Property it is replaced by its value in the |
| running VM. For backward compatibility these are not specified without being enclosed in the ${token} |
| replacement syntax. |
| |
| The following properties are translated: |
| * user.home - KiWiUser's home directory |
| * user.dir - KiWiUser's current working directory |
| * java.io.tmpdir - Default temp file path |
| * ehcache.disk.store.dir - A system property you would normally specify on the command line |
| e.g. java -Dehcache.disk.store.dir=/u01/myapp/diskdir ... |
| |
| Subdirectories can be specified below the property e.g. java.io.tmpdir/one |
| |
| --> |
| <diskStore path="java.io.tmpdir"/> |
| |
| <!-- |
| Cachemanagereventlistener |
| ========================= |
| Specifies a CacheManagerEventListenerFactory which is notified when Caches are added |
| or removed from the CacheManager. |
| |
| The attributes of CacheManagerEventListenerFactory are: |
| * class - a fully qualified factory class name |
| * properties - comma separated properties having meaning only to the factory. |
| |
| Sets the fully qualified class name to be registered as the CacheManager event listener. |
| |
| The events include: |
| * adding a Cache |
| * removing a Cache |
| |
| Callbacks to listener methods are synchronous and unsynchronized. It is the responsibility |
| of the implementer to safely handle the potential performance and thread safety issues |
| depending on what their listener is doing. |
| |
| If no class is specified, no listener is created. There is no default. |
| --> |
| <cacheManagerEventListenerFactory class="" properties=""/> |
| |
| |
| <!-- |
| CacheManagerPeerProvider |
| ======================== |
| (For distributed operation) |
| |
| Specifies a CacheManagerPeerProviderFactory which will be used to create a |
| CacheManagerPeerProvider, which discovers other CacheManagers in the cluster. |
| |
| One or more providers can be configured. The first one in the ehcache-marmotta.xml is the default, which is used |
| for replication and bootstrapping. |
| |
| The attributes of cacheManagerPeerProviderFactory are: |
| * class - a fully qualified factory class name |
| * properties - comma separated properties having meaning only to the factory. |
| |
| Providers are available for RMI, JGroups and JMS as shown following. |
| |
| RMICacheManagerPeerProvider |
| +++++++++++++++++++++++++++ |
| |
| Ehcache comes with a built-in RMI-based distribution system with two means of discovery of |
| CacheManager peers participating in the cluster: |
| * automatic, using a multicast group. This one automatically discovers peers and detects |
| changes such as peers entering and leaving the group |
| * manual, using manual rmiURL configuration. A hardcoded list of peers is provided at |
| configuration time. |
| |
| Configuring Automatic Discovery: |
| Automatic discovery is configured as per the following example: |
| <cacheManagerPeerProviderFactory |
| class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" |
| properties="hostName=fully_qualified_hostname_or_ip, |
| peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, |
| multicastGroupPort=4446, timeToLive=32"/> |
| |
| Valid properties are: |
| * peerDiscovery (mandatory) - specify "automatic" |
| * multicastGroupAddress (mandatory) - specify a valid multicast group address |
| * multicastGroupPort (mandatory) - specify a dedicated port for the multicast heartbeat |
| traffic |
| * timeToLive - specify a value between 0 and 255 which determines how far the packets will |
| propagate. |
| |
| By convention, the restrictions are: |
| 0 - the same host |
| 1 - the same subnet |
| 32 - the same site |
| 64 - the same region |
| 128 - the same continent |
| 255 - unrestricted |
| |
| * hostName - the hostname or IP of the interface to be used for sending and receiving multicast packets |
| (relevant to mulithomed hosts only) |
| |
| Configuring Manual Discovery: |
| Manual discovery requires a unique configuration per host. It is contains a list of rmiURLs for the peers, other |
| than itself. So, if we have server1, server2 and server3 the configuration will be: |
| |
| In server1's configuration: |
| <cacheManagerPeerProviderFactory class= |
| "net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" |
| properties="peerDiscovery=manual, |
| rmiUrls=//server2:40000/sampleCache1|//server3:40000/sampleCache1 |
| | //server2:40000/sampleCache2|//server3:40000/sampleCache2" |
| propertySeparator="," /> |
| |
| In server2's configuration: |
| <cacheManagerPeerProviderFactory class= |
| "net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" |
| properties="peerDiscovery=manual, |
| rmiUrls=//server1:40000/sampleCache1|//server3:40000/sampleCache1 |
| | //server1:40000/sampleCache2|//server3:40000/sampleCache2" |
| propertySeparator="," /> |
| |
| In server3's configuration: |
| <cacheManagerPeerProviderFactory class= |
| "net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" |
| properties="peerDiscovery=manual, |
| rmiUrls=//server1:40000/sampleCache1|//server2:40000/sampleCache1 |
| | //server1:40000/sampleCache2|//server2:40000/sampleCache2" |
| propertySeparator="," /> |
| |
| |
| Valid properties are: |
| * peerDiscovery (mandatory) - specify "manual" |
| * rmiUrls (mandatory) - specify a pipe separated list of rmiUrls, in the form |
| //hostname:port |
| * hostname (optional) - the hostname is the hostname of the remote CacheManager peer. The port is the listening |
| port of the RMICacheManagerPeerListener of the remote CacheManager peer. |
| |
| JGroupsCacheManagerPeerProvider |
| +++++++++++++++++++++++++++++++ |
| <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory" |
| properties="connect=UDP(mcast_addr=231.12.21.132;mcast_port=45566;ip_ttl=32; |
| mcast_send_buf_size=150000;mcast_recv_buf_size=80000): |
| PING(timeout=2000;num_initial_members=6): |
| MERGE2(min_interval=5000;max_interval=10000): |
| FD_SOCK:VERIFY_SUSPECT(timeout=1500): |
| pbcast.NAKACK(gc_lag=10;retransmit_timeout=3000): |
| UNICAST(timeout=5000): |
| pbcast.STABLE(desired_avg_gossip=20000): |
| FRAG: |
| pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;print_local_addr=false)" |
| propertySeparator="::" |
| /> |
| The only property necessary is the connect String used by jgroups to configure itself. Refer to the Jgroups documentation for explanation |
| of all the protocols. The example above uses UDP multicast. If the connect property is not specified the default JGroups connection will be |
| used. |
| |
| |
| JMSCacheManagerPeerProviderFactory |
| ++++++++++++++++++++++++++++++++++ |
| <cacheManagerPeerProviderFactory |
| class="net.sf.ehcache.distribution.jms.JMSCacheManagerPeerProviderFactory" |
| properties="..." |
| propertySeparator="," |
| /> |
| |
| The JMS PeerProviderFactory uses JNDI to maintain message queue independence. Refer to the manual for full configuration |
| examples using ActiveMQ and Open Message Queue. |
| |
| Valid properties are: |
| * initialContextFactoryName (mandatory) - the name of the factory used to create the message queue initial context. |
| * providerURL (mandatory) - the JNDI configuration information for the service provider to use. |
| * topicConnectionFactoryBindingName (mandatory) - the JNDI binding name for the TopicConnectionFactory |
| * topicBindingName (mandatory) - the JNDI binding name for the topic name |
| * getQueueBindingName (mandatory only if using jmsCacheLoader) - the JNDI binding name for the queue name |
| * securityPrincipalName - the JNDI java.naming.security.principal |
| * securityCredentials - the JNDI java.naming.security.credentials |
| * urlPkgPrefixes - the JNDI java.naming.factory.url.pkgs |
| * userName - the user name to use when creating the TopicConnection to the Message Queue |
| * password - the password to use when creating the TopicConnection to the Message Queue |
| * acknowledgementMode - the JMS Acknowledgement mode for both publisher and subscriber. The available choices are |
| AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE and SESSION_TRANSACTED. The default is AUTO_ACKNOWLEDGE. |
| --> |
| <!-- <cacheManagerPeerProviderFactory--> |
| <!-- class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"--> |
| <!-- properties="peerDiscovery=automatic,--> |
| <!-- multicastGroupAddress=230.0.0.1,--> |
| <!-- multicastGroupPort=4446, timeToLive=1"--> |
| <!-- propertySeparator=","--> |
| <!-- />--> |
| |
| |
| <!-- |
| CacheManagerPeerListener |
| ======================== |
| (Enable for distributed operation) |
| |
| Specifies a CacheManagerPeerListenerFactory which will be used to create a |
| CacheManagerPeerListener, which listens for messages from cache replicators participating in the cluster. |
| |
| The attributes of cacheManagerPeerListenerFactory are: |
| class - a fully qualified factory class name |
| properties - comma separated properties having meaning only to the factory. |
| |
| Ehcache comes with a built-in RMI-based distribution system. The listener component is |
| RMICacheManagerPeerListener which is configured using |
| RMICacheManagerPeerListenerFactory. It is configured as per the following example: |
| |
| <cacheManagerPeerListenerFactory |
| class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" |
| properties="hostName=fully_qualified_hostname_or_ip, |
| port=40001, |
| remoteObjectPort=40002, |
| socketTimeoutMillis=120000" |
| propertySeparator="," /> |
| |
| All properties are optional. They are: |
| * hostName - the hostName of the host the listener is running on. Specify |
| where the host is multihomed and you want to control the interface over which cluster |
| messages are received. Defaults to the host name of the default interface if not |
| specified. |
| * port - the port the RMI Registry listener listens on. This defaults to a free port if not specified. |
| * remoteObjectPort - the port number on which the remote objects bound in the registry receive calls. |
| This defaults to a free port if not specified. |
| * socketTimeoutMillis - the number of ms client sockets will stay open when sending |
| messages to the listener. This should be long enough for the slowest message. |
| If not specified it defaults to 120000ms. |
| |
| --> |
| <!-- <cacheManagerPeerListenerFactory--> |
| <!-- class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>--> |
| |
| <!-- Cache configuration. |
| |
| The following attributes are required. |
| |
| name: |
| Sets the name of the cache. This is used to identify the cache. It must be unique. |
| |
| maxElementsInMemory: |
| Sets the maximum number of objects that will be created in memory |
| |
| maxElementsOnDisk: |
| Sets the maximum number of objects that will be maintained in the DiskStore |
| The default value is zero, meaning unlimited. |
| |
| eternal: |
| Sets whether elements are eternal. If eternal, timeouts are ignored and the |
| element is never expired. |
| |
| overflowToDisk: |
| Sets whether elements can overflow to disk when the memory store |
| has reached the maxInMemory limit. |
| |
| The following attributes are optional. |
| |
| timeToIdleSeconds: |
| Sets the time to idle for an element before it expires. |
| i.e. The maximum amount of time between accesses before an element expires |
| Is only used if the element is not eternal. |
| Optional attribute. A value of 0 means that an Element can idle for infinity. |
| The default value is 0. |
| |
| timeToLiveSeconds: |
| Sets the time to live for an element before it expires. |
| i.e. The maximum time between creation time and when an element expires. |
| Is only used if the element is not eternal. |
| Optional attribute. A value of 0 means that and Element can live for infinity. |
| The default value is 0. |
| |
| diskPersistent: |
| Whether the disk store persists between restarts of the Virtual Machine. |
| The default value is false. |
| |
| diskExpiryThreadIntervalSeconds: |
| The number of seconds between runs of the disk expiry thread. The default value |
| is 120 seconds. |
| |
| memoryStoreEvictionPolicy: |
| Policy would be enforced upon reaching the maxElementsInMemory limit. Default |
| policy is Least Recently Used (specified as LRU). Other policies available - |
| First In First Out (specified as FIFO) and Less Frequently Used |
| (specified as LFU) |
| |
| --> |
| |
| <!-- |
| Mandatory Default Cache configuration. These settings will be applied to caches |
| created programmtically using CacheManager.add(String cacheName) |
| --> |
| <defaultCache |
| maxElementsInMemory="20000" |
| eternal="true" |
| overflowToDisk="false" |
| memoryStoreEvictionPolicy="LRU" |
| /> |
| |
| <cache name="org.hibernate.cache.StandardQueryCache" |
| maxElementsInMemory="10000" |
| eternal="true" |
| overflowToDisk="false" |
| memoryStoreEvictionPolicy="LRU"/> |
| |
| <cache name="org.hibernate.cache.UpdateTimestampsCache" |
| maxElementsInMemory="10000" |
| eternal="true" |
| overflowToDisk="false"/> |
| |
| <cache name="PageCache" |
| maxElementsInMemory="1000" |
| eternal="false" |
| overflowToDisk="true" |
| timeToIdleSeconds="1000" |
| timeToLiveSeconds="1000" |
| memoryStoreEvictionPolicy="LRU"/> |
| |
| <!-- uncomment to enable cache debugging --> |
| <!-- |
| <cacheManagerPeerListenerFactory |
| class="org.terracotta.ehcachedx.monitor.probe.ProbePeerListenerFactory" |
| properties="monitorAddress=localhost, monitorPort=9889" /> |
| --> |
| |
| </ehcache> |