JBoss Cache SVN: r8147 - in core/trunk/src/main: java/org/jboss/cache and 1 other directory.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2009-08-05 06:36:32 -0400 (Wed, 05 Aug 2009)
New Revision: 8147
Modified:
core/trunk/src/main/docbook/userguide/en/modules/eviction_policies.xml
core/trunk/src/main/java/org/jboss/cache/Node.java
Log:
JBCACHE-1518 clarify docs and examples
Modified: core/trunk/src/main/docbook/userguide/en/modules/eviction_policies.xml
===================================================================
--- core/trunk/src/main/docbook/userguide/en/modules/eviction_policies.xml 2009-08-03 23:55:06 UTC (rev 8146)
+++ core/trunk/src/main/docbook/userguide/en/modules/eviction_policies.xml 2009-08-05 10:36:32 UTC (rev 8147)
@@ -138,9 +138,14 @@
<programlisting role="JAVA"><![CDATA[
...
Map lotsOfData = generateData();
- cache.put("/a/b/c", lotsOfData);
- cache.getRoot().getChild("/a").setResident(true);
- cache.getRoot().getChild("/a/b").setResident(true);
+
+ Fqn abc = Fqn.fromString("/a/b/c");
+ Fqn ab = abc.getParent();
+ Fqn a = ab.getParent();
+
+ cache.put(abc, lotsOfData);
+ cache.getRoot().getChild(a).setResident(true);
+ cache.getRoot().getChild(ab).setResident(true);
...
]]></programlisting>
<para>
Modified: core/trunk/src/main/java/org/jboss/cache/Node.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/Node.java 2009-08-03 23:55:06 UTC (rev 8146)
+++ core/trunk/src/main/java/org/jboss/cache/Node.java 2009-08-05 10:36:32 UTC (rev 8147)
@@ -129,14 +129,18 @@
/**
* Returns the child node
*
- * @param f {@link Fqn} of the child node
+ * @param f {@link Fqn} of the child node. This is a relative Fqn.
* @return null if the child does not exist.
*/
Node<K, V> getChild(Fqn f);
/**
- * @param name name of the child
- * @return a direct child of the current node.
+ * @param name name of the child. Note that passing in a String of "/a/b/c" will <b>not</b> return a node called 'c',
+ * 3 nodes deep. Instead it will try and look for a child called '/a/b/c' directly under this node.
+ * <p />
+ * If you wish to retrieve a child more than one level deep, use the {@link #getChild(Fqn)} version of this method.
+ * <p />
+ * @return a direct child of the current node, named by the name parameter.
*/
Node<K, V> getChild(Object name);
15 years, 4 months
JBoss Cache SVN: r8146 - in enterprise-docs/tags: JBoss_EAP_5_0_0 and 9 other directories.
by jbosscache-commits@lists.jboss.org
Author: irooskov(a)redhat.com
Date: 2009-08-03 19:55:06 -0400 (Mon, 03 Aug 2009)
New Revision: 8146
Added:
enterprise-docs/tags/JBoss_EAP_5_0_0/
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/Makefile
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/Author_Group.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/Book_Info.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/JBoss_Cache_Frequently_Asked_Questions.ent
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/JBoss_Cache_Frequently_Asked_Questions.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/Revision_History.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/images/
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/images/icon.svg
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/Makefile
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/Author_Group.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/Book_Info.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/JBoss_Cache_Tutorial.ent
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/JBoss_Cache_Tutorial.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/Revision_History.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/images/
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/images/icon.svg
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/Makefile
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/Author_Group.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/Book_Info.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/JBoss_Cache_User_Guide.ent
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/Revision_History.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/architecture.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/basic_api.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/batching.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/cache_loaders.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/compatibility.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/configuration.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/configuration_reference.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/deployment.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/eviction_policies.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/images/
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/images/icon.svg
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/introduction.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/jmx_reference.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/master.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/preface.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/replication.xml
enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/transactions.xml
Log:
adding Cache EAP 5 books
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/Makefile
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/Makefile (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/Makefile 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,12 @@
+#Makefile for Red Hat Documentation
+#Created by Jeff Fearn <jfearn(a)redhat.com>
+#Copyright Red Hat Inc. 2006
+
+XML_LANG = en-US
+
+BRAND = JBoss
+
+OTHER_LANGS = de-DE es-ES fr-FR ja-JP pt-BR zh-CN
+
+COMMON_CONFIG = /usr/share/publican
+include $(COMMON_CONFIG)/make/Makefile.common
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/Author_Group.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/Author_Group.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/Author_Group.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,10 @@
+<?xml version='1.0'?>
+<!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+
+
+<authorgroup>
+ <author><firstname>Ben Wang, Bela Ban, Manik Surtani, Scott Marlow, Galder Zamarreño </firstname></author>
+
+</authorgroup>
+
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/Book_Info.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/Book_Info.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/Book_Info.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+
+<bookinfo>
+ <title>JBoss Cache Frequently Asked Questions</title>
+ <subtitle>for Use with JBoss Enterprise Application Platform 5.0</subtitle>
+ <edition>2.0</edition>
+ <pubsnumber>1</pubsnumber>
+ <productname>JBoss Enterprise Application Platform</productname>
+ <productnumber>5.0</productnumber>
+ <abstract>
+ <para>This book is a compilation of frequently asked questions about JBoss Cache</para>
+ </abstract>
+ <isbn>N/A</isbn>
+ <corpauthor>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="Common_Content/images/redhat-logo.svg" />
+ </imageobject>
+ </inlinemediaobject>
+ </corpauthor>
+ <copyright>
+ <year>&YEAR;</year>
+ <holder>&HOLDER;</holder>
+ </copyright>
+ <xi:include href="Common_Content/Legal_Notice.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+<xi:include href="Author_Group.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+</bookinfo>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/JBoss_Cache_Frequently_Asked_Questions.ent
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/JBoss_Cache_Frequently_Asked_Questions.ent (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/JBoss_Cache_Frequently_Asked_Questions.ent 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,3 @@
+<!ENTITY HOLDER "Red Hat, Inc">
+<!ENTITY YEAR "2009">
+<!ENTITY VERSION "">
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/JBoss_Cache_Frequently_Asked_Questions.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/JBoss_Cache_Frequently_Asked_Questions.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/JBoss_Cache_Frequently_Asked_Questions.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,1504 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "../../../../docbook-support/support/docbook-dtd/docbookx.dtd"
+ >
+<book lang="en">
+<xi:include href="Book_Info.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <chapter id="general">
+ <title>General Information</title>
+ <qandaset>
+
+ <qandaentry>
+ <question>
+ <para>What is JBoss Cache?</para>
+ </question>
+
+ <answer>
+ <para>JBoss Cache is a replicated and transactional cache. It is
+ replicated since multiple JBoss Cache instances can be distributed
+ (either within the same JVM or across several JVMs whether they reside on
+ the same machine or on different machines on a network) and data is
+ replicated across the whole group. It is transactional because a
+ user can configure a
+ <ulink url="http://java.sun.com/products/jta/">JTA</ulink>
+ compliant transaction
+ manager and make any cache
+ interaction transactional, and caches would participate in ongoing JTA transactions. Note that
+ the cache can also be run without
+ any replication; this is the local mode.
+ </para>
+
+ <para>JBoss Cache comes in two flavours: Core and POJO versions. The core library
+ (using the
+ <literal>org.jboss.cache.Cache</literal>
+ interface) is the underlying library that organises data in a tree-like structure and handles
+ all locking,
+ passivation,
+ eviction and replication characteristics of data in the cache. The POJO library (using the
+ <literal>org.jboss.cache.pojo.PojoCache</literal>
+ interface) is built atop the core library and allows introspection
+ of objects in the cache providing transparent coherence by using JBoss AOP. Note that the POJO
+ edition
+ of JBoss Cache
+ (often referred to as POJO Cache) comes with a separate set of documentation (Users' Guide, FAQ,
+ etc.)
+ available on the JBoss Cache
+ <ulink url="http://www.jboss.org/jbosscache/">documentation website</ulink>.
+ </para>
+
+ <para>
+ JBoss Cache is made available in one of four different packages:
+ <itemizedlist>
+ <listitem>
+ <para>
+ <literal>jbosscache-core</literal>
+ </para>
+ contains the core Cache library for users who do not wish to use the additional
+ functionality
+ offered by POJO Cache.
+ </listitem>
+ <listitem>
+ <para>
+ <literal>jbosscache-pojo</literal>
+ </para>
+ contains the core Cache library as well as POJO Cache extensions and dependencies.
+ </listitem>
+ </itemizedlist>
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Who are the JBoss Cache developers?</para>
+ </question>
+
+ <answer>
+ <para>
+ JBoss Cache has an active community of developers and contributors. The project was founded by
+ Bela
+ Ban
+ and is currently led by Manik Surtani. Jason Greene is the lead for the POJO Cache subsystem,
+ and other
+ contributors both past and present include Ben Wang, Harald Gliebe, Brian Stansberry, Vladimir
+ Blagojevic, Mircea Markus, Jimmy Wilson, Galder Zamarreño and Elias Ross.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>What about licensing?</para>
+ </question>
+
+ <answer>
+ <para>JBoss Cache is licensed under
+ <ulink url="http://www.gnu.org/licenses/lgpl.html">LGPL</ulink>, an<ulink
+ url="http://www.opensource.org/">OSI</ulink>-approved open source license.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Where can I download JBoss Cache?</para>
+ </question>
+
+ <answer>
+ <para>The JBoss Cache
+ <ulink url="http://www.jboss.com/products/jbosscache/downloads">product download page</ulink>
+ has prebuilt binaries as well as source distributions. You can also grab snapshots from the
+ JBoss.org subversion
+ repository. See
+ <ulink url="http://www.jboss.org/community/docs/DOC-10259">the JBoss Cache development</ulink>
+ wiki page for details.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>How do I build JBoss Cache from sources?</para>
+ </question>
+
+ <answer>
+ <para>
+ Read the README-Maven.txt file in the source root. Note that you will need a JDK >= 5.0, and
+ Apache Maven >= 2.0.6.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Which versions of the JDK are supported by JBoss Cache?</para>
+ </question>
+
+ <answer>
+ <para>
+ JBoss Cache is baselined on Java 5 and is tested on Java 5 and 6 VMs. If, for whatever reason
+ you have
+ to use Java 1.4, you could build a retroweaved version of the core cache
+ library that is Java 1.4 compatible, using the simple instructions on this wiki page
+ <ulink url="http://www.jboss.org/community/docs/DOC-10263">on building and running JBoss Cache
+ on Java 1.4.
+ </ulink>.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>How do I know the version of JBoss Cache that I am using?</para>
+ </question>
+
+ <answer>
+ <para>
+ <literal>java -jar jbosscache-core.jar</literal>
+ will spit out version details.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Can I run JBoss Cache outside of JBoss Application
+ Server?
+ </para>
+ </question>
+
+ <answer>
+ <para>
+ Absolutely! Even though JBoss Cache comes integrated with JBoss Application Server,
+ it can also be used in any other Java EE server such as BEA WebLogic, IBM Websphere or Tomcat.
+ It
+ can also run in a standalone Java process, completely outside of an application server. See the
+ Users' Guide for more
+ details.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>How can I migrate my application and configuration from using JBoss Cache 1.x to 2.x?</para>
+ </question>
+ <answer>
+ <para>Look at
+ <ulink url="http://www.jboss.org/community/docs/DOC-10246">this wiki page</ulink>
+ for help.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>What about from 2.x to 3.x?</para>
+ </question>
+ <answer>
+ <para>
+ JBoss Cache 3.x is API compatible with 2.x, although as far as possible you should refactor your
+ code
+ not to use deprecated methods as these may disappear in future releases of JBoss Cache.
+ </para>
+ <para>
+ JBoss Cache 3.x comes with an all new configuration format. Old 2.x configuration files will
+ still
+ work, although you will get a warning in the logs about this. Again, as far as possible, we
+ recommend
+ migrating your configuration file to the new format. Scripts are provided with the JBoss Cache
+ 3.x
+ distribution to migrate configuration files (see
+ <literal>config2to3.sh</literal>
+ and<literal>config2to3.bat</literal>).
+ </para>
+ <para>
+ Note that to take advantage of some of the new features in JBoss Cache 3.x, you need to be using
+ the
+ new configuration format.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Where can I report bugs or problems?</para>
+ </question>
+
+ <answer>
+ <para>Please report any bugs or problems to
+ <ulink url="http://www.jboss.org/jbosscache">JBoss Cache User Forum</ulink>.
+ </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+ </chapter>
+
+ <chapter id="TreeCache">
+ <title>JBoss Cache - Core</title>
+
+ <qandaset>
+
+ <qandaentry>
+ <question>
+ <para>Using JBoss Cache 2 or 3 on JBoss AS 4.x</para>
+ </question>
+
+ <answer>
+ <para>
+ JBoss AS 4.x ships with JBoss Cache 1.4.x. To make use of new features, performance improvements
+ and bug fixes in newer releases, you can follow some of the steps outlined on<ulink
+ url="http://www.jboss.org/community/docs/DOC-10254">this wiki page</ulink>.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Can I run multiple JBoss Cache instances on the same VM?</para>
+ </question>
+
+ <answer>
+ <para>Yes. There are some scenarios where you may want to run
+ multiple instances of JBoss Cache. For example, you want to run
+ multiple local cache instances with each instance having its own
+ configuration (e.g., different cache policy). In this case, you will
+ need multiple xml configuration files.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Can JBoss Cache run as a second level cache inside
+ Hibernate?
+ </para>
+ </question>
+
+ <answer>
+ <para>Yes. Since Hibernate 3.0 release, you can configure it to use
+ JBoss Cache as a second level cache. For details,
+ see Hibernate documentation, and also see
+ <ulink url="http://www.jboss.org/community/docs/DOC-10265">this wiki page</ulink>.
+ </para>
+ <para>
+ JBoss Cache 3.x with MVCC in particular works very well as a Hibernate second level cache.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>What about using POJO Cache as a Hibernate cache?</para>
+ </question>
+
+ <answer>
+ <para>It is not necessary to use POJO Cache for second level
+ cache inside Hibernate because Hibernate
+ manages fine-grained fields in Java objects. Using POJO Cache won't
+ provide any advantage, and will be an unnecessary performance drawback.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>How can I configure JBoss Cache?</para>
+ </question>
+
+ <answer>
+ <para>You can configure the JBoss Cache through a configuration xml
+ file or programmatically using a
+ <literal>org.jboss.cache.config.Configuration</literal>
+ object, passed in to the
+ <literal>org.jboss.cache.CacheFactory</literal>
+ instance.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Can I use a schema or DTD to validate my JBoss Cache configuration file?
+ </para>
+ </question>
+
+ <answer>
+ <para>
+ As of JBoss Cache 3.x, yes. An XSD schema is provided in your jbosscache-core.jar file, and is
+ also
+ available online, on<ulink url="http://www.jboss.org/jbosscache/jbosscache-config-3.0.xsd">
+ http://www.jboss.org/jbosscache/jbosscache-config-3.0.xsd</ulink>.
+ You can configure your IDE, text editor or XML authoring tool to use this schema to validate
+ your file.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>What is the difference between the different cache modes?
+ </para>
+ </question>
+
+ <answer>
+ <para>JBossCache has five different cache modes, i.e.,
+ <literal>LOCAL</literal>
+ ,
+ <literal>REPL_SYNC</literal>
+ ,
+ <literal>REPL_ASYNC</literal>
+ ,
+ <literal>INVALIDATION_SYNC</literal>
+ and
+ <literal>INVALIDATION_ASYNC</literal>
+ . If you want to run JBoss Cache as a
+ single instance, then you should set the cache mode to
+ <literal>LOCAL</literal>
+ so that it won't attempt to replicate anything.
+ If you want to have synchronous replication among different
+ JBoss Cache instances, you set it to
+ <literal>REPL_SYNC</literal>
+ .
+ For asynchronous replication, use
+ <literal>AYSNC_REPL</literal>
+ . If you do not wish to replicate cached data but simply inform other caches in a cluster that
+ data
+ under
+ specific addresses are now stale and should be evicted from memory, use
+ <literal>INVALIDATION_SYNC</literal>
+ or
+ <literal>INVALIDTAION_ASYNC</literal>
+ . Synchronous and asynchronous behavior applies to invalidation as well as replication.
+ </para>
+
+ <para>Note that
+ <literal>ASYNC_REPL</literal>
+ and
+ <literal>INVALIDATION_ASYNC</literal>
+ are non-blocking. This
+ can be useful when you want to have another JBoss Cache serving as a
+ mirror or backup and you don't want to wait for confirmation that this mirror has received your
+ messages.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>How does JBoss Cache's replication mechanism work?</para>
+ </question>
+
+ <answer>
+ <para>JBoss Cache leverages
+ <ulink url="http://www.jgroups.org">JGroups</ulink>
+ for network communications. A JGroups configuration section is present in your JBoss Cache
+ configuration.
+ </para>
+ <para>
+ A user
+ can configure the cluster of JBoss Cache instances by sharing the
+ same cluster name (
+ <literal>cluster name</literal>
+ ). There is also
+ an option of whether to populate the cache data upon starting a new
+ instance in the
+ <literal>ClusterConfig</literal>
+ attribute.
+ </para>
+
+ <para>Note that once all instances join the same replication group,
+ every replication change is propagated to all participating members.
+ There is no mechanism for sub-partitioning where some replication
+ can be done within only a subset of members, unless you use the Buddy Replication features. See
+ the
+ Users' Guide for more details on this.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>I run a 2 node cluster. If the network dies, do the caches continue to run?</para>
+ </question>
+
+ <answer>
+ <para>Yes, both will continue to run, but depending on your replication mode, all transactions or
+ operations may not complete. If
+ <literal>REPL_SYNC</literal>
+ is used, operations will fail while if
+ <literal>REPL_ASYNC</literal>
+ is used they will succeed. Even if they succeed though, caches will be out of sync.
+ </para>
+ </answer>
+ </qandaentry>
+
+
+ <qandaentry>
+ <question>
+ <para>Can I plug in library X instead of JGroups to handle remote calls and group communications?
+ </para>
+ </question>
+
+ <answer>
+ <para>At this stage the answer is no. We do have an abstraction layer between the
+ communication suite and JBoss Cache in the pipelines, and this may appear as a feature at some
+ stage
+ in
+ the future.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Does the cache need to replicate to every other instance in the cluster? Isn't this slow if
+ the
+ cluster is large?
+ </para>
+ </question>
+
+ <answer>
+ <para>Replication need not occur to every node in the cluster. This feature -
+ called Buddy Replication -
+ allows each node to pick one or more 'buddies' in the cluster and only replicate to its buddies.
+ This
+ allows a cluster to scale
+ very easily with no extra impact on memory or network traffic with each node added.
+ </para>
+ <para>
+ See the Users' Guide for more information on Buddy Replication, and how it can be used to
+ achieve very
+ high
+ scalability.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>I'm using Buddy Replication. Do I need to have some form of session affinity?</para>
+ </question>
+ <answer>
+ <para>Session affinity relates to returning to the same cache instance for the same data being used.
+ While this is strictly not a requirement for Buddy Replication, it is greatly recommended to
+ minimize
+ moving state around a cluster.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>If I have the need for different configuration properties (e.g.,
+ <literal>CacheMode</literal>
+ and
+ <literal>IsolationLevel</literal>
+ ), do I simply need to create multiple
+ <literal>org.jboss.cache.Cache</literal>
+ instances with the appropriate configuration?
+ </para>
+ </question>
+
+ <answer>
+ <para>Yes. All the above mentioned properties are per cache
+ instance. Therefore you will need separate
+ <literal>org.jboss.cache.Cache</literal>
+ instances.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Isn't this expensive from a networking standpoint, i.e., needing to create sockets for each
+ <literal>org.jboss.cache.Cache</literal>
+ instance?
+ </para>
+ </question>
+
+ <answer>
+ <para>
+ Yes, it can be. For such cases it is recommended that you configure your cache using the JGroups
+ Multiplexer, which allows several caches to share
+ a single JGroups channel. Please see the Users' Guide for details on how to configure the
+ JGroups
+ Multiplexer.
+ </para>
+ <para>
+ A faster and more efficient approach is to use a shared transport in JGroups. Please see
+ <ulink url="http://www.jgroups.org">the JGroups documentation</ulink>
+ for more details on how to do this.
+ </para>
+ </answer>
+ </qandaentry>
+
+
+ <qandaentry>
+ <question>
+ <para>Does the
+ <literal>ClusterName</literal>
+ configuration element have
+ any relation to the JBoss AS cluster
+ <literal>PartitionName</literal>
+ ?
+ </para>
+ </question>
+
+ <answer>
+ <para>Yes. They are both JGroups group names. Besides the notion of
+ a channel in JGroups, it also can partition the channel into different
+ group names.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>When using multiple JGroups based components
+ [cluster-service.xml, cache (multiple instances)], what is the
+ correct/valid way to configure those components to make sure my
+ multicast addresses don't conflict?
+ </para>
+ </question>
+
+ <answer>
+ <para>There are two parameters to consider: multicast address (plus
+ port) and the group name. At minimum, you will have to run
+ components using a different group name. But whether to run them on
+ the same channel depends upon whether the communication performance
+ is critical for you or not. If it is, then it'd be best to run them
+ on different channels.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Does JBoss Cache support cache persistence
+ storage?
+ </para>
+ </question>
+
+ <answer>
+ <para>Yes. JBoss Cache has a cache loader
+ interface that supports cache persistence. See below for more FAQs on cache loaders.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Does JBoss Cache support cache passivation/ overflow
+ to a data store?
+ </para>
+ </question>
+
+ <answer>
+ <para>Yes. JBoss Cache uses the
+ cache loader to support cache passivation/ overflow. See
+ documentation on how to configure and use this feature.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Is JBoss Cache thread safe?</para>
+ </question>
+
+ <answer>
+ <para>Yes, it is thread safe.</para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Does JBoss Cache support XA (2PC) transactions now?</para>
+ </question>
+
+ <answer>
+ <para>No, although it is also on our to do list. Our internal
+ implementation does use a procedure similar to 2PC to coordinate a
+ transactions among different instances, but JBoss Cache is not an XA resource.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Which transaction managers are supported by
+ JBoss Cache?
+ </para>
+ </question>
+
+ <answer>
+ <para>JBoss Cache supports any TransactionManager that is
+ <ulink url="http://java.sun.com/products/jta/">JTA</ulink>
+ compliant such as<ulink url="http://www.jboss.org/jbosstm/">JBoss Transactions</ulink>.
+ </para>
+ <para>
+ While JBoss Cache does ships with a
+ dummy transaction manager
+ (<literal>org.jboss.cache.transaction.DummyTransactionManager</literal>), we do
+ <emphasis>not</emphasis>
+ recommend using this for production. It is not thread safe, and is intended for internal testing
+ only.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>How do I set up the cache to be transactional?</para>
+ </question>
+
+ <answer>
+ <para>You either use the default transaction manager that ships with JBoss AS
+ or you have to implement the
+ <literal>org.jboss.cache.transaction.TransactionManagerLookup</literal>
+ interface, and return an
+ instance of your
+ <literal>javax.transaction.TransactionManager</literal>
+ implementation. The
+ configuration property
+ <literal>TransactionManagerLookupClass</literal>
+ defines the class
+ to be used by the cache to fetch a reference to a
+ transaction manager. It is trivial to implement this interface to support
+ other transaction managers. Once this attribute is specified, the
+ cache will look up the transaction context from this transaction
+ manager.
+ </para>
+ <para>
+ The
+ <literal>org.jboss.cache.transaction.GenericTransactionManagerLookup</literal>
+ class that ships
+ with JBoss Cache is able to detect and bind to most popular transaction managers. See the
+ <literal>GenericTransactionManagerLookup</literal>
+ javadocs for more information.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>How do I control the cache locking level?</para>
+ </question>
+
+ <answer>
+ <para>JBoss Cache lets you control the cache locking level through
+ the transaction isolation level. This is configured through the
+ attribute
+ <literal>IsolationLevel</literal>
+ . The transaction
+ isolation levels correspond to database
+ isolation levels, namely,
+ <literal>NONE</literal>
+ ,
+ <literal>READ_UNCOMMITTED</literal>
+ ,
+ <literal>READ_COMMITTED</literal>
+ ,
+ <literal>REPEATABLE_READ</literal>
+ , and
+ <literal>SERIALIZABLE</literal>
+ . Note that these isolation levels are ignored if optimistic locking is used. For details,
+ please
+ refer
+ to the
+ user manual.
+ </para>
+ <para>
+ As of JBoss Cache 3.x, when using the MVCC locking scheme, only
+ <literal>READ_COMMITTED</literal>
+ and
+ <literal>REPEATABLE_READ</literal>
+ are supported. Any other isolation level provided will either be upgraded
+ or downgraded accordingly.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>How does JBoss Cache lock data for concurrent access?</para>
+ </question>
+
+ <answer>
+ <para>In JBoss Cache 2.x, by default pessimistic locking is used to lock data nodes, based on the
+ isolation level
+ configured. We also offer optimistic locking to allow for greater concurrency
+ at
+ the cost of slight processing overhead and performance. See the documentation for a more
+ detailed
+ discussion on concurrency and locking in JBoss Cache.
+ </para>
+ <para>
+ In JBoss Cache 3.x, optimistic and pessimistic locking are deprecated in favour of MVCC
+ (multi-version concurrency
+ control), which is far more efficient than either optimistic or pessimistic locking. For a
+ detailed discussion on
+ our MVCC implementation, see
+ <ulink url="http://jbosscache.blogspot.com/2008/07/mvcc-has-landed.html">this blog entry</ulink>
+ and<ulink url="http://www.jboss.org/community/docs/DOC-10272">this wiki page</ulink>.
+ </para>
+ </answer>
+ </qandaentry>
+
+
+ <qandaentry>
+ <question>
+ <para>How do I enable Optimistic Locking or MVCC in JBoss Cache?</para>
+ </question>
+
+ <answer>
+ <para>
+ Please see the configuration section of the Users' Guide for details.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Can I use the cache locking level even without a transaction
+ context?
+ </para>
+ </question>
+
+ <answer>
+ <para>Yes. JBoss Cache controls the individual node locking behavior
+ through the isolation level semantics. This means even if you don't
+ use a transaction, you can specify the lock level via isolation
+ level. You can think of the node locking behavior outside of a
+ transaction as if it is under transaction with
+ <literal>auto_commit</literal>
+ on.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>
+ Does JBoss Cache support
+ <literal>SELECT FOR UPDATE</literal>
+ semantics?
+ </para>
+ </question>
+
+ <answer>
+ <para>
+ Yes, but this is is only possible if you are running within a JTA transaction
+ <emphasis>and</emphasis>
+ are using either
+ <literal>MVCC</literal>
+ or
+ <literal>PESSIMISTIC</literal>
+ as your node locking scheme.
+ </para>
+ <para>
+ To achieve
+ <literal>SELECT FOR UPDATE</literal>
+ semantics, simply do:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+
+ // start transaction ...
+
+ cache.getInvocationContext().getOptionOverrides().setForceWriteLock(true);
+ Node n = cache.get("/a/b/c"); // this acquires a WRITE LOCK on this node
+ ...
+ ...
+
+ // end transaction
+
+ ]]></programlisting>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>With replication (REPL_SYNC/REPL_ASYNC) or invalidation
+ (INVALIDATION_SYNC/INVALIDATION_ASYNC), how
+ often does the cache broadcast messages over the network?
+ </para>
+ </question>
+
+ <answer>
+ <para>If the updates are under transaction, then the broadcasts
+ happen only when the transaction is about to commit (actually
+ during the prepare stage internally). That is, it will be a batch
+ update. However, if the operations are not under transaction
+ context, then each update will trigger replication. Note that this
+ has performance implications if network latency is a problem.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>How can I do a mass removal?</para>
+ </question>
+
+ <answer>
+ <para>If you do a<literal>cache.removeNode("/myroot")</literal>, it will recursively remove
+ all the entries under "/myroot".
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Can I monitor and manage the JBoss Cache?</para>
+ </question>
+
+ <answer>
+ <para>Yes, using a JMX console such as the one shipped with JBoss AS or Java 5's
+ <literal>jconsole</literal>
+ utility. See the chapter titled
+ <emphasis role="bold">Management Information</emphasis>
+ in the JBoss Cache Users' Guide for more details.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>
+ JBoss Cache uses a
+ <literal>:</literal>
+ character in its object name. This causes problems with
+ my MBean server. What can I do about it?
+ </para>
+ </question>
+ <answer>
+ <para>
+ This is something we have seen with some MBean servers. By default, JBoss Cache uses
+ <literal>jboss.cache:service=JBossCache</literal>
+ as a prefix to all objects it binds in JMX.
+ To work around this, use the
+ <literal>-Djbosscache.jmx.prefix</literal>
+ JVM parameter to pass in
+ an alternate prefix.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Can I disable JBoss Cache management attributes?</para>
+ </question>
+
+ <answer>
+ <para>Yes, you can. See the section on configuration in the JBoss Cache Users' Guide.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>What happened to jboss-serialization.jar?</para>
+ </question>
+
+ <answer>
+ <para>
+ As of JBoss Cache 2.0.0, the dependency on JBoss Serialization has been dropped since most of
+ the
+ benefits of JBoss Serialization are available in updated Java 5 VMs. Since JBoss Cache 2.0.0 is
+ baselined on Java 5, there was no need to provide these benefits separately.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Does JBoss Cache support partitioning?</para>
+ </question>
+
+ <answer>
+ <para>Not right now. JBoss Cache does not support partitioning that a
+ user can configure to have different set of data residing on
+ different cache instances while still participating as a replication
+ group.
+ </para>
+ <para>
+ This is on the roadmap though, so do keep an eye on
+ <ulink url="http://jira.jboss.org/jira/browse/JBCACHE-60">JBCACHE-60</ulink>
+ if you are interested.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Does JBoss Cache handle the concept of application classloading
+ inside, say, a Java EE container?
+ </para>
+ </question>
+
+ <answer>
+ <para>Application-specific classloading is used widely inside a Java EE
+ container. For example, a web application may require a new
+ classloader to scope a specific version of the user library.
+ However, by default JBoss Cache is agnostic to the classloader. In
+ general, this leads to two kinds of problems:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Object instance is stored in cache1 and replicated to
+ cache2. As a result, the instance in cache2 is created by the
+ system classloader. The replication may fail if the system
+ classloader on cache2 does not have access to the required
+ class. Even if replication doesn't fail, a user thread in cache2
+ may not be able to access the object if the user thread is
+ expecting a type defined by the application classloader.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Object instance is created by thread 1 and will be
+ accessed by thread 2 (with two different classloaders).
+ JBoss Cache has no notion of the different classloaders involved.
+ As a result, you will have a
+ <literal>ClassCastException</literal>
+ . This is a standard
+ problem in passing an object from one application space to
+ another; JBoss Cache just adds a level of indirection in passing
+ the object.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>To solve the first kind of issue JBoss Cache uses a
+ <literal>CacheMarshaller</literal>
+ .
+ Basically, this allows application code to register a classloader
+ with a portion of the cache tree for use in handling objects
+ replicated to that portion. See the
+ <literal>CacheMarshaller</literal>
+ section of
+ the Users' Guide for more details.
+ </para>
+
+ <para>To solve the second kind of issue, you can use the the
+ <literal>UseLazyDeserialization</literal>
+ configuration
+ option in JBoss Cache, which wraps your objects in a
+ <literal>Marshalledvalue</literal>
+ wrapper. The
+ <literal>MarshalledValue</literal>
+ serializes and deserializes your object on demand, ensuring the proper thread local context
+ class loader is used each time.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Does JBoss Cache currently support pre-event and post-event
+ notification?
+ </para>
+ </question>
+
+ <answer>
+ <para>Yes. A boolean is passed in to each notification callback identifying whether the callback is
+ before
+ or after the event. See the
+ <literal>org.jboss.cache.notifications.annotations.CacheListener</literal>
+ annotation for details.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>How do I implement a custom listener to listen to
+ cache events?
+ </para>
+ </question>
+
+ <answer>
+ <para>
+ See the Users' Guide on this subject.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Can I use
+ <literal>UseRegionBasedMarshalling</literal>
+ attribute in JBoss Cache in order to get
+ around ClassCastExceptions happening when accessing data in the cache that has just been
+ redeployed?
+ </para>
+ </question>
+
+ <answer>
+ <para>Yes, you can. Originally, cache Marshalling was designed as a
+ workaround for those replicated caches that upon state transfer did not have access to the
+ classloaders defining the objects in the cache.
+ </para>
+
+ <para>On each deployment, JBoss creates a new classloader per the top level deployment artifact, for
+ example an EAR. You also have to bear in mind that a class in an application server is defined
+ not
+ only by the class name but also its classloader. So, assuming that the cache is not deployed as
+ part
+ of your deployment, you could deploy an application and put instances of classes belonging to
+ this
+ deployment inside the cache. If you did a redeployment and try to do a get operation of the data
+ previously put, this would result on a ClassCastException. This is because even though the class
+ names
+ are the same, the class definitions are not. The current classloader is different to the one
+ when
+ the classes were originally put.
+ </para>
+
+ <para>By enabling marshalling, you can control the lifecycle of the data in the cache and if on
+ undeployment, you deactivate the region and unregister the classloader that you'd have
+ registered on
+ deployment, you'd evict the data in the cache locally. That means that in the next deployment,
+ the
+ data won't be in the cache, therefore avoiding the problem. Obviously, using marshalling to get
+ around this problem is only recommended when you have some kind of persistence backing where the
+ data
+ survives, for example using CacheLoaders, or when JBoss Cache is used as a second level cache in
+ a
+ persistence framework.
+ </para>
+
+ <para>To implement this feature, please follow the instructions indicated in the example located
+ in the CacheMarshaller section of the Users' Guide. It's worth noting that instead of a
+ <literal>ServletContextListener</literal>
+ , you could add this code into an
+ <literal>MBean</literal>
+ that contained lifecycle methods, such as
+ <literal>start()</literal>
+ and
+ <literal>stop()</literal>
+ .
+ The key would be for this MBean to depend on the target cache, so that it can operate as long as
+ the
+ cache is up and running.
+ </para>
+ </answer>
+ </qandaentry>
+
+ </qandaset>
+ </chapter>
+
+ <chapter id="eviction">
+ <title>Eviction Policies</title>
+ <qandaset>
+ <qandaentry>
+ <question>
+ <para>Does JBoss Cache support eviction policies?</para>
+ </question>
+
+ <answer>
+ <para>Yes. JBoss Cache currently supports multiple eviction policies such as LRU, MRU, and FIFO.
+ Users can also plug in their own eviction policy algorithms. See user
+ guide for details.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Does JBoss Cache's eviction policy operates in
+ replication mode?
+ </para>
+ </question>
+
+ <answer>
+ <para>Yes and no. :-)</para>
+
+ <para>The eviction policy only operates in local mode. That is, nodes are
+ only evicted locally. This may cause the cache contents not to be
+ synchronized temporarily. But when a user tries to obtain the cached
+ contents of an evicted node and finds out that is null (e.g.,
+ <literal>get</literal>
+ returns null), it should get it from the
+ other data source and re-populate the data in the cache. During this
+ moment, the node content will be propagated and the cache content
+ will be in sync.
+ </para>
+
+ <para>However, you still can run eviction policies with cache mode
+ set to either
+ <literal>REPL_SYNC</literal>
+ or
+ <literal>REPL_ASYNC</literal>
+ . Depending on your use case, you can
+ set multiple cache instances to have their own eviction policy
+ (which are applied locally) or just have selected instances with
+ eviction policies activated.
+ </para>
+
+ <para>Also note that, with cache loader option, a locally evicted
+ node can also be persisted to the backend store and a user can
+ retrieve it from the store later on.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Does JBoss Cache support
+ <literal>Region</literal>
+ ?
+ </para>
+ </question>
+
+ <answer>
+ <para>Yes. JBoss Cache has the notion of region where a user can
+ configure the eviction policy parameters (e.g.,
+ <literal>maxNodes</literal>
+ or
+ <literal>timeToIdleSeconds</literal>
+ )
+ </para>
+
+ <para>A region in JBoss Cache denotes a portion of tree hierarchy,
+ e.g., a fully qualified name (
+ <literal>org.jboss.cache.Fqn</literal>
+ ). For example,
+ a user can define
+ <literal>/org/jboss</literal>
+ and
+ <literal>/org/foocom</literal>
+ as two separate regions. But note
+ that you can configure the region programmatically now, i.e.,
+ everything has to be configured through the xml file.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>I have turned on the eviction policy, why do I still get "out
+ of memory" (OOM) exception?
+ </para>
+ </question>
+
+ <answer>
+ <para>OOM can happen when the speed of cache access exceeds the
+ speed of eviction policy handling timer. Eviction policy handler
+ will wake up every
+ <literal>wakeUpInterval</literal>
+ milliseconds (or
+ <literal>wakeUpIntervalSeconds</literal>
+ seconds, prior to 3.x)
+ to process the eviction event queue. So when the queue size is full, it will create a
+ backlog and cause out-of-memory exceptions to happen unless the eviction timer catches
+ up. To address this problem, in addition to increase the VM heap
+ size, you can also reduce the
+ <literal>wakeUpInterval</literal>
+ so the timer thread
+ processes the queue more frequently.
+ </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+ </chapter>
+ <chapter id="cacheloaders">
+ <title>Cache Loaders</title>
+ <qandaset>
+
+
+ <qandaentry>
+ <question>
+ <para>What is a cache loader?</para>
+ </question>
+
+ <answer>
+ <para>A cache loader is the connection of JBoss Cache to a
+ (persistent) data store. The cache loader is called by JBoss Cache to
+ fetch data from a store when that data is not in the cache, and when
+ modifications are made to data in the cache the Cache Loader is
+ called to store those modifications back to the store.
+ </para>
+
+ <para>In conjunction with eviction policies, JBoss Cache with a
+ cache loader allows a user to maintain a bounded cache for a large
+ backend datastore. Frequently used data is fetched from the
+ datastore into the cache, and the least used data is evicted, in
+ order to provide fast access to frequently accessed data. This is
+ all configured through XML, and the programmer doesn't have to take
+ care of loading and eviction.
+ </para>
+
+ <para>JBoss Cache currently ships with several cache loader
+ implementations, including:
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <literal>org.jboss.cache.loader.FileCacheLoader</literal>
+ : this implementation uses the file
+ system to store and retrieve data. JBoss Cache nodes are mapped
+ to directories, subnodes to subdirectories etc. Attributes of
+ a node are mapped to a data file
+ inside the
+ directory.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>org.jboss.cache.loader.jdbm.JdbmCacheLoader</literal>
+ : this implementation is based on<ulink url="http://jdbm.sourceforge.net/">
+ JDBM</ulink>,
+ an open source file-based transactional persistence engine.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>org.jboss.cache.loader.bdbje.BdbjeCacheLoader</literal>
+ : this implementation is based on the
+ Oracle's Berkeley DB Java Edition database, a fast and efficient
+ transactional database. It uses a single file for the entire
+ store. Note that if you use the Berkeley DB cache loader with
+ JBoss Cache and wish to ship your product, you will have to acquire a
+ <ulink url="http://www.sleepycat.com/jeforjbosscache">commercial license from
+ Oracle</ulink>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>org.jboss.cache.loader.JDBCCacheLoader</literal>
+ : this implementation uses the relational database as the persistent
+ storage.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>And more. See the chapter on cache loaders in the Users' Guide for more details.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Is the FileCacheLoader recommended for production use?</para>
+ </question>
+
+ <answer>
+ <para>
+ No, it is not. The FileCacheLoader has some severe limitations which restrict its use in a
+ production
+ environment, or if used in such an environment, it should be used with due care and sufficient
+ understanding of these limitations.
+ <itemizedlist>
+ <listitem>Due to the way the FileCacheLoader represents a tree structure on disk
+ (directories and
+ files) traversal is inefficient for deep trees.
+ </listitem>
+ <listitem>Usage on shared filesystems like NFS, Windows shares, etc. should be avoided as
+ these do
+ not implement proper file locking and can cause data corruption.
+ </listitem>
+ <listitem>Usage with an isolation level of NONE can cause corrupt writes as multiple threads
+ attempt to write to the same file.
+ </listitem>
+ <listitem>File systems are inherently not transactional, so when attempting to use your
+ cache in a
+ transactional context, failures when writing to the file (which happens during the
+ commit phase)
+ cannot be recovered.
+ </listitem>
+ </itemizedlist>
+
+ As a rule of thumb, it is recommended that the FileCacheLoader not be used in a highly
+ concurrent,
+ transactional or stressful environment, and its use is restricted to testing.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Can writing to cache loaders be asynchronous?</para>
+ </question>
+
+ <answer>
+ <para>Yes. Set the
+ <literal>async</literal>
+ attrobute to true. See the JBoss Cache Users' Guide for a more
+ detailed discussion. By default though, all cache loader writes are
+ synchronous and will block.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Can I write my own cache loader ?</para>
+ </question>
+
+ <answer>
+ <para>Yes. A cache loader is a class implementing
+ <literal>org.jboss.cache.loader.CacheLoader</literal>
+ or extending
+ <literal>org.jboss.cache.loader.AbstractCacheLoader</literal>
+ . It is
+ configured via the XML file (see JBoss Cache Users' Guide).
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Does a cache loader have to use a persistent store ?</para>
+ </question>
+
+ <answer>
+ <para>No, a cache loader could for example fetch (and possibly store)
+ its data from a webdav-capable webserver. Another example is a
+ caching proxy server, which fetches contents from the web. Note that
+ an implementation of CacheLoader may not implement the 'store'
+ functionality in this case, but just the 'load'
+ functionality.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Do I have to pay to use Oracle's Berkeley DB CacheLoader?</para>
+ </question>
+
+ <answer>
+ <para>Not if you use it only for personal use. As soon as you
+ distribute your product with BdbjeCacheLoader, you have to purchase
+ a commercial license from Oracle. See details at
+ <ulink
+ url="http://www.sleepycat.com/jeforjbosscache">http://www.sleepycat.com/jeforjbosscache
+ </ulink>
+ .
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Are there any tools available to monitor the Berkeley DB instance?</para>
+ </question>
+
+ <answer>
+ <para>
+ Yes. Oracle ships a JMX-based monitoring tool, called
+ <ulink
+ url="http://www.oracle.com/technology/documentation/berkeley-db/je/java/com/sl...">
+ JEMonitor
+ </ulink>
+ which can be downloaded from the Oracle website.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>When tuning my Berkeley DB instance, where should I put my je.properties file?</para>
+ </question>
+
+ <answer>
+ <para>
+ <literal>je.properties</literal>
+ should reside in your Berkeley DB home directory. This is the directory you pass
+ in to the BDBJECacheLoader's
+ <literal>location</literal>
+ configuration property.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Can I use more than one cache loader?</para>
+ </question>
+
+ <answer>
+ <para>Yes. Within the CacheLoaderConfiguration XML
+ element (see Users' Guide chapter on cache loaders) you can
+ describe several cache loaders. The impact is that the cache will
+ look at all of the cache loaders in the order they've been
+ configured, until it finds a valid, non-null element of data. When
+ performing writes, all cache loaders are written to (except if the
+ ignoreModifications element has been set to true for a specific
+ cache loader.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>Can I migrate a JDBCacheLoader or FileCacheLoader based cache store containing data formatted
+ with
+ JBoss Cache 1.x.x to JBoss Cache 2.0 format?
+ </para>
+ </question>
+
+ <answer>
+ <para>Yes. See "Transforming Cache Loaders" section within the "Cache Loaders" section located in
+ the
+ JBoss Cache Users' Guide.
+ </para>
+ </answer>
+ </qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>
+ Is the TCPDelegatingCacheLoader resilient to TCPCacheServer restarts?
+ </para>
+ </question>
+
+ <answer>
+ <para>
+ As of JBoss Cache 2.1.0, the answer is yes. See the Users' Guide for details on how to configure
+ and
+ tune
+ your retries and wait period for reestablishing the TCP connection.
+ </para>
+ <para>
+ Prior to that, restarting the TCPCacheServer would also mean
+ restarting your application that uses the cache.
+ </para>
+ </answer>
+ </qandaentry>
+
+ </qandaset>
+ </chapter>
+ <chapter id="troubleshooting">
+ <title>Troubleshooting</title>
+ <qandaset>
+
+ <qandaentry>
+ <question>
+ <para>I am having problems getting JBoss Cache to work, where can I get information on
+ troubleshooting?
+ </para>
+ </question>
+ <answer>
+ <para>Troubleshooting section can be found in the following
+ <ulink url="http://www.jboss.org/community/docs/DOC-10288">wiki link</ulink>
+ .
+ </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+ </chapter>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Revision_History.xml"/>
+</book>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/Revision_History.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/Revision_History.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/Revision_History.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,26 @@
+<?xml version='1.0'?>
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+
+<appendix id="appe-Publican-Revision_History">
+ <title>Revision History</title>
+ <simpara>
+ <revhistory>
+ <revision>
+ <revnumber>1.0</revnumber>
+ <date></date>
+ <author>
+ <firstname></firstname>
+ <surname></surname>
+ <email></email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member></member>
+ </simplelist>
+ </revdescription>
+ </revision>
+ </revhistory>
+ </simpara>
+</appendix>
+
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/images/icon.svg
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/images/icon.svg (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_FAQ/en-US/images/icon.svg 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,3936 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:ns="http://ns.adobe.com/AdobeSVGViewerExtensions/3/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="32"
+ height="32"
+ id="svg3017"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ sodipodi:docname="book.svg"
+ sodipodi:docbase="/home/andy/Desktop">
+ <metadata
+ id="metadata489">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:window-height="480"
+ inkscape:window-width="858"
+ inkscape:pageshadow="0"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="1"
+ inkscape:cx="16"
+ inkscape:cy="15.944056"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:current-layer="svg3017" />
+ <defs
+ id="defs3019">
+ <linearGradient
+ id="linearGradient2381">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop2383" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="stop2385" />
+ </linearGradient>
+ <linearGradient
+ x1="415.73831"
+ y1="11.854"
+ x2="418.13361"
+ y2="18.8104"
+ id="XMLID_1758_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8362,0.5206,-1.1904,0.992,147.62,-30.9374)">
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="0"
+ id="stop3903" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop3905" />
+ <a:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="500.70749"
+ y1="-13.2441"
+ x2="513.46442"
+ y2="-2.1547"
+ id="XMLID_1757_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop3890" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop3892" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="XMLID_1755_">
+ <use
+ id="use3874"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_343_" />
+ </clipPath>
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop3877" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop3879" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop3881" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop3883" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="471.0806"
+ y1="201.07761"
+ x2="481.91711"
+ y2="210.4977"
+ id="XMLID_1754_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#6498c1;stop-opacity:1"
+ offset="0.005618"
+ id="stop3863" />
+ <stop
+ style="stop-color:#79a9cc;stop-opacity:1"
+ offset="0.2332"
+ id="stop3865" />
+ <stop
+ style="stop-color:#a4cde2;stop-opacity:1"
+ offset="0.74049997"
+ id="stop3867" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="1"
+ id="stop3869" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="5.618000e-003" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="0.4438" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="XMLID_1753_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop3851" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop3853" />
+ <a:midPointStop
+ style="stop-color:#B2B2B2"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B2B2B2"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="XMLID_1751_">
+ <use
+ id="use3837"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_338_" />
+ </clipPath>
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop3840" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop3842" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop3844" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop3846" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="468.2915"
+ y1="204.7612"
+ x2="479.39871"
+ y2="214.4166"
+ id="XMLID_1750_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop3830" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop3832" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop3818" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop3820" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="501.0903"
+ y1="-19.2544"
+ x2="531.85413"
+ y2="0.72390002"
+ id="XMLID_1748_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop3803" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop3805" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop3807" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop3809" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="XMLID_2275_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop9947" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop9949" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop9951" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop9953" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="XMLID_2273_">
+ <use
+ id="use9933"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_960_" />
+ </clipPath>
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="XMLID_2274_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop9936" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop9938" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop9940" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop9942" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="478.21341"
+ y1="-131.9297"
+ x2="469.85818"
+ y2="-140.28481"
+ id="XMLID_2272_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.5592,0.829,-0.829,0.5592,101.3357,-104.791)">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop9917" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop9919" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop9921" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop9923" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ style="overflow:visible"
+ id="TriangleInM">
+ <path
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
+ transform="scale(-0.4,-0.4)"
+ style="fill:#5c5c4f"
+ id="path3197" />
+ </marker>
+ <linearGradient
+ x1="200.7363"
+ y1="100.4028"
+ x2="211.99519"
+ y2="89.143997"
+ id="XMLID_3298_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#bfbfbf;stop-opacity:1"
+ offset="0"
+ id="stop20103" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop20105" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#BFBFBF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#BFBFBF" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F2F2F2" />
+ </linearGradient>
+ <linearGradient
+ x1="200.7363"
+ y1="100.4028"
+ x2="211.99519"
+ y2="89.143997"
+ id="linearGradient36592"
+ xlink:href="#XMLID_3298_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="181.2925"
+ y1="110.8481"
+ x2="192.6369"
+ y2="99.5037"
+ id="XMLID_3297_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="stop20096" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop20098" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="181.2925"
+ y1="110.8481"
+ x2="192.6369"
+ y2="99.5037"
+ id="linearGradient36595"
+ xlink:href="#XMLID_3297_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="211.77589"
+ y1="105.7749"
+ x2="212.6619"
+ y2="108.2092"
+ id="XMLID_3296_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#0f6124;stop-opacity:1"
+ offset="0"
+ id="stop20087" />
+ <stop
+ style="stop-color:#219630;stop-opacity:1"
+ offset="1"
+ id="stop20089" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#0F6124" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#0F6124" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#219630" />
+ </linearGradient>
+ <linearGradient
+ x1="211.77589"
+ y1="105.7749"
+ x2="212.6619"
+ y2="108.2092"
+ id="linearGradient36677"
+ xlink:href="#XMLID_3296_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="208.9834"
+ y1="116.8296"
+ x2="200.0811"
+ y2="96.834602"
+ id="XMLID_3295_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop20076" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.5"
+ id="stop20078" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop20080" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="208.9834"
+ y1="116.8296"
+ x2="200.0811"
+ y2="96.834602"
+ id="linearGradient36604"
+ xlink:href="#XMLID_3295_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="195.5264"
+ y1="97.911102"
+ x2="213.5213"
+ y2="115.9061"
+ id="XMLID_3294_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="0"
+ id="stop20069" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop20071" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="195.5264"
+ y1="97.911102"
+ x2="213.5213"
+ y2="115.9061"
+ id="linearGradient36607"
+ xlink:href="#XMLID_3294_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="186.1938"
+ y1="109.1343"
+ x2="206.6881"
+ y2="88.639999"
+ id="XMLID_3293_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop20056" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.16850001"
+ id="stop20058" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.23029999"
+ id="stop20060" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.2809"
+ id="stop20062" />
+ <stop
+ style="stop-color:#c2c2c2;stop-opacity:1"
+ offset="0.5"
+ id="stop20064" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.1685"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.2303"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.2809"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#C2C2C2" />
+ </linearGradient>
+ <linearGradient
+ x1="186.1938"
+ y1="109.1343"
+ x2="206.6881"
+ y2="88.639999"
+ id="linearGradient36610"
+ xlink:href="#XMLID_3293_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="184.8569"
+ y1="112.2676"
+ x2="211.94099"
+ y2="89.541397"
+ id="XMLID_3292_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop20043" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.16850001"
+ id="stop20045" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.23029999"
+ id="stop20047" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.2809"
+ id="stop20049" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop20051" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.1685"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.2303"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.2809"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="184.8569"
+ y1="112.2676"
+ x2="211.94099"
+ y2="89.541397"
+ id="linearGradient36613"
+ xlink:href="#XMLID_3292_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ style="overflow:visible"
+ id="TriangleOutM">
+ <path
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
+ transform="scale(0.4,0.4)"
+ style="fill:#5c5c4f;fill-rule:evenodd;stroke-width:1pt;marker-start:none"
+ id="path3238" />
+ </marker>
+ <linearGradient
+ x1="165.3"
+ y1="99.5"
+ x2="165.3"
+ y2="115.9"
+ id="XMLID_3457_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="0"
+ id="stop8309" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8311" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="1"
+ id="stop8313" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#999999" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#999999" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#B2B2B2" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#B2B2B2" />
+ </linearGradient>
+ <linearGradient
+ x1="165.3"
+ y1="99.5"
+ x2="165.3"
+ y2="115.9"
+ id="lg1997"
+ xlink:href="#XMLID_3457_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="175"
+ y1="99.800003"
+ x2="175"
+ y2="112.5"
+ id="XMLID_3456_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="0"
+ id="stop8300" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="0.60000002"
+ id="stop8302" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="1"
+ id="stop8304" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="0.6"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#191919" />
+ </linearGradient>
+ <linearGradient
+ x1="175"
+ y1="99.800003"
+ x2="175"
+ y2="112.5"
+ id="lg2000"
+ xlink:href="#XMLID_3456_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="168.8"
+ y1="107.1"
+ x2="164.5"
+ y2="110"
+ id="XMLID_3455_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="0"
+ id="stop8291" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="0.69999999"
+ id="stop8293" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="1"
+ id="stop8295" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.7"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#191919" />
+ </linearGradient>
+ <linearGradient
+ x1="168.8"
+ y1="107.1"
+ x2="164.5"
+ y2="110"
+ id="lg2003"
+ xlink:href="#XMLID_3455_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ id="lg63694">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop63696" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="stop63698" />
+ </linearGradient>
+ <linearGradient
+ x1="458"
+ y1="483"
+ x2="465.20001"
+ y2="271.39999"
+ id="lg2006"
+ xlink:href="#lg63694"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(6.3e-2,0,0,6.3e-2,-1.3,-9.8)" />
+ <linearGradient
+ x1="176.3"
+ y1="110.1"
+ x2="158.7"
+ y2="105"
+ id="XMLID_3453_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="0"
+ id="stop8271" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="0.2"
+ id="stop8273" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop8275" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.2"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="176.3"
+ y1="110.1"
+ x2="158.7"
+ y2="105"
+ id="lg2009"
+ xlink:href="#XMLID_3453_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="173.60001"
+ y1="118.9"
+ x2="172.8"
+ y2="128.2"
+ id="XMLID_3449_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8232" />
+ <stop
+ style="stop-color:#fff95e;stop-opacity:1"
+ offset="0.60000002"
+ id="stop8234" />
+ <stop
+ style="stop-color:#ecd600;stop-opacity:1"
+ offset="1"
+ id="stop8236" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.6"
+ style="stop-color:#FFF95E" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFF95E" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#ECD600" />
+ </linearGradient>
+ <linearGradient
+ x1="173.60001"
+ y1="118.9"
+ x2="172.8"
+ y2="128.2"
+ id="lg2016"
+ xlink:href="#XMLID_3449_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <radialGradient
+ cx="284.60001"
+ cy="172.60001"
+ r="6.5"
+ fx="284.60001"
+ fy="172.60001"
+ id="XMLID_3448_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4,0,0,1.4,-237.3,-126.8)">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8219" />
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8221" />
+ <stop
+ style="stop-color:#c96b00;stop-opacity:1"
+ offset="0.89999998"
+ id="stop8223" />
+ <stop
+ style="stop-color:#9a5500;stop-opacity:1"
+ offset="1"
+ id="stop8225" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.9"
+ style="stop-color:#C96B00" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#C96B00" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#9A5500" />
+ </radialGradient>
+ <radialGradient
+ cx="284.60001"
+ cy="172.60001"
+ r="6.5"
+ fx="284.60001"
+ fy="172.60001"
+ id="rg2020"
+ xlink:href="#XMLID_3448_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.513992,0,0,2.347576,-689.1621,-378.5717)" />
+ <linearGradient
+ x1="158.10001"
+ y1="123"
+ x2="164.2"
+ y2="126.6"
+ id="XMLID_3447_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecd600;stop-opacity:1"
+ offset="0"
+ id="stop8204" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8206" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop8208" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECD600" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECD600" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="158.10001"
+ y1="123"
+ x2="164.2"
+ y2="126.6"
+ id="lg2026"
+ xlink:href="#XMLID_3447_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <radialGradient
+ cx="280.89999"
+ cy="163.7"
+ r="10.1"
+ fx="280.89999"
+ fy="163.7"
+ id="XMLID_3446_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4,0,0,1.4,-237.3,-126.8)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop8197" />
+ <stop
+ style="stop-color:#fff95e;stop-opacity:1"
+ offset="1"
+ id="stop8199" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#FFFFFF" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#FFF95E" />
+ </radialGradient>
+ <radialGradient
+ cx="280.89999"
+ cy="163.7"
+ r="10.1"
+ fx="280.89999"
+ fy="163.7"
+ id="rg2029"
+ xlink:href="#XMLID_3446_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.7,0,0,1.7,-457.5,-266.8)" />
+ <linearGradient
+ x1="156.5"
+ y1="122.7"
+ x2="180.10001"
+ y2="122.7"
+ id="XMLID_3445_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8184" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.2"
+ id="stop8186" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8188" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.40000001"
+ id="stop8190" />
+ <stop
+ style="stop-color:#d68100;stop-opacity:1"
+ offset="1"
+ id="stop8192" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.2"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.4"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#D68100" />
+ </linearGradient>
+ <linearGradient
+ x1="156.5"
+ y1="122.7"
+ x2="180.10001"
+ y2="122.7"
+ id="lg2032"
+ xlink:href="#XMLID_3445_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="156.39999"
+ y1="115.4"
+ x2="180.10001"
+ y2="115.4"
+ id="XMLID_3444_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8171" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.2"
+ id="stop8173" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8175" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.40000001"
+ id="stop8177" />
+ <stop
+ style="stop-color:#d68100;stop-opacity:1"
+ offset="1"
+ id="stop8179" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.2"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.4"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#D68100" />
+ </linearGradient>
+ <linearGradient
+ x1="156.39999"
+ y1="115.4"
+ x2="180.10001"
+ y2="115.4"
+ id="lg2035"
+ xlink:href="#XMLID_3444_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="379.70001"
+ y1="167.89999"
+ x2="383.89999"
+ y2="172.89999"
+ id="lg4286_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s16159" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.1"
+ id="s16161" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="1"
+ id="s16163" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.1" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#737373"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="379.60001"
+ y1="167.8"
+ x2="383.79999"
+ y2="172"
+ id="lg6416"
+ xlink:href="#lg4286_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.622156,0.623859,-0.623859,2.62182,-882.9706,-673.7921)" />
+ <linearGradient
+ x1="384.20001"
+ y1="169.8"
+ x2="384.79999"
+ y2="170.39999"
+ id="lg4285_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="0"
+ id="s16152" />
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="1"
+ id="s16154" />
+ <ns:midPointStop
+ style="stop-color:#737373"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#737373"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#D9D9D9"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="384.20001"
+ y1="169.8"
+ x2="384.79999"
+ y2="170.39999"
+ id="lg6453"
+ xlink:href="#lg4285_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6,0.6,-0.6,2.6,-883,-673.8)" />
+ <linearGradient
+ x1="380.5"
+ y1="172.60001"
+ x2="382.79999"
+ y2="173.7"
+ id="lg4284_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
+ <stop
+ style="stop-color:gray;stop-opacity:1"
+ offset="0"
+ id="s16145" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="1"
+ id="s16147" />
+ <ns:midPointStop
+ style="stop-color:#808080"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#808080"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#E5E5E5"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="380.5"
+ y1="172.60001"
+ x2="382.79999"
+ y2="173.7"
+ id="lg6456"
+ xlink:href="#lg4284_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6,0.6,-0.6,2.6,-883,-673.8)" />
+ <radialGradient
+ cx="347.29999"
+ cy="244.5"
+ r="5.1999998"
+ fx="347.29999"
+ fy="244.5"
+ id="lg4282_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
+ <stop
+ style="stop-color:#333;stop-opacity:1"
+ offset="0"
+ id="s16135" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="s16137" />
+ <ns:midPointStop
+ style="stop-color:#333333"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#333333"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#999999"
+ offset="1" />
+ </radialGradient>
+ <linearGradient
+ x1="310.39999"
+ y1="397.70001"
+ x2="310.89999"
+ y2="399.5"
+ id="lg4280_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="0"
+ id="s16111" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.60000002"
+ id="s16113" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="1"
+ id="s16115" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.6" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="310.39999"
+ y1="397.70001"
+ x2="310.89999"
+ y2="399.5"
+ id="lg6467"
+ xlink:href="#lg4280_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
+ <linearGradient
+ x1="310.89999"
+ y1="395.79999"
+ x2="313.29999"
+ y2="403.10001"
+ id="lg4279_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0"
+ id="s16100" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.40000001"
+ id="s16102" />
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="0.89999998"
+ id="s16104" />
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="1"
+ id="s16106" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.4" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0.9" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="310.89999"
+ y1="395.79999"
+ x2="313.29999"
+ y2="403.10001"
+ id="lg6465"
+ xlink:href="#lg4279_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
+ <linearGradient
+ x1="307.79999"
+ y1="395.20001"
+ x2="313.79999"
+ y2="413.60001"
+ id="lg4278_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0"
+ id="s16091" />
+ <stop
+ style="stop-color:#fcd72f;stop-opacity:1"
+ offset="0.40000001"
+ id="s16093" />
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="1"
+ id="s16095" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FCD72F"
+ offset="0.4" />
+ <ns:midPointStop
+ style="stop-color:#FCD72F"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="306.5"
+ y1="393"
+ x2="309"
+ y2="404"
+ id="lg6400"
+ xlink:href="#lg4278_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
+ <linearGradient
+ x1="352.10001"
+ y1="253.60001"
+ x2="348.5"
+ y2="237.8"
+ id="lg4276_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
+ <stop
+ style="stop-color:#ffff87;stop-opacity:1"
+ offset="0"
+ id="s16077" />
+ <stop
+ style="stop-color:#ffad00;stop-opacity:1"
+ offset="1"
+ id="s16079" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFAD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="335.60001"
+ y1="354.79999"
+ x2="337.89999"
+ y2="354.79999"
+ id="lg4275_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="s16057" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.80000001"
+ id="s16059" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="s16061" />
+ <ns:midPointStop
+ style="stop-color:#D9D9D9"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#D9D9D9"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.8" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="335.60001"
+ y1="354.79999"
+ x2="337.89999"
+ y2="354.79999"
+ id="lg6463"
+ xlink:href="#lg4275_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
+ <linearGradient
+ x1="337.39999"
+ y1="353.10001"
+ x2="339.39999"
+ y2="357.10001"
+ id="lg4274_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s16048" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.1"
+ id="s16050" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s16052" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.1" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="337.39999"
+ y1="353.10001"
+ x2="339.39999"
+ y2="357.10001"
+ id="lg6461"
+ xlink:href="#lg4274_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
+ <linearGradient
+ x1="334.39999"
+ y1="355.5"
+ x2="335.5"
+ y2="356.79999"
+ id="lg4273_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s16041" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s16043" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="5.6e-003" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="334.39999"
+ y1="355.5"
+ x2="335.5"
+ y2="356.79999"
+ id="lg6381"
+ xlink:href="#lg4273_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
+ <linearGradient
+ x1="348.39999"
+ y1="247.39999"
+ x2="354.10001"
+ y2="242"
+ id="lg4271_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0"
+ id="s16025" />
+ <stop
+ style="stop-color:#9e9e9e;stop-opacity:1"
+ offset="0.40000001"
+ id="s16027" />
+ <stop
+ style="stop-color:black;stop-opacity:1"
+ offset="1"
+ id="s16029" />
+ <ns:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="351.29999"
+ y1="257.29999"
+ x2="346.29999"
+ y2="235.5"
+ id="lg4270_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ffff87;stop-opacity:1"
+ offset="0"
+ id="s16007" />
+ <stop
+ style="stop-color:#ffad00;stop-opacity:1"
+ offset="1"
+ id="s16009" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFAD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="351.29999"
+ y1="257.29999"
+ x2="346.29999"
+ y2="235.5"
+ id="lg6459"
+ xlink:href="#lg4270_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)" />
+ <linearGradient
+ x1="43.799999"
+ y1="32.5"
+ x2="63.299999"
+ y2="66.400002"
+ id="XMLID_2708_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop75318" />
+ <stop
+ style="stop-color:#fffcea;stop-opacity:1"
+ offset="1"
+ id="stop75320" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#FFFCEA"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="43.799999"
+ y1="32.5"
+ x2="63.299999"
+ y2="66.400002"
+ id="lg1907"
+ xlink:href="#XMLID_2708_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)" />
+ <linearGradient
+ x1="52.5"
+ y1="40.400002"
+ x2="58.200001"
+ y2="64"
+ id="XMLID_2707_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ffdea0;stop-opacity:1"
+ offset="0"
+ id="stop75305" />
+ <stop
+ style="stop-color:#ffd89e;stop-opacity:1"
+ offset="0.30000001"
+ id="stop75307" />
+ <stop
+ style="stop-color:#ffd79e;stop-opacity:1"
+ offset="0.30000001"
+ id="stop75309" />
+ <stop
+ style="stop-color:#dbaf6d;stop-opacity:1"
+ offset="0.69999999"
+ id="stop75311" />
+ <stop
+ style="stop-color:#6f4c24;stop-opacity:1"
+ offset="1"
+ id="stop75313" />
+ <a:midPointStop
+ style="stop-color:#FFDEA0"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFDEA0"
+ offset="0.6" />
+ <a:midPointStop
+ style="stop-color:#FFD79E"
+ offset="0.3" />
+ <a:midPointStop
+ style="stop-color:#FFD79E"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#DBAF6D"
+ offset="0.7" />
+ <a:midPointStop
+ style="stop-color:#DBAF6D"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#6F4C24"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="52.5"
+ y1="40.400002"
+ x2="58.200001"
+ y2="64"
+ id="lg1910"
+ xlink:href="#XMLID_2707_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)" />
+ <linearGradient
+ x1="58"
+ y1="73.199997"
+ x2="44.5"
+ y2="19"
+ id="XMLID_2704_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)">
+ <stop
+ style="stop-color:#d4a96c;stop-opacity:1"
+ offset="0.5"
+ id="stop75284" />
+ <stop
+ style="stop-color:#dcb273;stop-opacity:1"
+ offset="0.60000002"
+ id="stop75286" />
+ <stop
+ style="stop-color:#f0ca87;stop-opacity:1"
+ offset="0.80000001"
+ id="stop75288" />
+ <stop
+ style="stop-color:#ffdc96;stop-opacity:1"
+ offset="0.69999999"
+ id="stop75290" />
+ <stop
+ style="stop-color:#c18a42;stop-opacity:1"
+ offset="1"
+ id="stop75292" />
+ <a:midPointStop
+ style="stop-color:#D4A96C"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#D4A96C"
+ offset="0.6" />
+ <a:midPointStop
+ style="stop-color:#FFDC96"
+ offset="0.7" />
+ <a:midPointStop
+ style="stop-color:#FFDC96"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#C18A42"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="53.700001"
+ y1="32"
+ x2="53.700001"
+ y2="64.599998"
+ id="XMLID_2703_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e5c9b0;stop-opacity:1"
+ offset="0"
+ id="stop75268" />
+ <stop
+ style="stop-color:#e5c9b0;stop-opacity:1"
+ offset="0.40000001"
+ id="stop75270" />
+ <stop
+ style="stop-color:#c0aa94;stop-opacity:1"
+ offset="1"
+ id="stop75272" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0.4" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#C0AA94"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="53.700001"
+ y1="32"
+ x2="53.700001"
+ y2="64.599998"
+ id="lg1916"
+ xlink:href="#XMLID_2703_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)" />
+ <linearGradient
+ x1="224.31"
+ y1="19.450001"
+ x2="214.33"
+ y2="11.46"
+ id="XMLID_419_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#404040;stop-opacity:1"
+ offset="0"
+ id="s1903" />
+ <stop
+ style="stop-color:#6d6d6d;stop-opacity:1"
+ offset="0.33000001"
+ id="s1905" />
+ <stop
+ style="stop-color:#e9e9e9;stop-opacity:1"
+ offset="1"
+ id="s1907" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#404040" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#404040" />
+ <a:midPointStop
+ offset="0.33"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E9E9E9" />
+ </linearGradient>
+ <linearGradient
+ x1="221.84"
+ y1="32.779999"
+ x2="212.2"
+ y2="20.27"
+ id="lg1988"
+ xlink:href="#XMLID_419_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
+ <linearGradient
+ x1="228.35001"
+ y1="33.279999"
+ x2="215.42999"
+ y2="33.279999"
+ id="lg1900"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s1902" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="s1906" />
+ <a:midPointStop
+ style="stop-color:#575757"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#575757"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#6D6D6D"
+ offset="0.33" />
+ <a:midPointStop
+ style="stop-color:#6D6D6D"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#D3D3D3"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="234.81"
+ y1="33.279999"
+ x2="228.27"
+ y2="33.279999"
+ id="lg1908"
+ xlink:href="#lg1900"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
+ <linearGradient
+ x1="228.35001"
+ y1="33.279999"
+ x2="215.42999"
+ y2="33.279999"
+ id="XMLID_416_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#575757;stop-opacity:1"
+ offset="0"
+ id="s1874" />
+ <stop
+ style="stop-color:#6d6d6d;stop-opacity:1"
+ offset="0.33000001"
+ id="s1876" />
+ <stop
+ style="stop-color:#d3d3d3;stop-opacity:1"
+ offset="1"
+ id="s1878" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#575757" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#575757" />
+ <a:midPointStop
+ offset="0.33"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#D3D3D3" />
+ </linearGradient>
+ <linearGradient
+ x1="228.35001"
+ y1="33.279999"
+ x2="215.42999"
+ y2="33.279999"
+ id="lg1991"
+ xlink:href="#XMLID_416_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
+ <radialGradient
+ cx="603.19"
+ cy="230.77"
+ r="1.67"
+ fx="603.19"
+ fy="230.77"
+ id="x5010_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1,0,0,1.1,-54.33,-75.4)">
+ <stop
+ style="stop-color:#c9ffc9;stop-opacity:1"
+ offset="0"
+ id="stop29201" />
+ <stop
+ style="stop-color:#23a11f;stop-opacity:1"
+ offset="1"
+ id="stop29203" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#C9FFC9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#C9FFC9" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#23A11F" />
+ </radialGradient>
+ <radialGradient
+ cx="603.19"
+ cy="230.77"
+ r="1.67"
+ fx="603.19"
+ fy="230.77"
+ id="radialGradient5711"
+ xlink:href="#x5010_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23,0,0,1.23,-709.93,-245.02)" />
+ <linearGradient
+ x1="592.31"
+ y1="162.60001"
+ x2="609.32001"
+ y2="145.59"
+ id="lg5722"
+ xlink:href="#x5003_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="601.48999"
+ y1="170.16"
+ x2="613.84003"
+ y2="170.16"
+ id="x5002_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop29134" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.2"
+ id="stop29136" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="stop29138" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.20"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#999999" />
+ </linearGradient>
+ <linearGradient
+ x1="601.48999"
+ y1="170.16"
+ x2="613.84003"
+ y2="170.16"
+ id="lg5725"
+ xlink:href="#x5002_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.23"
+ id="x5004_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop29157" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop29159" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.23"
+ id="lg5728"
+ xlink:href="#x5004_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="592.31"
+ y1="162.60001"
+ x2="609.32001"
+ y2="145.59"
+ id="x5003_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0"
+ id="stop29143" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="1"
+ id="stop29145" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E5E5E5" />
+ </linearGradient>
+ <linearGradient
+ x1="592.31"
+ y1="162.60001"
+ x2="609.32001"
+ y2="145.59"
+ id="lg5732"
+ xlink:href="#x5003_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.24001"
+ id="x5000_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop29124" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop29126" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.24001"
+ id="lg5735"
+ xlink:href="#x5000_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="308.54999"
+ y1="149.89999"
+ x2="299.72"
+ y2="148.83"
+ id="XMLID_2433_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d6d6d6;stop-opacity:1"
+ offset="0"
+ id="71615" />
+ <stop
+ style="stop-color:#a5a5a5;stop-opacity:1"
+ offset="1"
+ id="71617" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D6D6D6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D6D6D6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#A5A5A5" />
+ </linearGradient>
+ <linearGradient
+ x1="308.54999"
+ y1="149.89999"
+ x2="299.72"
+ y2="148.83"
+ id="lg1952"
+ xlink:href="#XMLID_2433_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
+ <radialGradient
+ cx="307.39999"
+ cy="121"
+ r="23.35"
+ fx="307.39999"
+ fy="121"
+ id="XMLID_2432_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.98,0,0,0.98,2.88,2.75)">
+ <stop
+ style="stop-color:#d2d2d2;stop-opacity:1"
+ offset="0.19"
+ id="71592" />
+ <stop
+ style="stop-color:#cfcfcf;stop-opacity:1"
+ offset="0.44999999"
+ id="71594" />
+ <stop
+ style="stop-color:#c7c7c7;stop-opacity:1"
+ offset="0.60000002"
+ id="71596" />
+ <stop
+ style="stop-color:#b9b9b9;stop-opacity:1"
+ offset="0.74000001"
+ id="71598" />
+ <stop
+ style="stop-color:#a4a4a4;stop-opacity:1"
+ offset="0.86000001"
+ id="71600" />
+ <stop
+ style="stop-color:#8a8a8a;stop-opacity:1"
+ offset="0.95999998"
+ id="71602" />
+ <stop
+ style="stop-color:gray;stop-opacity:1"
+ offset="1"
+ id="71604" />
+ <a:midPointStop
+ offset="0.19"
+ style="stop-color:#D2D2D2" />
+ <a:midPointStop
+ offset="0.8"
+ style="stop-color:#D2D2D2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#808080" />
+ </radialGradient>
+ <radialGradient
+ cx="307.39999"
+ cy="121"
+ r="23.35"
+ fx="307.39999"
+ fy="121"
+ id="radialGradient2331"
+ xlink:href="#XMLID_2432_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-276.62,-121.54)" />
+ <linearGradient
+ x1="294.13"
+ y1="127.07"
+ x2="294.13"
+ y2="142.2"
+ id="XMLID_2430_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b5d8ff;stop-opacity:1"
+ offset="0"
+ id="71582" />
+ <stop
+ style="stop-color:black;stop-opacity:1"
+ offset="1"
+ id="71584" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B5D8FF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B5D8FF" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000" />
+ </linearGradient>
+ <linearGradient
+ x1="294.13"
+ y1="127.07"
+ x2="294.13"
+ y2="142.2"
+ id="lg2820"
+ xlink:href="#XMLID_2430_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
+ <linearGradient
+ x1="279.10999"
+ y1="148.03"
+ x2="309.16"
+ y2="148.03"
+ id="XMLID_2429_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e1e1e1;stop-opacity:1"
+ offset="0"
+ id="71564" />
+ <stop
+ style="stop-color:#e1e1e1;stop-opacity:1"
+ offset="0.25"
+ id="71566" />
+ <stop
+ style="stop-color:#a5a5a5;stop-opacity:1"
+ offset="0.44"
+ id="71568" />
+ <stop
+ style="stop-color:#a5a5a5;stop-opacity:1"
+ offset="1"
+ id="71570" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.25"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.44"
+ style="stop-color:#A5A5A5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A5A5A5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#A5A5A5" />
+ </linearGradient>
+ <linearGradient
+ x1="279.10999"
+ y1="148.03"
+ x2="309.16"
+ y2="148.03"
+ id="lg2818"
+ xlink:href="#XMLID_2429_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
+ <radialGradient
+ cx="622.34302"
+ cy="14.449"
+ r="26.496"
+ fx="622.34302"
+ fy="14.449"
+ id="lg3499_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.851,0,0,0.849,69.297,51.658)">
+ <stop
+ style="stop-color:#23468e;stop-opacity:1"
+ offset="0"
+ id="stop10972" />
+ <stop
+ style="stop-color:#012859;stop-opacity:1"
+ offset="1"
+ id="stop10974" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#23468E" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#23468E" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#012859" />
+ </radialGradient>
+ <radialGradient
+ cx="622.34302"
+ cy="14.449"
+ r="26.496"
+ fx="622.34302"
+ fy="14.449"
+ id="rg5791"
+ xlink:href="#lg3499_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.858,0,0,0.857,-511.7,9.02)" />
+ <linearGradient
+ x1="616.112"
+ y1="76.247002"
+ x2="588.14099"
+ y2="60.742001"
+ id="lg3497_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#01326e;stop-opacity:1"
+ offset="0"
+ id="stop10962" />
+ <stop
+ style="stop-color:#012859;stop-opacity:1"
+ offset="1"
+ id="stop10964" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#01326E" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#01326E" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#012859" />
+ </linearGradient>
+ <linearGradient
+ x1="617.698"
+ y1="82.445999"
+ x2="585.95203"
+ y2="54.848999"
+ id="lg3496_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="stop10950" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop10952" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="617.698"
+ y1="82.445999"
+ x2="585.95203"
+ y2="54.848999"
+ id="lg5794"
+ xlink:href="#lg3496_"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="601.39001"
+ y1="55.341"
+ x2="588.29199"
+ y2="71.515999"
+ id="lg3495_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop10941" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.52200001"
+ id="stop10943" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop10945" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.522"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="601.39001"
+ y1="55.341"
+ x2="588.29199"
+ y2="71.515999"
+ id="lg5771"
+ xlink:href="#lg3495_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.009,0,0,1.009,-581.615,-43.098)" />
+ <linearGradient
+ x1="611.34601"
+ y1="55.279999"
+ x2="590.39001"
+ y2="81.157997"
+ id="lg3494_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop10932" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.52200001"
+ id="stop10934" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop10936" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.522"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="611.34601"
+ y1="55.279999"
+ x2="590.39001"
+ y2="81.157997"
+ id="lg5774"
+ xlink:href="#lg3494_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.009,0,0,1.009,-581.616,-43.098)" />
+ <linearGradient
+ x1="798.72998"
+ y1="69.839996"
+ x2="799.04999"
+ y2="70.709999"
+ id="g3302_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#005e00;stop-opacity:1"
+ offset="0"
+ id="s6504" />
+ <stop
+ style="stop-color:#23a11f;stop-opacity:1"
+ offset="1"
+ id="s6506" />
+ <a:midPointstop
+ style="stop-color:#005E00"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#005E00"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#23A11F"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="798.72998"
+ y1="69.839996"
+ x2="799.04999"
+ y2="70.709999"
+ id="lg5851"
+ xlink:href="#g3302_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
+ <linearGradient
+ x1="779.19"
+ y1="122.73"
+ x2="811.69"
+ y2="149.74001"
+ id="g3301_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,129.19)">
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0"
+ id="s6483" />
+ <stop
+ style="stop-color:#eee;stop-opacity:1"
+ offset="0.17"
+ id="s6485" />
+ <stop
+ style="stop-color:#e3e3e3;stop-opacity:1"
+ offset="0.34"
+ id="s6487" />
+ <stop
+ style="stop-color:#cfcfcf;stop-opacity:1"
+ offset="0.50999999"
+ id="s6489" />
+ <stop
+ style="stop-color:#b4b4b4;stop-opacity:1"
+ offset="0.67000002"
+ id="s6491" />
+ <stop
+ style="stop-color:#919191;stop-opacity:1"
+ offset="0.83999997"
+ id="s6493" />
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="1"
+ id="s6495" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.71" />
+ <a:midPointstop
+ style="stop-color:#666666"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="779.19"
+ y1="122.73"
+ x2="811.69"
+ y2="149.74001"
+ id="lg5855"
+ xlink:href="#g3301_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,-0.316,0,1.263,-926.036,103.123)" />
+ <clipPath
+ id="g3299_">
+ <use
+ id="use6469"
+ x="0"
+ y="0"
+ width="1005.92"
+ height="376.97"
+ xlink:href="#g101_" />
+ </clipPath>
+ <radialGradient
+ cx="1189.9301"
+ cy="100.05"
+ r="40.400002"
+ fx="1189.9301"
+ fy="100.05"
+ id="g3300_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.34,-8.46e-2,0,0.34,394.16,137.13)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s6472" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="s6474" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#000000"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1199.74"
+ cy="97.150002"
+ r="40.400002"
+ fx="1199.74"
+ fy="97.150002"
+ id="rg5860"
+ xlink:href="#g3300_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.409,-0.107,0,0.429,-451.489,113.149)" />
+ <linearGradient
+ x1="796.38"
+ y1="67.580002"
+ x2="781.28003"
+ y2="58.549999"
+ id="g3298_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#4c8bca;stop-opacity:1"
+ offset="0"
+ id="s6462" />
+ <stop
+ style="stop-color:#b7e9ff;stop-opacity:1"
+ offset="1"
+ id="s6464" />
+ <a:midPointstop
+ style="stop-color:#4C8BCA"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#4C8BCA"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B7E9FF"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="800.97998"
+ y1="140.72"
+ x2="777.71997"
+ y2="121.76"
+ id="g3297_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,129.19)">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="s6448" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s6450" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="800.97998"
+ y1="140.72"
+ x2="777.71997"
+ y2="121.76"
+ id="lg5890"
+ xlink:href="#g3297_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,129.19)" />
+ <linearGradient
+ x1="790.03998"
+ y1="-16.33"
+ x2="779.84003"
+ y2="-3.73"
+ id="g3296_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,70.17)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="s6439" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.51999998"
+ id="s6441" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s6443" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.52" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="790.03998"
+ y1="-16.33"
+ x2="779.84003"
+ y2="-3.73"
+ id="lg5866"
+ xlink:href="#g3296_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,28.6)" />
+ <linearGradient
+ x1="785.84003"
+ y1="72.989998"
+ x2="785.26001"
+ y2="76.279999"
+ id="g3293_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s6412" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="1"
+ id="s6414" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#737373"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="785.84003"
+ y1="72.989998"
+ x2="785.26001"
+ y2="76.279999"
+ id="lg5871"
+ xlink:href="#g3293_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
+ <linearGradient
+ x1="789.37"
+ y1="69.879997"
+ x2="791.03998"
+ y2="77.120003"
+ id="g3292_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="0"
+ id="s6403" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.28"
+ id="s6405" />
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="1"
+ id="s6407" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.28" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#666666"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="789.37"
+ y1="69.879997"
+ x2="791.03998"
+ y2="77.120003"
+ id="lg5874"
+ xlink:href="#g3292_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
+ <linearGradient
+ x1="786.65997"
+ y1="136.12"
+ x2="786.71002"
+ y2="134.33"
+ id="g3290_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,137.29)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="s6380" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="1"
+ id="s6382" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="786.65997"
+ y1="136.12"
+ x2="786.71002"
+ y2="134.33"
+ id="lg5878"
+ xlink:href="#g3290_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,-0.316,0,1.263,-926.036,113.351)" />
+ <radialGradient
+ cx="1458.77"
+ cy="-5.0999999"
+ r="35.130001"
+ fx="1458.77"
+ fy="-5.0999999"
+ id="g3289_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.42,0,0,0.42,167.09,79.84)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s6371" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="s6373" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1458.77"
+ cy="-5.0999999"
+ r="35.130001"
+ fx="1458.77"
+ fy="-5.0999999"
+ id="rg5881"
+ xlink:href="#g3289_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.505,0,0,0.53,-724.957,40.636)" />
+ <radialGradient
+ cx="1612.98"
+ cy="-4.4699998"
+ r="36.580002"
+ fx="1612.98"
+ fy="-4.4699998"
+ id="g3288_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.34,0,0,0.36,238.56,86.87)">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="s6362" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0.63999999"
+ id="s6364" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="1"
+ id="s6366" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.64" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#737373"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1612.98"
+ cy="-4.4699998"
+ r="36.580002"
+ fx="1612.98"
+ fy="-4.4699998"
+ id="rg5884"
+ xlink:href="#g3288_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.408,0,0,0.448,-638.943,49.495)" />
+ <radialGradient
+ cx="1470.5"
+ cy="-10.21"
+ r="33.290001"
+ fx="1470.5"
+ fy="-10.21"
+ id="g3287_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.42,0,0,0.42,167.09,79.84)">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="s6347" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0.38999999"
+ id="s6349" />
+ <stop
+ style="stop-color:#b1b1b1;stop-opacity:1"
+ offset="0.75"
+ id="s6351" />
+ <stop
+ style="stop-color:#aaa;stop-opacity:1"
+ offset="0.88"
+ id="s6353" />
+ <stop
+ style="stop-color:#9e9e9e;stop-opacity:1"
+ offset="0.97000003"
+ id="s6355" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="s6357" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.39" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.87" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1470.5"
+ cy="-10.21"
+ r="33.290001"
+ fx="1470.5"
+ fy="-10.21"
+ id="rg5887"
+ xlink:href="#g3287_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.505,0,0,0.53,-724.957,40.636)" />
+ <pattern
+ patternTransform="matrix(0.592927,0,0,0.592927,78,462)"
+ id="cream-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-365.3146,-513.505)"
+ id="g3047">
+ id="path2858" />
+ <path
+ inkscape:label="#path2854"
+ sodipodi:nodetypes="czzzz"
+ style="fill:#e3dcc0"
+ id="path3060"
+ d="M 390.31462,529.50504 C 390.31462,534.47304 386.28262,538.50504 381.31462,538.50504 C 376.34662,538.50504 372.31462,534.47304 372.31462,529.50504 C 372.31462,524.53704 376.34662,520.50504 381.31462,520.50504 C 386.28262,520.50504 390.31462,524.53704 390.31462,529.50504 z " />
+</g>
+ </pattern>
+ <pattern
+ patternTransform="matrix(0.733751,0,0,0.733751,67,367)"
+ id="dark-cream-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-408.0946,-513.505)"
+ id="dark-cream-spot"
+ inkscape:label="#g3043">
+ <path
+ sodipodi:nodetypes="czzzz"
+ style="fill:#c8c5ac"
+ d="M 433.09458,529.50504 C 433.09458,534.47304 429.06258,538.50504 424.09458,538.50504 C 419.12658,538.50504 415.09458,534.47304 415.09458,529.50504 C 415.09458,524.53704 419.12658,520.50504 424.09458,520.50504 C 429.06258,520.50504 433.09458,524.53704 433.09458,529.50504 z "
+ id="path2953" />
+ </g>
+ </pattern>
+ <pattern
+ patternTransform="matrix(0.375,0,0,0.375,379,400)"
+ id="white-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-484.3997,-513.505)"
+ id="white-spot"
+ inkscape:label="#g3035">
+ <path
+ style="opacity:0.25;fill:white"
+ id="path3033"
+ d="M 509.39967,529.50504 C 509.39967,534.47304 505.36767,538.50504 500.39967,538.50504 C 495.43167,538.50504 491.39967,534.47304 491.39967,529.50504 C 491.39967,524.53704 495.43167,520.50504 500.39967,520.50504 C 505.36767,520.50504 509.39967,524.53704 509.39967,529.50504 z "
+ sodipodi:nodetypes="czzzz" />
+ </g>
+ </pattern>
+ <pattern
+ patternTransform="matrix(0.455007,0,0,0.455007,-5e-5,1.9e-5)"
+ id="black-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-448.3997,-513.505)"
+ id="black-spot"
+ inkscape:label="#g3039">
+ <path
+ sodipodi:nodetypes="czzzz"
+ d="M 473.39967,529.50504 C 473.39967,534.47304 469.36767,538.50504 464.39967,538.50504 C 459.43167,538.50504 455.39967,534.47304 455.39967,529.50504 C 455.39967,524.53704 459.43167,520.50504 464.39967,520.50504 C 469.36767,520.50504 473.39967,524.53704 473.39967,529.50504 z "
+ id="path2961"
+ style="opacity:0.25;fill:black" />
+ </g>
+ </pattern>
+ <linearGradient
+ x1="501.0903"
+ y1="-19.2544"
+ x2="531.85413"
+ y2="0.72390002"
+ id="linearGradient17334"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop17336" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop17338" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop17340" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop17342" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.5112"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.6461"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#16336E" />
+ </linearGradient>
+ <linearGradient
+ x1="415.73831"
+ y1="11.854"
+ x2="418.13361"
+ y2="18.8104"
+ id="linearGradient17426"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8362,0.5206,-1.1904,0.992,147.62,-30.9374)">
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="0"
+ id="stop17428" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop17430" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F2F2F2" />
+ </linearGradient>
+ <linearGradient
+ x1="478.21341"
+ y1="-131.9297"
+ x2="469.85818"
+ y2="-140.28481"
+ id="linearGradient17434"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.5592,0.829,-0.829,0.5592,101.3357,-104.791)">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop17436" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop17438" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop17440" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop17442" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F3403F" />
+ <a:midPointStop
+ offset="0.4213"
+ style="stop-color:#F3403F" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#A6100C" />
+ </linearGradient>
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17709"
+ xlink:href="#XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)" />
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17711"
+ xlink:href="#XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="linearGradient17713"
+ xlink:href="#XMLID_1753_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17715"
+ xlink:href="#XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="500.70749"
+ y1="-13.2441"
+ x2="513.46442"
+ y2="-2.1547"
+ id="linearGradient17717"
+ xlink:href="#XMLID_1757_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="linearGradient17721"
+ xlink:href="#XMLID_2274_"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="linearGradient17723"
+ xlink:href="#XMLID_2275_"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="500.70749"
+ y1="-13.2441"
+ x2="513.46442"
+ y2="-2.1547"
+ id="linearGradient17416"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop17418" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop17420" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <defs
+ id="defs9929">
+ <path
+ d="M 489.21,209.35 L 485.35,203.63 C 483.63,204.25 473.47,208.93 471.5,210.18 C 470.57,210.77 470.17,211.16 469.72,212.48 C 470.93,212.31 471.72,212.49 473.42,213.04 C 473.26,214.77 473.24,215.74 473.57,218.2 C 474.01,216.88 474.41,216.49 475.34,215.9 C 477.33,214.65 487.49,209.97 489.21,209.35 z "
+ id="XMLID_960_" />
+ </defs>
+ <clipPath
+ id="clipPath17448">
+ <use
+ id="use17450"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_960_" />
+ </clipPath>
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="linearGradient17452"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop17454" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop17456" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop17458" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop17460" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="linearGradient17463"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop17465" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop17467" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop17469" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop17471" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="linearGradient17807"
+ xlink:href="#XMLID_2275_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-177.1654,35.43307)" />
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="linearGradient17810"
+ xlink:href="#XMLID_2274_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-177.1654,35.43307)" />
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17812"
+ xlink:href="#XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)" />
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17814"
+ xlink:href="#XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="linearGradient17816"
+ xlink:href="#XMLID_1753_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17818"
+ xlink:href="#XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17347"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop17349" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop17351" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#96BAD6" />
+ </linearGradient>
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="linearGradient17379"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop17381" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop17383" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F2F2F2" />
+ </linearGradient>
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17862"
+ xlink:href="#XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,-166.1427,-0.18283)" />
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17864"
+ xlink:href="#XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <defs
+ id="defs3859">
+ <polygon
+ points="465.54,213.52 481.94,217.46 482.74,216.71 487.46,198.05 471.08,194.07 470.26,194.83 465.54,213.52 "
+ id="XMLID_343_" />
+ </defs>
+ <linearGradient
+ x1="471.0806"
+ y1="201.07761"
+ x2="481.91711"
+ y2="210.4977"
+ id="linearGradient17389"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#6498c1;stop-opacity:1"
+ offset="0.005618"
+ id="stop17391" />
+ <stop
+ style="stop-color:#79a9cc;stop-opacity:1"
+ offset="0.2332"
+ id="stop17393" />
+ <stop
+ style="stop-color:#a4cde2;stop-opacity:1"
+ offset="0.74049997"
+ id="stop17395" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="1"
+ id="stop17397" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="5.618000e-003" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="0.4438" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="clipPath17400">
+ <use
+ id="use17402"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_343_" />
+ </clipPath>
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17404"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop17406" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop17408" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop17410" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop17412" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17882"
+ xlink:href="#XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <defs
+ id="defs3826">
+ <polygon
+ points="463.52,216.14 480.56,220.24 481.36,219.5 483.03,202.04 469.05,196.69 468.24,197.45 463.52,216.14 "
+ id="XMLID_338_" />
+ </defs>
+ <linearGradient
+ x1="468.2915"
+ y1="204.7612"
+ x2="479.39871"
+ y2="214.4166"
+ id="linearGradient17357"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop17359" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop17361" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="clipPath17364">
+ <use
+ id="use17366"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_338_" />
+ </clipPath>
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17368"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop17370" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop17372" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop17374" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop17376" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398"
+ id="linearGradient2387"
+ xlink:href="#linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
+ <linearGradient
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398"
+ id="linearGradient5105"
+ xlink:href="#linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
+ <linearGradient
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398"
+ id="linearGradient5145"
+ xlink:href="#linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2381"
+ id="linearGradient2371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)"
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398" />
+ </defs>
+ <g
+ transform="matrix(0.437808,-0.437808,0.437808,0.437808,-220.8237,43.55311)"
+ id="g5089">
+ <path
+ d="M 8.4382985,-6.28125 C 7.8309069,-6.28125 4.125,-0.33238729 4.125,1.96875 L 4.125,28.6875 C 4.125,29.533884 4.7068159,29.8125 5.28125,29.8125 L 30.84375,29.8125 C 31.476092,29.8125 31.968751,29.319842 31.96875,28.6875 L 31.96875,23.46875 L 32.25,23.46875 C 32.74684,23.46875 33.156249,23.059339 33.15625,22.5625 L 33.15625,-5.375 C 33.15625,-5.8718398 32.74684,-6.28125 32.25,-6.28125 L 8.4382985,-6.28125 z "
+ transform="translate(282.8327,227.1903)"
+ style="fill:#5c5c4f;stroke:black;stroke-width:3.23021388;stroke-miterlimit:4;stroke-dasharray:none"
+ id="path5091" />
+ <rect
+ width="27.85074"
+ height="29.369793"
+ rx="1.1414107"
+ ry="1.1414107"
+ x="286.96509"
+ y="227.63805"
+ style="fill:#032c87"
+ id="rect5093" />
+ <path
+ d="M 288.43262,225.43675 L 313.67442,225.43675 L 313.67442,254.80655 L 287.29827,254.83069 L 288.43262,225.43675 z "
+ style="fill:white"
+ id="rect5095" />
+ <path
+ d="M 302.44536,251.73726 C 303.83227,259.59643 301.75225,263.02091 301.75225,263.02091 C 303.99609,261.41329 305.71651,259.54397 306.65747,257.28491 C 307.62455,259.47755 308.49041,261.71357 310.9319,263.27432 C 310.9319,263.27432 309.33686,256.07392 309.22047,251.73726 L 302.44536,251.73726 z "
+ style="fill:#a70000;fill-opacity:1;stroke-width:2"
+ id="path5097" />
+ <rect
+ width="25.241802"
+ height="29.736675"
+ rx="0.89682275"
+ ry="0.89682275"
+ x="290.73544"
+ y="220.92249"
+ style="fill:#809cc9"
+ id="rect5099" />
+ <path
+ d="M 576.47347,725.93939 L 582.84431,726.35441 L 583.25121,755.8725 C 581.35919,754.55465 576.39694,752.1117 574.98889,754.19149 L 574.98889,727.42397 C 574.98889,726.60151 575.65101,725.93939 576.47347,725.93939 z "
+ transform="matrix(0.499065,-0.866565,0,1,0,0)"
+ style="fill:#4573b3;fill-opacity:1"
+ id="rect5101" />
+ <path
+ d="M 293.2599,221.89363 L 313.99908,221.89363 C 314.45009,221.89363 314.81318,222.25673 314.81318,222.70774 C 315.02865,229.0361 295.44494,244.47124 292.44579,240.30491 L 292.44579,222.70774 C 292.44579,222.25673 292.80889,221.89363 293.2599,221.89363 z "
+ style="opacity:0.65536726;fill:url(#linearGradient2371);fill-opacity:1"
+ id="path5103" />
+ </g>
+</svg>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/Makefile
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/Makefile (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/Makefile 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,16 @@
+#Makefile for Red Hat Documentation
+#Created by Jeff Fearn <jfearn(a)redhat.com>
+#Copyright Red Hat Inc. 2006
+
+XML_LANG = en-US
+
+BRAND = JBoss
+
+OTHER_LANGS = de-DE es-ES fr-FR ja-JP pt-BR zh-CN
+
+COMMON_CONFIG = /usr/share/publican
+include $(COMMON_CONFIG)/make/Makefile.common
+
+
+
+
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/Author_Group.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/Author_Group.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/Author_Group.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,8 @@
+<?xml version='1.0'?>
+<!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+
+<authorgroup>
+ <author><firstname>Manik Surtani, Galder Zamarreño</firstname></author>
+
+</authorgroup>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/Book_Info.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/Book_Info.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/Book_Info.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,32 @@
+<?xml version='1.0'?>
+<!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+
+<bookinfo id="JBoss_Cache">
+ <title>JBoss Cache Tutorial</title>
+ <subtitle>for Use with JBoss Enterprise Application Platform 5.0</subtitle>
+ <edition>2.0</edition>
+ <pubsnumber>1</pubsnumber>
+ <productname>JBoss Enterprise Application Platform</productname>
+ <productnumber>5.0</productnumber>
+ <abstract>
+ <para>
+ This book is a TreeCache and JBossCache Tutorial.
+ </para>
+ </abstract>
+ <isbn>N/A</isbn>
+ <corpauthor>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="Common_Content/images/redhat-logo.svg" />
+ </imageobject>
+ </inlinemediaobject>
+ </corpauthor>
+ <copyright>
+ <year>&YEAR;</year>
+ <holder>&HOLDER;</holder>
+ </copyright>
+ <xi:include href="Common_Content/Legal_Notice.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="Author_Group.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+</bookinfo>
+
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/JBoss_Cache_Tutorial.ent
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/JBoss_Cache_Tutorial.ent (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/JBoss_Cache_Tutorial.ent 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,3 @@
+<!ENTITY HOLDER "Red Hat, Inc">
+<!ENTITY YEAR "2009">
+<!ENTITY VERSION "">
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/JBoss_Cache_Tutorial.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/JBoss_Cache_Tutorial.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/JBoss_Cache_Tutorial.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+<book id="JBossCache_Tutorial">
+ <title>JBossCache Tutorial</title>
+ <xi:include href="Book_Info.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <chapter id="JBossCache_Tutorial-Introduction">
+ <title>Introduction</title>
+
+ <para>
+ JBoss Cache is an in-memory replicated, transactional, and fine-grained cache.
+ This tutorial focuses on the core Cache API. Please refer to the accompanying tutorial
+ for POJO Cache, if it is the POJO Cache API you are interested in.
+ </para>
+ <para>
+ For details of configuration, usage and APIs, please refer to the
+ <ulink url="http://labs.jboss.org/jbosscache/docs/index.html">user manuals</ulink>.
+ </para>
+
+ <section>
+ <title>What You Will Learn</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Cache creation and modification</para>
+ </listitem>
+
+ <listitem>
+ <para>Replication of state</para>
+ </listitem>
+
+ <listitem>
+ <para>Transactions</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+</chapter>
+ <chapter>
+ <title>Configuration</title>
+
+ <para>First download the JBoss Cache 3.x distribution from
+ <ulink url="http://labs.jboss.org/jbosscache/download/index.html">the download page</ulink>. You will need the ALL distribution (
+ <literal>jbosscache-core-3.X.Y.GA-all.zip</literal>).
+ Unzip it, and you will get a directory containing the distribution, such as
+ <literal>jbosscache-core-3.X.Y</literal>
+ .
+ For the sake of this tutorial, I will refer to this as
+ <literal>${JBOSSCACHE_HOME}</literal>
+ .
+ </para>
+
+ <para>The configuration files are located in
+ <literal>${JBOSSCACHE_HOME}/etc</literal>. You can
+ modify the behavior of the cache by editing the various configuration files.
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <literal>log4j.xml</literal> - Logging output. You can enable logging, specify log levels or
+ change the name and path to the log file.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>config-samples/total-replication.xml</literal> - Cache configuration file used for this tutorial.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </chapter>
+
+ <chapter>
+ <title>Script</title>
+
+ <para>The only script needed for this tutorial is the
+ <literal>${JBOSSCACHE_HOME}/tutorial/build.xml</literal>
+ ant script. You also need to have
+ <ulink url="http://ant.apache.org/">Apache Ant</ulink>
+ installed for running the tutorial GUI.
+ </para>
+ </chapter>
+
+ <chapter>
+ <title>Running The Tutorial GUI</title>
+
+ <para>
+ The GUI is run by:
+ <itemizedlist>
+ <listitem>Changing to the
+ <literal>${JBOSSCACHE_HOME}/tutorial</literal>
+ directory (e.g.,<literal>cd ${JBOSSCACHE_HOME}/tutorial</literal>)</listitem>
+ <listitem>And then running the ant script (e.g.,<literal>ant run</literal>)</listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ This will cause a GUI window to appear, giving you a tree view of the cache in the top pane and a BeanShell
+ view of the JVM in the lower pane.
+ </para>
+ <para>
+ The BeanShell view is preset with the following variables:
+ <itemizedlist>
+ <listitem>
+ <literal>cache</literal>
+ - a reference to the <literal>org.jboss.cache.Cache</literal> interface, used by the GUI instance.
+ </listitem>
+ <listitem>
+ <literal>root</literal>
+ - a reference to the root <literal>org.jboss.cache.Node</literal> instance for the above cache.
+ </listitem>
+ <listitem>
+ <literal>transactionManager</literal>
+ - a reference to the registered <literal>javax.transaction.TransactionManager</literal> instance.
+ </listitem>
+ </itemizedlist>
+ The references made available to the BeanShell window point to the same cache instance used by the tree view in
+ the
+ GUI above.
+ </para>
+
+ <para>
+ To run the GUI as a replicated tutorial, it is useful to start another command line window and run the ant script
+ again as you did above. Now you will have two cache instances running in two separate GUIs, replicating state
+ to each other.
+ </para>
+
+ </chapter>
+
+ <chapter>
+ <title>Tutorials</title>
+ Note that it is recommended that you shut down and restart the GUI for each of the following tutorials, to
+ ensure clean caches every time.
+ <section>
+ <title>Caches and Nodes</title>
+ <para>
+ For this tutorial, start a single instance of the GUI. In this tutorial, we will:
+
+ <itemizedlist>
+ <listitem>Create nodes under the root node.</listitem>
+ <listitem>Remove nodes under the root node, both individually and recursively.</listitem>
+ <listitem>Add and remove data from nodes.</listitem>
+ </itemizedlist>
+ </para>
+
+ <para>1. Set up the Fqns you need. In the BeanShell pane, create 3 Fqn variables:</para>
+ <programlisting role="JAVA"><![CDATA[
+ childFqn1 = Fqn.fromString("/child1");
+ childFqn2 = Fqn.fromString("/child2");
+ childFqn3 = Fqn.fromString("/child2/child3");
+ ]]></programlisting>
+
+ <para>2. Create child nodes under the root node.</para>
+ <programlisting role="JAVA"><![CDATA[
+ child1 = root.addChild(childFqn1);
+ child2 = root.addChild(childFqn2);
+ child3 = root.addChild(childFqn3);
+ ]]></programlisting>
+
+
+ <para>3. Query the nodes.</para>
+ <programlisting role="JAVA"><![CDATA[
+ root.hasChild(childFqn1); // should return true
+ child2.hasChild(childFqn3.getLastElement()); // should return true
+ child3.getParent(); // should return child2
+ child2.getParent(); // should return root
+ ]]></programlisting>
+
+ <para>4. Put some data in the nodes. By selecting the nodes in the tree view, you should see the contents of
+ each node.
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+ child1.put("key1", "value1");
+ child1.put("key2", "value2");
+ child2.put("key3", "value3");
+ child2.put("key4", "value4");
+ child3.put("key5", "value5");
+ child3.put("key6", "value6");
+ ]]></programlisting>
+
+ <para>5. Query some of the data.</para>
+
+ <programlisting role="JAVA"><![CDATA[
+ child1.getKeys();
+ child2.getData();
+ ]]></programlisting>
+
+ <para>6. Remove some data in the nodes.</para>
+
+ <programlisting role="JAVA"><![CDATA[
+ child1.remove("key1");
+ child2.remove("key3");
+ child3.clearData();
+ ]]></programlisting>
+
+ <para>7. Delete nodes</para>
+
+ <programlisting role="JAVA"><![CDATA[
+ root.removeChild(childFqn1); // will also remove any data held under child1
+ root.removeChild(childFqn2); // will recursively remove child3 as well.
+ ]]></programlisting>
+
+ <para>
+ In addition to the above, you should refer to the
+ <literal>Cache</literal>
+ and
+ <literal>Node</literal>
+ <ulink url="http://labs.jboss.org/portal/jbosscache/docs/index.html">API docs</ulink>
+ and try out the APIs in the BeanShell script.
+ </para>
+ </section>
+
+ <section>
+ <title>Replication</title>
+ <para>
+ For this tutorial, start two instances instance of the GUI. Repeat the exercises in the previous
+ tutorial,
+ only alternating between the two GUI windows when creating/removing nodes or adding/removing data. This
+ demonstrates
+ how the two cache instances in the two GUIs are kept in sync.
+ </para>
+ </section>
+
+ <section>
+ <title>Transactions</title>
+ <para>
+ For this tutorial, start two instances instance of the GUI. Repeat the exercises in the previous
+ tutorial,
+ only starting transactions before creating/removing nodes or adding/removing data. This will depict how
+ replication only occurs on transaction boundaries. Try rolling back a few transactions as well, to see how
+ nothing gets replicated in these cases.
+ Below is the sample code for managing transactions:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+ tm = cache.getTransactionManager();
+ tm.begin();
+ // do operations here
+ tm.commit(); // or tm.rollback();
+ ]]></programlisting>
+ </section>
+
+ </chapter>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Revision_History.xml"/>
+</book>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/Revision_History.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/Revision_History.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/Revision_History.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,26 @@
+<?xml version='1.0'?>
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+
+<appendix id="appe-Publican-Revision_History">
+ <title>Revision History</title>
+ <simpara>
+ <revhistory>
+ <revision>
+ <revnumber>1.0</revnumber>
+ <date></date>
+ <author>
+ <firstname></firstname>
+ <surname></surname>
+ <email></email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member></member>
+ </simplelist>
+ </revdescription>
+ </revision>
+ </revhistory>
+ </simpara>
+</appendix>
+
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/images/icon.svg
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/images/icon.svg (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_Tutorial/en-US/images/icon.svg 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,3936 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:ns="http://ns.adobe.com/AdobeSVGViewerExtensions/3/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="32"
+ height="32"
+ id="svg3017"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ sodipodi:docname="book.svg"
+ sodipodi:docbase="/home/andy/Desktop">
+ <metadata
+ id="metadata489">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:window-height="480"
+ inkscape:window-width="858"
+ inkscape:pageshadow="0"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="1"
+ inkscape:cx="16"
+ inkscape:cy="15.944056"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:current-layer="svg3017" />
+ <defs
+ id="defs3019">
+ <linearGradient
+ id="linearGradient2381">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop2383" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="stop2385" />
+ </linearGradient>
+ <linearGradient
+ x1="415.73831"
+ y1="11.854"
+ x2="418.13361"
+ y2="18.8104"
+ id="XMLID_1758_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8362,0.5206,-1.1904,0.992,147.62,-30.9374)">
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="0"
+ id="stop3903" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop3905" />
+ <a:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="500.70749"
+ y1="-13.2441"
+ x2="513.46442"
+ y2="-2.1547"
+ id="XMLID_1757_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop3890" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop3892" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="XMLID_1755_">
+ <use
+ id="use3874"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_343_" />
+ </clipPath>
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop3877" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop3879" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop3881" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop3883" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="471.0806"
+ y1="201.07761"
+ x2="481.91711"
+ y2="210.4977"
+ id="XMLID_1754_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#6498c1;stop-opacity:1"
+ offset="0.005618"
+ id="stop3863" />
+ <stop
+ style="stop-color:#79a9cc;stop-opacity:1"
+ offset="0.2332"
+ id="stop3865" />
+ <stop
+ style="stop-color:#a4cde2;stop-opacity:1"
+ offset="0.74049997"
+ id="stop3867" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="1"
+ id="stop3869" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="5.618000e-003" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="0.4438" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="XMLID_1753_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop3851" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop3853" />
+ <a:midPointStop
+ style="stop-color:#B2B2B2"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B2B2B2"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="XMLID_1751_">
+ <use
+ id="use3837"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_338_" />
+ </clipPath>
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop3840" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop3842" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop3844" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop3846" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="468.2915"
+ y1="204.7612"
+ x2="479.39871"
+ y2="214.4166"
+ id="XMLID_1750_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop3830" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop3832" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop3818" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop3820" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="501.0903"
+ y1="-19.2544"
+ x2="531.85413"
+ y2="0.72390002"
+ id="XMLID_1748_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop3803" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop3805" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop3807" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop3809" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="XMLID_2275_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop9947" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop9949" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop9951" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop9953" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="XMLID_2273_">
+ <use
+ id="use9933"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_960_" />
+ </clipPath>
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="XMLID_2274_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop9936" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop9938" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop9940" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop9942" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="478.21341"
+ y1="-131.9297"
+ x2="469.85818"
+ y2="-140.28481"
+ id="XMLID_2272_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.5592,0.829,-0.829,0.5592,101.3357,-104.791)">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop9917" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop9919" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop9921" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop9923" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ style="overflow:visible"
+ id="TriangleInM">
+ <path
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
+ transform="scale(-0.4,-0.4)"
+ style="fill:#5c5c4f"
+ id="path3197" />
+ </marker>
+ <linearGradient
+ x1="200.7363"
+ y1="100.4028"
+ x2="211.99519"
+ y2="89.143997"
+ id="XMLID_3298_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#bfbfbf;stop-opacity:1"
+ offset="0"
+ id="stop20103" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop20105" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#BFBFBF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#BFBFBF" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F2F2F2" />
+ </linearGradient>
+ <linearGradient
+ x1="200.7363"
+ y1="100.4028"
+ x2="211.99519"
+ y2="89.143997"
+ id="linearGradient36592"
+ xlink:href="#XMLID_3298_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="181.2925"
+ y1="110.8481"
+ x2="192.6369"
+ y2="99.5037"
+ id="XMLID_3297_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="stop20096" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop20098" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="181.2925"
+ y1="110.8481"
+ x2="192.6369"
+ y2="99.5037"
+ id="linearGradient36595"
+ xlink:href="#XMLID_3297_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="211.77589"
+ y1="105.7749"
+ x2="212.6619"
+ y2="108.2092"
+ id="XMLID_3296_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#0f6124;stop-opacity:1"
+ offset="0"
+ id="stop20087" />
+ <stop
+ style="stop-color:#219630;stop-opacity:1"
+ offset="1"
+ id="stop20089" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#0F6124" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#0F6124" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#219630" />
+ </linearGradient>
+ <linearGradient
+ x1="211.77589"
+ y1="105.7749"
+ x2="212.6619"
+ y2="108.2092"
+ id="linearGradient36677"
+ xlink:href="#XMLID_3296_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="208.9834"
+ y1="116.8296"
+ x2="200.0811"
+ y2="96.834602"
+ id="XMLID_3295_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop20076" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.5"
+ id="stop20078" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop20080" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="208.9834"
+ y1="116.8296"
+ x2="200.0811"
+ y2="96.834602"
+ id="linearGradient36604"
+ xlink:href="#XMLID_3295_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="195.5264"
+ y1="97.911102"
+ x2="213.5213"
+ y2="115.9061"
+ id="XMLID_3294_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="0"
+ id="stop20069" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop20071" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="195.5264"
+ y1="97.911102"
+ x2="213.5213"
+ y2="115.9061"
+ id="linearGradient36607"
+ xlink:href="#XMLID_3294_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="186.1938"
+ y1="109.1343"
+ x2="206.6881"
+ y2="88.639999"
+ id="XMLID_3293_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop20056" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.16850001"
+ id="stop20058" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.23029999"
+ id="stop20060" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.2809"
+ id="stop20062" />
+ <stop
+ style="stop-color:#c2c2c2;stop-opacity:1"
+ offset="0.5"
+ id="stop20064" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.1685"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.2303"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.2809"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#C2C2C2" />
+ </linearGradient>
+ <linearGradient
+ x1="186.1938"
+ y1="109.1343"
+ x2="206.6881"
+ y2="88.639999"
+ id="linearGradient36610"
+ xlink:href="#XMLID_3293_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="184.8569"
+ y1="112.2676"
+ x2="211.94099"
+ y2="89.541397"
+ id="XMLID_3292_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop20043" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.16850001"
+ id="stop20045" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.23029999"
+ id="stop20047" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.2809"
+ id="stop20049" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop20051" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.1685"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.2303"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.2809"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="184.8569"
+ y1="112.2676"
+ x2="211.94099"
+ y2="89.541397"
+ id="linearGradient36613"
+ xlink:href="#XMLID_3292_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ style="overflow:visible"
+ id="TriangleOutM">
+ <path
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
+ transform="scale(0.4,0.4)"
+ style="fill:#5c5c4f;fill-rule:evenodd;stroke-width:1pt;marker-start:none"
+ id="path3238" />
+ </marker>
+ <linearGradient
+ x1="165.3"
+ y1="99.5"
+ x2="165.3"
+ y2="115.9"
+ id="XMLID_3457_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="0"
+ id="stop8309" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8311" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="1"
+ id="stop8313" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#999999" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#999999" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#B2B2B2" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#B2B2B2" />
+ </linearGradient>
+ <linearGradient
+ x1="165.3"
+ y1="99.5"
+ x2="165.3"
+ y2="115.9"
+ id="lg1997"
+ xlink:href="#XMLID_3457_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="175"
+ y1="99.800003"
+ x2="175"
+ y2="112.5"
+ id="XMLID_3456_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="0"
+ id="stop8300" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="0.60000002"
+ id="stop8302" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="1"
+ id="stop8304" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="0.6"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#191919" />
+ </linearGradient>
+ <linearGradient
+ x1="175"
+ y1="99.800003"
+ x2="175"
+ y2="112.5"
+ id="lg2000"
+ xlink:href="#XMLID_3456_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="168.8"
+ y1="107.1"
+ x2="164.5"
+ y2="110"
+ id="XMLID_3455_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="0"
+ id="stop8291" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="0.69999999"
+ id="stop8293" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="1"
+ id="stop8295" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.7"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#191919" />
+ </linearGradient>
+ <linearGradient
+ x1="168.8"
+ y1="107.1"
+ x2="164.5"
+ y2="110"
+ id="lg2003"
+ xlink:href="#XMLID_3455_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ id="lg63694">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop63696" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="stop63698" />
+ </linearGradient>
+ <linearGradient
+ x1="458"
+ y1="483"
+ x2="465.20001"
+ y2="271.39999"
+ id="lg2006"
+ xlink:href="#lg63694"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(6.3e-2,0,0,6.3e-2,-1.3,-9.8)" />
+ <linearGradient
+ x1="176.3"
+ y1="110.1"
+ x2="158.7"
+ y2="105"
+ id="XMLID_3453_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="0"
+ id="stop8271" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="0.2"
+ id="stop8273" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop8275" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.2"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="176.3"
+ y1="110.1"
+ x2="158.7"
+ y2="105"
+ id="lg2009"
+ xlink:href="#XMLID_3453_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="173.60001"
+ y1="118.9"
+ x2="172.8"
+ y2="128.2"
+ id="XMLID_3449_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8232" />
+ <stop
+ style="stop-color:#fff95e;stop-opacity:1"
+ offset="0.60000002"
+ id="stop8234" />
+ <stop
+ style="stop-color:#ecd600;stop-opacity:1"
+ offset="1"
+ id="stop8236" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.6"
+ style="stop-color:#FFF95E" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFF95E" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#ECD600" />
+ </linearGradient>
+ <linearGradient
+ x1="173.60001"
+ y1="118.9"
+ x2="172.8"
+ y2="128.2"
+ id="lg2016"
+ xlink:href="#XMLID_3449_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <radialGradient
+ cx="284.60001"
+ cy="172.60001"
+ r="6.5"
+ fx="284.60001"
+ fy="172.60001"
+ id="XMLID_3448_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4,0,0,1.4,-237.3,-126.8)">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8219" />
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8221" />
+ <stop
+ style="stop-color:#c96b00;stop-opacity:1"
+ offset="0.89999998"
+ id="stop8223" />
+ <stop
+ style="stop-color:#9a5500;stop-opacity:1"
+ offset="1"
+ id="stop8225" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.9"
+ style="stop-color:#C96B00" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#C96B00" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#9A5500" />
+ </radialGradient>
+ <radialGradient
+ cx="284.60001"
+ cy="172.60001"
+ r="6.5"
+ fx="284.60001"
+ fy="172.60001"
+ id="rg2020"
+ xlink:href="#XMLID_3448_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.513992,0,0,2.347576,-689.1621,-378.5717)" />
+ <linearGradient
+ x1="158.10001"
+ y1="123"
+ x2="164.2"
+ y2="126.6"
+ id="XMLID_3447_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecd600;stop-opacity:1"
+ offset="0"
+ id="stop8204" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8206" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop8208" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECD600" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECD600" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="158.10001"
+ y1="123"
+ x2="164.2"
+ y2="126.6"
+ id="lg2026"
+ xlink:href="#XMLID_3447_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <radialGradient
+ cx="280.89999"
+ cy="163.7"
+ r="10.1"
+ fx="280.89999"
+ fy="163.7"
+ id="XMLID_3446_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4,0,0,1.4,-237.3,-126.8)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop8197" />
+ <stop
+ style="stop-color:#fff95e;stop-opacity:1"
+ offset="1"
+ id="stop8199" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#FFFFFF" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#FFF95E" />
+ </radialGradient>
+ <radialGradient
+ cx="280.89999"
+ cy="163.7"
+ r="10.1"
+ fx="280.89999"
+ fy="163.7"
+ id="rg2029"
+ xlink:href="#XMLID_3446_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.7,0,0,1.7,-457.5,-266.8)" />
+ <linearGradient
+ x1="156.5"
+ y1="122.7"
+ x2="180.10001"
+ y2="122.7"
+ id="XMLID_3445_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8184" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.2"
+ id="stop8186" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8188" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.40000001"
+ id="stop8190" />
+ <stop
+ style="stop-color:#d68100;stop-opacity:1"
+ offset="1"
+ id="stop8192" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.2"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.4"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#D68100" />
+ </linearGradient>
+ <linearGradient
+ x1="156.5"
+ y1="122.7"
+ x2="180.10001"
+ y2="122.7"
+ id="lg2032"
+ xlink:href="#XMLID_3445_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="156.39999"
+ y1="115.4"
+ x2="180.10001"
+ y2="115.4"
+ id="XMLID_3444_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8171" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.2"
+ id="stop8173" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8175" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.40000001"
+ id="stop8177" />
+ <stop
+ style="stop-color:#d68100;stop-opacity:1"
+ offset="1"
+ id="stop8179" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.2"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.4"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#D68100" />
+ </linearGradient>
+ <linearGradient
+ x1="156.39999"
+ y1="115.4"
+ x2="180.10001"
+ y2="115.4"
+ id="lg2035"
+ xlink:href="#XMLID_3444_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="379.70001"
+ y1="167.89999"
+ x2="383.89999"
+ y2="172.89999"
+ id="lg4286_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s16159" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.1"
+ id="s16161" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="1"
+ id="s16163" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.1" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#737373"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="379.60001"
+ y1="167.8"
+ x2="383.79999"
+ y2="172"
+ id="lg6416"
+ xlink:href="#lg4286_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.622156,0.623859,-0.623859,2.62182,-882.9706,-673.7921)" />
+ <linearGradient
+ x1="384.20001"
+ y1="169.8"
+ x2="384.79999"
+ y2="170.39999"
+ id="lg4285_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="0"
+ id="s16152" />
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="1"
+ id="s16154" />
+ <ns:midPointStop
+ style="stop-color:#737373"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#737373"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#D9D9D9"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="384.20001"
+ y1="169.8"
+ x2="384.79999"
+ y2="170.39999"
+ id="lg6453"
+ xlink:href="#lg4285_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6,0.6,-0.6,2.6,-883,-673.8)" />
+ <linearGradient
+ x1="380.5"
+ y1="172.60001"
+ x2="382.79999"
+ y2="173.7"
+ id="lg4284_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
+ <stop
+ style="stop-color:gray;stop-opacity:1"
+ offset="0"
+ id="s16145" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="1"
+ id="s16147" />
+ <ns:midPointStop
+ style="stop-color:#808080"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#808080"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#E5E5E5"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="380.5"
+ y1="172.60001"
+ x2="382.79999"
+ y2="173.7"
+ id="lg6456"
+ xlink:href="#lg4284_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6,0.6,-0.6,2.6,-883,-673.8)" />
+ <radialGradient
+ cx="347.29999"
+ cy="244.5"
+ r="5.1999998"
+ fx="347.29999"
+ fy="244.5"
+ id="lg4282_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
+ <stop
+ style="stop-color:#333;stop-opacity:1"
+ offset="0"
+ id="s16135" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="s16137" />
+ <ns:midPointStop
+ style="stop-color:#333333"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#333333"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#999999"
+ offset="1" />
+ </radialGradient>
+ <linearGradient
+ x1="310.39999"
+ y1="397.70001"
+ x2="310.89999"
+ y2="399.5"
+ id="lg4280_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="0"
+ id="s16111" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.60000002"
+ id="s16113" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="1"
+ id="s16115" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.6" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="310.39999"
+ y1="397.70001"
+ x2="310.89999"
+ y2="399.5"
+ id="lg6467"
+ xlink:href="#lg4280_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
+ <linearGradient
+ x1="310.89999"
+ y1="395.79999"
+ x2="313.29999"
+ y2="403.10001"
+ id="lg4279_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0"
+ id="s16100" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.40000001"
+ id="s16102" />
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="0.89999998"
+ id="s16104" />
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="1"
+ id="s16106" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.4" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0.9" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="310.89999"
+ y1="395.79999"
+ x2="313.29999"
+ y2="403.10001"
+ id="lg6465"
+ xlink:href="#lg4279_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
+ <linearGradient
+ x1="307.79999"
+ y1="395.20001"
+ x2="313.79999"
+ y2="413.60001"
+ id="lg4278_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0"
+ id="s16091" />
+ <stop
+ style="stop-color:#fcd72f;stop-opacity:1"
+ offset="0.40000001"
+ id="s16093" />
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="1"
+ id="s16095" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FCD72F"
+ offset="0.4" />
+ <ns:midPointStop
+ style="stop-color:#FCD72F"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="306.5"
+ y1="393"
+ x2="309"
+ y2="404"
+ id="lg6400"
+ xlink:href="#lg4278_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
+ <linearGradient
+ x1="352.10001"
+ y1="253.60001"
+ x2="348.5"
+ y2="237.8"
+ id="lg4276_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
+ <stop
+ style="stop-color:#ffff87;stop-opacity:1"
+ offset="0"
+ id="s16077" />
+ <stop
+ style="stop-color:#ffad00;stop-opacity:1"
+ offset="1"
+ id="s16079" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFAD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="335.60001"
+ y1="354.79999"
+ x2="337.89999"
+ y2="354.79999"
+ id="lg4275_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="s16057" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.80000001"
+ id="s16059" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="s16061" />
+ <ns:midPointStop
+ style="stop-color:#D9D9D9"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#D9D9D9"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.8" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="335.60001"
+ y1="354.79999"
+ x2="337.89999"
+ y2="354.79999"
+ id="lg6463"
+ xlink:href="#lg4275_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
+ <linearGradient
+ x1="337.39999"
+ y1="353.10001"
+ x2="339.39999"
+ y2="357.10001"
+ id="lg4274_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s16048" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.1"
+ id="s16050" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s16052" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.1" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="337.39999"
+ y1="353.10001"
+ x2="339.39999"
+ y2="357.10001"
+ id="lg6461"
+ xlink:href="#lg4274_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
+ <linearGradient
+ x1="334.39999"
+ y1="355.5"
+ x2="335.5"
+ y2="356.79999"
+ id="lg4273_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s16041" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s16043" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="5.6e-003" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="334.39999"
+ y1="355.5"
+ x2="335.5"
+ y2="356.79999"
+ id="lg6381"
+ xlink:href="#lg4273_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
+ <linearGradient
+ x1="348.39999"
+ y1="247.39999"
+ x2="354.10001"
+ y2="242"
+ id="lg4271_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0"
+ id="s16025" />
+ <stop
+ style="stop-color:#9e9e9e;stop-opacity:1"
+ offset="0.40000001"
+ id="s16027" />
+ <stop
+ style="stop-color:black;stop-opacity:1"
+ offset="1"
+ id="s16029" />
+ <ns:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="351.29999"
+ y1="257.29999"
+ x2="346.29999"
+ y2="235.5"
+ id="lg4270_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ffff87;stop-opacity:1"
+ offset="0"
+ id="s16007" />
+ <stop
+ style="stop-color:#ffad00;stop-opacity:1"
+ offset="1"
+ id="s16009" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFAD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="351.29999"
+ y1="257.29999"
+ x2="346.29999"
+ y2="235.5"
+ id="lg6459"
+ xlink:href="#lg4270_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)" />
+ <linearGradient
+ x1="43.799999"
+ y1="32.5"
+ x2="63.299999"
+ y2="66.400002"
+ id="XMLID_2708_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop75318" />
+ <stop
+ style="stop-color:#fffcea;stop-opacity:1"
+ offset="1"
+ id="stop75320" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#FFFCEA"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="43.799999"
+ y1="32.5"
+ x2="63.299999"
+ y2="66.400002"
+ id="lg1907"
+ xlink:href="#XMLID_2708_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)" />
+ <linearGradient
+ x1="52.5"
+ y1="40.400002"
+ x2="58.200001"
+ y2="64"
+ id="XMLID_2707_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ffdea0;stop-opacity:1"
+ offset="0"
+ id="stop75305" />
+ <stop
+ style="stop-color:#ffd89e;stop-opacity:1"
+ offset="0.30000001"
+ id="stop75307" />
+ <stop
+ style="stop-color:#ffd79e;stop-opacity:1"
+ offset="0.30000001"
+ id="stop75309" />
+ <stop
+ style="stop-color:#dbaf6d;stop-opacity:1"
+ offset="0.69999999"
+ id="stop75311" />
+ <stop
+ style="stop-color:#6f4c24;stop-opacity:1"
+ offset="1"
+ id="stop75313" />
+ <a:midPointStop
+ style="stop-color:#FFDEA0"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFDEA0"
+ offset="0.6" />
+ <a:midPointStop
+ style="stop-color:#FFD79E"
+ offset="0.3" />
+ <a:midPointStop
+ style="stop-color:#FFD79E"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#DBAF6D"
+ offset="0.7" />
+ <a:midPointStop
+ style="stop-color:#DBAF6D"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#6F4C24"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="52.5"
+ y1="40.400002"
+ x2="58.200001"
+ y2="64"
+ id="lg1910"
+ xlink:href="#XMLID_2707_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)" />
+ <linearGradient
+ x1="58"
+ y1="73.199997"
+ x2="44.5"
+ y2="19"
+ id="XMLID_2704_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)">
+ <stop
+ style="stop-color:#d4a96c;stop-opacity:1"
+ offset="0.5"
+ id="stop75284" />
+ <stop
+ style="stop-color:#dcb273;stop-opacity:1"
+ offset="0.60000002"
+ id="stop75286" />
+ <stop
+ style="stop-color:#f0ca87;stop-opacity:1"
+ offset="0.80000001"
+ id="stop75288" />
+ <stop
+ style="stop-color:#ffdc96;stop-opacity:1"
+ offset="0.69999999"
+ id="stop75290" />
+ <stop
+ style="stop-color:#c18a42;stop-opacity:1"
+ offset="1"
+ id="stop75292" />
+ <a:midPointStop
+ style="stop-color:#D4A96C"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#D4A96C"
+ offset="0.6" />
+ <a:midPointStop
+ style="stop-color:#FFDC96"
+ offset="0.7" />
+ <a:midPointStop
+ style="stop-color:#FFDC96"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#C18A42"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="53.700001"
+ y1="32"
+ x2="53.700001"
+ y2="64.599998"
+ id="XMLID_2703_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e5c9b0;stop-opacity:1"
+ offset="0"
+ id="stop75268" />
+ <stop
+ style="stop-color:#e5c9b0;stop-opacity:1"
+ offset="0.40000001"
+ id="stop75270" />
+ <stop
+ style="stop-color:#c0aa94;stop-opacity:1"
+ offset="1"
+ id="stop75272" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0.4" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#C0AA94"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="53.700001"
+ y1="32"
+ x2="53.700001"
+ y2="64.599998"
+ id="lg1916"
+ xlink:href="#XMLID_2703_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)" />
+ <linearGradient
+ x1="224.31"
+ y1="19.450001"
+ x2="214.33"
+ y2="11.46"
+ id="XMLID_419_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#404040;stop-opacity:1"
+ offset="0"
+ id="s1903" />
+ <stop
+ style="stop-color:#6d6d6d;stop-opacity:1"
+ offset="0.33000001"
+ id="s1905" />
+ <stop
+ style="stop-color:#e9e9e9;stop-opacity:1"
+ offset="1"
+ id="s1907" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#404040" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#404040" />
+ <a:midPointStop
+ offset="0.33"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E9E9E9" />
+ </linearGradient>
+ <linearGradient
+ x1="221.84"
+ y1="32.779999"
+ x2="212.2"
+ y2="20.27"
+ id="lg1988"
+ xlink:href="#XMLID_419_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
+ <linearGradient
+ x1="228.35001"
+ y1="33.279999"
+ x2="215.42999"
+ y2="33.279999"
+ id="lg1900"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s1902" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="s1906" />
+ <a:midPointStop
+ style="stop-color:#575757"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#575757"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#6D6D6D"
+ offset="0.33" />
+ <a:midPointStop
+ style="stop-color:#6D6D6D"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#D3D3D3"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="234.81"
+ y1="33.279999"
+ x2="228.27"
+ y2="33.279999"
+ id="lg1908"
+ xlink:href="#lg1900"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
+ <linearGradient
+ x1="228.35001"
+ y1="33.279999"
+ x2="215.42999"
+ y2="33.279999"
+ id="XMLID_416_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#575757;stop-opacity:1"
+ offset="0"
+ id="s1874" />
+ <stop
+ style="stop-color:#6d6d6d;stop-opacity:1"
+ offset="0.33000001"
+ id="s1876" />
+ <stop
+ style="stop-color:#d3d3d3;stop-opacity:1"
+ offset="1"
+ id="s1878" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#575757" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#575757" />
+ <a:midPointStop
+ offset="0.33"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#D3D3D3" />
+ </linearGradient>
+ <linearGradient
+ x1="228.35001"
+ y1="33.279999"
+ x2="215.42999"
+ y2="33.279999"
+ id="lg1991"
+ xlink:href="#XMLID_416_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
+ <radialGradient
+ cx="603.19"
+ cy="230.77"
+ r="1.67"
+ fx="603.19"
+ fy="230.77"
+ id="x5010_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1,0,0,1.1,-54.33,-75.4)">
+ <stop
+ style="stop-color:#c9ffc9;stop-opacity:1"
+ offset="0"
+ id="stop29201" />
+ <stop
+ style="stop-color:#23a11f;stop-opacity:1"
+ offset="1"
+ id="stop29203" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#C9FFC9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#C9FFC9" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#23A11F" />
+ </radialGradient>
+ <radialGradient
+ cx="603.19"
+ cy="230.77"
+ r="1.67"
+ fx="603.19"
+ fy="230.77"
+ id="radialGradient5711"
+ xlink:href="#x5010_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23,0,0,1.23,-709.93,-245.02)" />
+ <linearGradient
+ x1="592.31"
+ y1="162.60001"
+ x2="609.32001"
+ y2="145.59"
+ id="lg5722"
+ xlink:href="#x5003_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="601.48999"
+ y1="170.16"
+ x2="613.84003"
+ y2="170.16"
+ id="x5002_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop29134" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.2"
+ id="stop29136" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="stop29138" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.20"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#999999" />
+ </linearGradient>
+ <linearGradient
+ x1="601.48999"
+ y1="170.16"
+ x2="613.84003"
+ y2="170.16"
+ id="lg5725"
+ xlink:href="#x5002_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.23"
+ id="x5004_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop29157" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop29159" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.23"
+ id="lg5728"
+ xlink:href="#x5004_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="592.31"
+ y1="162.60001"
+ x2="609.32001"
+ y2="145.59"
+ id="x5003_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0"
+ id="stop29143" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="1"
+ id="stop29145" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E5E5E5" />
+ </linearGradient>
+ <linearGradient
+ x1="592.31"
+ y1="162.60001"
+ x2="609.32001"
+ y2="145.59"
+ id="lg5732"
+ xlink:href="#x5003_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.24001"
+ id="x5000_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop29124" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop29126" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.24001"
+ id="lg5735"
+ xlink:href="#x5000_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="308.54999"
+ y1="149.89999"
+ x2="299.72"
+ y2="148.83"
+ id="XMLID_2433_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d6d6d6;stop-opacity:1"
+ offset="0"
+ id="71615" />
+ <stop
+ style="stop-color:#a5a5a5;stop-opacity:1"
+ offset="1"
+ id="71617" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D6D6D6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D6D6D6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#A5A5A5" />
+ </linearGradient>
+ <linearGradient
+ x1="308.54999"
+ y1="149.89999"
+ x2="299.72"
+ y2="148.83"
+ id="lg1952"
+ xlink:href="#XMLID_2433_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
+ <radialGradient
+ cx="307.39999"
+ cy="121"
+ r="23.35"
+ fx="307.39999"
+ fy="121"
+ id="XMLID_2432_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.98,0,0,0.98,2.88,2.75)">
+ <stop
+ style="stop-color:#d2d2d2;stop-opacity:1"
+ offset="0.19"
+ id="71592" />
+ <stop
+ style="stop-color:#cfcfcf;stop-opacity:1"
+ offset="0.44999999"
+ id="71594" />
+ <stop
+ style="stop-color:#c7c7c7;stop-opacity:1"
+ offset="0.60000002"
+ id="71596" />
+ <stop
+ style="stop-color:#b9b9b9;stop-opacity:1"
+ offset="0.74000001"
+ id="71598" />
+ <stop
+ style="stop-color:#a4a4a4;stop-opacity:1"
+ offset="0.86000001"
+ id="71600" />
+ <stop
+ style="stop-color:#8a8a8a;stop-opacity:1"
+ offset="0.95999998"
+ id="71602" />
+ <stop
+ style="stop-color:gray;stop-opacity:1"
+ offset="1"
+ id="71604" />
+ <a:midPointStop
+ offset="0.19"
+ style="stop-color:#D2D2D2" />
+ <a:midPointStop
+ offset="0.8"
+ style="stop-color:#D2D2D2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#808080" />
+ </radialGradient>
+ <radialGradient
+ cx="307.39999"
+ cy="121"
+ r="23.35"
+ fx="307.39999"
+ fy="121"
+ id="radialGradient2331"
+ xlink:href="#XMLID_2432_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-276.62,-121.54)" />
+ <linearGradient
+ x1="294.13"
+ y1="127.07"
+ x2="294.13"
+ y2="142.2"
+ id="XMLID_2430_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b5d8ff;stop-opacity:1"
+ offset="0"
+ id="71582" />
+ <stop
+ style="stop-color:black;stop-opacity:1"
+ offset="1"
+ id="71584" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B5D8FF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B5D8FF" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000" />
+ </linearGradient>
+ <linearGradient
+ x1="294.13"
+ y1="127.07"
+ x2="294.13"
+ y2="142.2"
+ id="lg2820"
+ xlink:href="#XMLID_2430_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
+ <linearGradient
+ x1="279.10999"
+ y1="148.03"
+ x2="309.16"
+ y2="148.03"
+ id="XMLID_2429_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e1e1e1;stop-opacity:1"
+ offset="0"
+ id="71564" />
+ <stop
+ style="stop-color:#e1e1e1;stop-opacity:1"
+ offset="0.25"
+ id="71566" />
+ <stop
+ style="stop-color:#a5a5a5;stop-opacity:1"
+ offset="0.44"
+ id="71568" />
+ <stop
+ style="stop-color:#a5a5a5;stop-opacity:1"
+ offset="1"
+ id="71570" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.25"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.44"
+ style="stop-color:#A5A5A5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A5A5A5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#A5A5A5" />
+ </linearGradient>
+ <linearGradient
+ x1="279.10999"
+ y1="148.03"
+ x2="309.16"
+ y2="148.03"
+ id="lg2818"
+ xlink:href="#XMLID_2429_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
+ <radialGradient
+ cx="622.34302"
+ cy="14.449"
+ r="26.496"
+ fx="622.34302"
+ fy="14.449"
+ id="lg3499_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.851,0,0,0.849,69.297,51.658)">
+ <stop
+ style="stop-color:#23468e;stop-opacity:1"
+ offset="0"
+ id="stop10972" />
+ <stop
+ style="stop-color:#012859;stop-opacity:1"
+ offset="1"
+ id="stop10974" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#23468E" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#23468E" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#012859" />
+ </radialGradient>
+ <radialGradient
+ cx="622.34302"
+ cy="14.449"
+ r="26.496"
+ fx="622.34302"
+ fy="14.449"
+ id="rg5791"
+ xlink:href="#lg3499_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.858,0,0,0.857,-511.7,9.02)" />
+ <linearGradient
+ x1="616.112"
+ y1="76.247002"
+ x2="588.14099"
+ y2="60.742001"
+ id="lg3497_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#01326e;stop-opacity:1"
+ offset="0"
+ id="stop10962" />
+ <stop
+ style="stop-color:#012859;stop-opacity:1"
+ offset="1"
+ id="stop10964" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#01326E" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#01326E" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#012859" />
+ </linearGradient>
+ <linearGradient
+ x1="617.698"
+ y1="82.445999"
+ x2="585.95203"
+ y2="54.848999"
+ id="lg3496_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="stop10950" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop10952" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="617.698"
+ y1="82.445999"
+ x2="585.95203"
+ y2="54.848999"
+ id="lg5794"
+ xlink:href="#lg3496_"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="601.39001"
+ y1="55.341"
+ x2="588.29199"
+ y2="71.515999"
+ id="lg3495_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop10941" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.52200001"
+ id="stop10943" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop10945" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.522"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="601.39001"
+ y1="55.341"
+ x2="588.29199"
+ y2="71.515999"
+ id="lg5771"
+ xlink:href="#lg3495_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.009,0,0,1.009,-581.615,-43.098)" />
+ <linearGradient
+ x1="611.34601"
+ y1="55.279999"
+ x2="590.39001"
+ y2="81.157997"
+ id="lg3494_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop10932" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.52200001"
+ id="stop10934" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop10936" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.522"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="611.34601"
+ y1="55.279999"
+ x2="590.39001"
+ y2="81.157997"
+ id="lg5774"
+ xlink:href="#lg3494_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.009,0,0,1.009,-581.616,-43.098)" />
+ <linearGradient
+ x1="798.72998"
+ y1="69.839996"
+ x2="799.04999"
+ y2="70.709999"
+ id="g3302_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#005e00;stop-opacity:1"
+ offset="0"
+ id="s6504" />
+ <stop
+ style="stop-color:#23a11f;stop-opacity:1"
+ offset="1"
+ id="s6506" />
+ <a:midPointstop
+ style="stop-color:#005E00"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#005E00"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#23A11F"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="798.72998"
+ y1="69.839996"
+ x2="799.04999"
+ y2="70.709999"
+ id="lg5851"
+ xlink:href="#g3302_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
+ <linearGradient
+ x1="779.19"
+ y1="122.73"
+ x2="811.69"
+ y2="149.74001"
+ id="g3301_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,129.19)">
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0"
+ id="s6483" />
+ <stop
+ style="stop-color:#eee;stop-opacity:1"
+ offset="0.17"
+ id="s6485" />
+ <stop
+ style="stop-color:#e3e3e3;stop-opacity:1"
+ offset="0.34"
+ id="s6487" />
+ <stop
+ style="stop-color:#cfcfcf;stop-opacity:1"
+ offset="0.50999999"
+ id="s6489" />
+ <stop
+ style="stop-color:#b4b4b4;stop-opacity:1"
+ offset="0.67000002"
+ id="s6491" />
+ <stop
+ style="stop-color:#919191;stop-opacity:1"
+ offset="0.83999997"
+ id="s6493" />
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="1"
+ id="s6495" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.71" />
+ <a:midPointstop
+ style="stop-color:#666666"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="779.19"
+ y1="122.73"
+ x2="811.69"
+ y2="149.74001"
+ id="lg5855"
+ xlink:href="#g3301_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,-0.316,0,1.263,-926.036,103.123)" />
+ <clipPath
+ id="g3299_">
+ <use
+ id="use6469"
+ x="0"
+ y="0"
+ width="1005.92"
+ height="376.97"
+ xlink:href="#g101_" />
+ </clipPath>
+ <radialGradient
+ cx="1189.9301"
+ cy="100.05"
+ r="40.400002"
+ fx="1189.9301"
+ fy="100.05"
+ id="g3300_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.34,-8.46e-2,0,0.34,394.16,137.13)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s6472" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="s6474" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#000000"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1199.74"
+ cy="97.150002"
+ r="40.400002"
+ fx="1199.74"
+ fy="97.150002"
+ id="rg5860"
+ xlink:href="#g3300_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.409,-0.107,0,0.429,-451.489,113.149)" />
+ <linearGradient
+ x1="796.38"
+ y1="67.580002"
+ x2="781.28003"
+ y2="58.549999"
+ id="g3298_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#4c8bca;stop-opacity:1"
+ offset="0"
+ id="s6462" />
+ <stop
+ style="stop-color:#b7e9ff;stop-opacity:1"
+ offset="1"
+ id="s6464" />
+ <a:midPointstop
+ style="stop-color:#4C8BCA"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#4C8BCA"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B7E9FF"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="800.97998"
+ y1="140.72"
+ x2="777.71997"
+ y2="121.76"
+ id="g3297_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,129.19)">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="s6448" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s6450" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="800.97998"
+ y1="140.72"
+ x2="777.71997"
+ y2="121.76"
+ id="lg5890"
+ xlink:href="#g3297_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,129.19)" />
+ <linearGradient
+ x1="790.03998"
+ y1="-16.33"
+ x2="779.84003"
+ y2="-3.73"
+ id="g3296_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,70.17)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="s6439" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.51999998"
+ id="s6441" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s6443" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.52" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="790.03998"
+ y1="-16.33"
+ x2="779.84003"
+ y2="-3.73"
+ id="lg5866"
+ xlink:href="#g3296_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,28.6)" />
+ <linearGradient
+ x1="785.84003"
+ y1="72.989998"
+ x2="785.26001"
+ y2="76.279999"
+ id="g3293_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s6412" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="1"
+ id="s6414" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#737373"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="785.84003"
+ y1="72.989998"
+ x2="785.26001"
+ y2="76.279999"
+ id="lg5871"
+ xlink:href="#g3293_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
+ <linearGradient
+ x1="789.37"
+ y1="69.879997"
+ x2="791.03998"
+ y2="77.120003"
+ id="g3292_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="0"
+ id="s6403" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.28"
+ id="s6405" />
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="1"
+ id="s6407" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.28" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#666666"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="789.37"
+ y1="69.879997"
+ x2="791.03998"
+ y2="77.120003"
+ id="lg5874"
+ xlink:href="#g3292_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
+ <linearGradient
+ x1="786.65997"
+ y1="136.12"
+ x2="786.71002"
+ y2="134.33"
+ id="g3290_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,137.29)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="s6380" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="1"
+ id="s6382" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="786.65997"
+ y1="136.12"
+ x2="786.71002"
+ y2="134.33"
+ id="lg5878"
+ xlink:href="#g3290_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,-0.316,0,1.263,-926.036,113.351)" />
+ <radialGradient
+ cx="1458.77"
+ cy="-5.0999999"
+ r="35.130001"
+ fx="1458.77"
+ fy="-5.0999999"
+ id="g3289_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.42,0,0,0.42,167.09,79.84)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s6371" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="s6373" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1458.77"
+ cy="-5.0999999"
+ r="35.130001"
+ fx="1458.77"
+ fy="-5.0999999"
+ id="rg5881"
+ xlink:href="#g3289_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.505,0,0,0.53,-724.957,40.636)" />
+ <radialGradient
+ cx="1612.98"
+ cy="-4.4699998"
+ r="36.580002"
+ fx="1612.98"
+ fy="-4.4699998"
+ id="g3288_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.34,0,0,0.36,238.56,86.87)">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="s6362" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0.63999999"
+ id="s6364" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="1"
+ id="s6366" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.64" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#737373"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1612.98"
+ cy="-4.4699998"
+ r="36.580002"
+ fx="1612.98"
+ fy="-4.4699998"
+ id="rg5884"
+ xlink:href="#g3288_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.408,0,0,0.448,-638.943,49.495)" />
+ <radialGradient
+ cx="1470.5"
+ cy="-10.21"
+ r="33.290001"
+ fx="1470.5"
+ fy="-10.21"
+ id="g3287_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.42,0,0,0.42,167.09,79.84)">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="s6347" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0.38999999"
+ id="s6349" />
+ <stop
+ style="stop-color:#b1b1b1;stop-opacity:1"
+ offset="0.75"
+ id="s6351" />
+ <stop
+ style="stop-color:#aaa;stop-opacity:1"
+ offset="0.88"
+ id="s6353" />
+ <stop
+ style="stop-color:#9e9e9e;stop-opacity:1"
+ offset="0.97000003"
+ id="s6355" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="s6357" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.39" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.87" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1470.5"
+ cy="-10.21"
+ r="33.290001"
+ fx="1470.5"
+ fy="-10.21"
+ id="rg5887"
+ xlink:href="#g3287_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.505,0,0,0.53,-724.957,40.636)" />
+ <pattern
+ patternTransform="matrix(0.592927,0,0,0.592927,78,462)"
+ id="cream-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-365.3146,-513.505)"
+ id="g3047">
+ id="path2858" />
+ <path
+ inkscape:label="#path2854"
+ sodipodi:nodetypes="czzzz"
+ style="fill:#e3dcc0"
+ id="path3060"
+ d="M 390.31462,529.50504 C 390.31462,534.47304 386.28262,538.50504 381.31462,538.50504 C 376.34662,538.50504 372.31462,534.47304 372.31462,529.50504 C 372.31462,524.53704 376.34662,520.50504 381.31462,520.50504 C 386.28262,520.50504 390.31462,524.53704 390.31462,529.50504 z " />
+</g>
+ </pattern>
+ <pattern
+ patternTransform="matrix(0.733751,0,0,0.733751,67,367)"
+ id="dark-cream-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-408.0946,-513.505)"
+ id="dark-cream-spot"
+ inkscape:label="#g3043">
+ <path
+ sodipodi:nodetypes="czzzz"
+ style="fill:#c8c5ac"
+ d="M 433.09458,529.50504 C 433.09458,534.47304 429.06258,538.50504 424.09458,538.50504 C 419.12658,538.50504 415.09458,534.47304 415.09458,529.50504 C 415.09458,524.53704 419.12658,520.50504 424.09458,520.50504 C 429.06258,520.50504 433.09458,524.53704 433.09458,529.50504 z "
+ id="path2953" />
+ </g>
+ </pattern>
+ <pattern
+ patternTransform="matrix(0.375,0,0,0.375,379,400)"
+ id="white-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-484.3997,-513.505)"
+ id="white-spot"
+ inkscape:label="#g3035">
+ <path
+ style="opacity:0.25;fill:white"
+ id="path3033"
+ d="M 509.39967,529.50504 C 509.39967,534.47304 505.36767,538.50504 500.39967,538.50504 C 495.43167,538.50504 491.39967,534.47304 491.39967,529.50504 C 491.39967,524.53704 495.43167,520.50504 500.39967,520.50504 C 505.36767,520.50504 509.39967,524.53704 509.39967,529.50504 z "
+ sodipodi:nodetypes="czzzz" />
+ </g>
+ </pattern>
+ <pattern
+ patternTransform="matrix(0.455007,0,0,0.455007,-5e-5,1.9e-5)"
+ id="black-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-448.3997,-513.505)"
+ id="black-spot"
+ inkscape:label="#g3039">
+ <path
+ sodipodi:nodetypes="czzzz"
+ d="M 473.39967,529.50504 C 473.39967,534.47304 469.36767,538.50504 464.39967,538.50504 C 459.43167,538.50504 455.39967,534.47304 455.39967,529.50504 C 455.39967,524.53704 459.43167,520.50504 464.39967,520.50504 C 469.36767,520.50504 473.39967,524.53704 473.39967,529.50504 z "
+ id="path2961"
+ style="opacity:0.25;fill:black" />
+ </g>
+ </pattern>
+ <linearGradient
+ x1="501.0903"
+ y1="-19.2544"
+ x2="531.85413"
+ y2="0.72390002"
+ id="linearGradient17334"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop17336" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop17338" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop17340" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop17342" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.5112"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.6461"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#16336E" />
+ </linearGradient>
+ <linearGradient
+ x1="415.73831"
+ y1="11.854"
+ x2="418.13361"
+ y2="18.8104"
+ id="linearGradient17426"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8362,0.5206,-1.1904,0.992,147.62,-30.9374)">
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="0"
+ id="stop17428" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop17430" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F2F2F2" />
+ </linearGradient>
+ <linearGradient
+ x1="478.21341"
+ y1="-131.9297"
+ x2="469.85818"
+ y2="-140.28481"
+ id="linearGradient17434"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.5592,0.829,-0.829,0.5592,101.3357,-104.791)">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop17436" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop17438" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop17440" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop17442" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F3403F" />
+ <a:midPointStop
+ offset="0.4213"
+ style="stop-color:#F3403F" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#A6100C" />
+ </linearGradient>
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17709"
+ xlink:href="#XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)" />
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17711"
+ xlink:href="#XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="linearGradient17713"
+ xlink:href="#XMLID_1753_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17715"
+ xlink:href="#XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="500.70749"
+ y1="-13.2441"
+ x2="513.46442"
+ y2="-2.1547"
+ id="linearGradient17717"
+ xlink:href="#XMLID_1757_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="linearGradient17721"
+ xlink:href="#XMLID_2274_"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="linearGradient17723"
+ xlink:href="#XMLID_2275_"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="500.70749"
+ y1="-13.2441"
+ x2="513.46442"
+ y2="-2.1547"
+ id="linearGradient17416"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop17418" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop17420" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <defs
+ id="defs9929">
+ <path
+ d="M 489.21,209.35 L 485.35,203.63 C 483.63,204.25 473.47,208.93 471.5,210.18 C 470.57,210.77 470.17,211.16 469.72,212.48 C 470.93,212.31 471.72,212.49 473.42,213.04 C 473.26,214.77 473.24,215.74 473.57,218.2 C 474.01,216.88 474.41,216.49 475.34,215.9 C 477.33,214.65 487.49,209.97 489.21,209.35 z "
+ id="XMLID_960_" />
+ </defs>
+ <clipPath
+ id="clipPath17448">
+ <use
+ id="use17450"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_960_" />
+ </clipPath>
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="linearGradient17452"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop17454" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop17456" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop17458" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop17460" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="linearGradient17463"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop17465" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop17467" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop17469" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop17471" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="linearGradient17807"
+ xlink:href="#XMLID_2275_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-177.1654,35.43307)" />
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="linearGradient17810"
+ xlink:href="#XMLID_2274_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-177.1654,35.43307)" />
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17812"
+ xlink:href="#XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)" />
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17814"
+ xlink:href="#XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="linearGradient17816"
+ xlink:href="#XMLID_1753_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17818"
+ xlink:href="#XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17347"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop17349" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop17351" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#96BAD6" />
+ </linearGradient>
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="linearGradient17379"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop17381" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop17383" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F2F2F2" />
+ </linearGradient>
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17862"
+ xlink:href="#XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,-166.1427,-0.18283)" />
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17864"
+ xlink:href="#XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <defs
+ id="defs3859">
+ <polygon
+ points="465.54,213.52 481.94,217.46 482.74,216.71 487.46,198.05 471.08,194.07 470.26,194.83 465.54,213.52 "
+ id="XMLID_343_" />
+ </defs>
+ <linearGradient
+ x1="471.0806"
+ y1="201.07761"
+ x2="481.91711"
+ y2="210.4977"
+ id="linearGradient17389"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#6498c1;stop-opacity:1"
+ offset="0.005618"
+ id="stop17391" />
+ <stop
+ style="stop-color:#79a9cc;stop-opacity:1"
+ offset="0.2332"
+ id="stop17393" />
+ <stop
+ style="stop-color:#a4cde2;stop-opacity:1"
+ offset="0.74049997"
+ id="stop17395" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="1"
+ id="stop17397" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="5.618000e-003" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="0.4438" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="clipPath17400">
+ <use
+ id="use17402"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_343_" />
+ </clipPath>
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17404"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop17406" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop17408" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop17410" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop17412" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17882"
+ xlink:href="#XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <defs
+ id="defs3826">
+ <polygon
+ points="463.52,216.14 480.56,220.24 481.36,219.5 483.03,202.04 469.05,196.69 468.24,197.45 463.52,216.14 "
+ id="XMLID_338_" />
+ </defs>
+ <linearGradient
+ x1="468.2915"
+ y1="204.7612"
+ x2="479.39871"
+ y2="214.4166"
+ id="linearGradient17357"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop17359" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop17361" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="clipPath17364">
+ <use
+ id="use17366"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_338_" />
+ </clipPath>
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17368"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop17370" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop17372" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop17374" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop17376" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398"
+ id="linearGradient2387"
+ xlink:href="#linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
+ <linearGradient
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398"
+ id="linearGradient5105"
+ xlink:href="#linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
+ <linearGradient
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398"
+ id="linearGradient5145"
+ xlink:href="#linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2381"
+ id="linearGradient2371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)"
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398" />
+ </defs>
+ <g
+ transform="matrix(0.437808,-0.437808,0.437808,0.437808,-220.8237,43.55311)"
+ id="g5089">
+ <path
+ d="M 8.4382985,-6.28125 C 7.8309069,-6.28125 4.125,-0.33238729 4.125,1.96875 L 4.125,28.6875 C 4.125,29.533884 4.7068159,29.8125 5.28125,29.8125 L 30.84375,29.8125 C 31.476092,29.8125 31.968751,29.319842 31.96875,28.6875 L 31.96875,23.46875 L 32.25,23.46875 C 32.74684,23.46875 33.156249,23.059339 33.15625,22.5625 L 33.15625,-5.375 C 33.15625,-5.8718398 32.74684,-6.28125 32.25,-6.28125 L 8.4382985,-6.28125 z "
+ transform="translate(282.8327,227.1903)"
+ style="fill:#5c5c4f;stroke:black;stroke-width:3.23021388;stroke-miterlimit:4;stroke-dasharray:none"
+ id="path5091" />
+ <rect
+ width="27.85074"
+ height="29.369793"
+ rx="1.1414107"
+ ry="1.1414107"
+ x="286.96509"
+ y="227.63805"
+ style="fill:#032c87"
+ id="rect5093" />
+ <path
+ d="M 288.43262,225.43675 L 313.67442,225.43675 L 313.67442,254.80655 L 287.29827,254.83069 L 288.43262,225.43675 z "
+ style="fill:white"
+ id="rect5095" />
+ <path
+ d="M 302.44536,251.73726 C 303.83227,259.59643 301.75225,263.02091 301.75225,263.02091 C 303.99609,261.41329 305.71651,259.54397 306.65747,257.28491 C 307.62455,259.47755 308.49041,261.71357 310.9319,263.27432 C 310.9319,263.27432 309.33686,256.07392 309.22047,251.73726 L 302.44536,251.73726 z "
+ style="fill:#a70000;fill-opacity:1;stroke-width:2"
+ id="path5097" />
+ <rect
+ width="25.241802"
+ height="29.736675"
+ rx="0.89682275"
+ ry="0.89682275"
+ x="290.73544"
+ y="220.92249"
+ style="fill:#809cc9"
+ id="rect5099" />
+ <path
+ d="M 576.47347,725.93939 L 582.84431,726.35441 L 583.25121,755.8725 C 581.35919,754.55465 576.39694,752.1117 574.98889,754.19149 L 574.98889,727.42397 C 574.98889,726.60151 575.65101,725.93939 576.47347,725.93939 z "
+ transform="matrix(0.499065,-0.866565,0,1,0,0)"
+ style="fill:#4573b3;fill-opacity:1"
+ id="rect5101" />
+ <path
+ d="M 293.2599,221.89363 L 313.99908,221.89363 C 314.45009,221.89363 314.81318,222.25673 314.81318,222.70774 C 315.02865,229.0361 295.44494,244.47124 292.44579,240.30491 L 292.44579,222.70774 C 292.44579,222.25673 292.80889,221.89363 293.2599,221.89363 z "
+ style="opacity:0.65536726;fill:url(#linearGradient2371);fill-opacity:1"
+ id="path5103" />
+ </g>
+</svg>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/Makefile
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/Makefile (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/Makefile 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,16 @@
+#Makefile for Red Hat Documentation
+#Created by Jeff Fearn <jfearn(a)redhat.com>
+#Copyright Red Hat Inc. 2006
+
+XML_LANG = en-US
+
+BRAND = JBoss
+
+OTHER_LANGS = de-DE es-ES fr-FR ja-JP pt-BR zh-CN
+
+COMMON_CONFIG = /usr/share/publican
+include $(COMMON_CONFIG)/make/Makefile.common
+
+
+
+
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/Author_Group.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/Author_Group.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/Author_Group.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,8 @@
+<?xml version='1.0'?>
+<!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+
+<authorgroup>
+ <author><firstname>Manik Surtani, Galder Zamarreño</firstname></author>
+
+</authorgroup>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/Book_Info.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/Book_Info.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/Book_Info.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,32 @@
+<?xml version='1.0'?>
+<!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+
+<bookinfo id="JBoss_Cache">
+ <title>JBoss Cache Tutorial</title>
+ <subtitle>for Use with JBoss Enterprise Application Platform 5.0</subtitle>
+ <edition>2.0</edition>
+ <pubsnumber>1</pubsnumber>
+ <productname>JBoss Enterprise Application Platform</productname>
+ <productnumber>5.0</productnumber>
+ <abstract>
+ <para>
+ This book is a TreeCache and JBossCache Tutorial.
+ </para>
+ </abstract>
+ <isbn>N/A</isbn>
+ <corpauthor>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="Common_Content/images/redhat-logo.svg" />
+ </imageobject>
+ </inlinemediaobject>
+ </corpauthor>
+ <copyright>
+ <year>&YEAR;</year>
+ <holder>&HOLDER;</holder>
+ </copyright>
+ <xi:include href="Common_Content/Legal_Notice.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="Author_Group.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+</bookinfo>
+
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/JBoss_Cache_User_Guide.ent
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/JBoss_Cache_User_Guide.ent (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/JBoss_Cache_User_Guide.ent 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,3 @@
+<!ENTITY HOLDER "Red Hat, Inc">
+<!ENTITY YEAR "2009">
+<!ENTITY VERSION "">
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/Revision_History.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/Revision_History.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/Revision_History.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,26 @@
+<?xml version='1.0'?>
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+
+<appendix id="appe-Publican-Revision_History">
+ <title>Revision History</title>
+ <simpara>
+ <revhistory>
+ <revision>
+ <revnumber>1.0</revnumber>
+ <date></date>
+ <author>
+ <firstname></firstname>
+ <surname></surname>
+ <email></email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member></member>
+ </simplelist>
+ </revdescription>
+ </revision>
+ </revhistory>
+ </simpara>
+</appendix>
+
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/architecture.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/architecture.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/architecture.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,357 @@
+<chapter id="architecture">
+ <title>Architecture</title>
+ <section id="architecture.tree_structure">
+ <title>Data Structures Within The Cache</title>
+
+ <para>
+ A <literal>Cache</literal> consists of a collection of <literal>Node</literal> instances, organised in a tree
+ structure. Each <literal>Node</literal> contains a <literal>Map</literal> which holds the data
+ objects to be cached. It is important to note that the structure is a mathematical tree, and not a graph; each
+ <literal>Node</literal> has one and only one parent, and the root node is denoted by the constant fully qualified
+ name, <literal>Fqn.ROOT</literal>.
+ </para>
+ <para>
+ <figure>
+ <title>Data structured as a tree</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="TreeCacheArchitecture.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ In the diagram above, each box represents a JVM. You see 2 caches in separate JVMs, replicating data to each
+ other.
+ </para>
+
+ <para>
+ Any modifications (see <link linkend="api">API chapter</link>) in one cache instance will be replicated to
+ the other cache. Naturally, you can have more than 2 caches in a cluster.
+ Depending on the transactional settings, this replication will occur either after each modification or at the
+ end of a transaction, at commit time. When a new cache is created, it can optionally acquire the contents
+ from one of the existing caches on startup.
+ </para>
+ </section>
+
+ <section id="architecture.SPI_interfaces">
+ <title>SPI Interfaces</title>
+ <para>
+ In addition to <literal>Cache</literal> and <literal>Node</literal> interfaces, JBoss Cache exposes more
+ powerful <literal>CacheSPI</literal> and <literal>NodeSPI</literal> interfaces, which offer more control over
+ the internals of JBoss Cache. These interfaces are not intended for general use, but are designed for people
+ who wish to extend and enhance JBoss Cache, or write custom <literal>Interceptor</literal> or
+ <literal>CacheLoader</literal> instances.
+ </para>
+ <figure>
+ <title>SPI Interfaces</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="SPI.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+ <para>
+ The <literal>CacheSPI</literal> interface cannot be created, but is injected into <literal>Interceptor</literal>
+ and <literal>CacheLoader</literal> implementations by the <literal>setCache(CacheSPI cache)</literal>
+ methods on these interfaces. <literal>CacheSPI</literal> extends <literal>Cache</literal>
+ so all the functionality of the basic API is also available.
+ </para>
+ <para>
+ Similarly, a <literal>NodeSPI</literal> interface cannot be created. Instead, one is obtained by performing
+ operations on <literal>CacheSPI</literal>, obtained as above. For example, <literal>Cache.getRoot() : Node</literal>
+ is overridden as <literal>CacheSPI.getRoot() : NodeSPI</literal>.
+ </para>
+ <para>
+ It is important to note that directly casting a <literal>Cache</literal> or <literal>Node</literal>
+ to its SPI counterpart is not recommended and is bad practice, since the inheritace of interfaces it is not a
+ contract that is guaranteed to be upheld moving forward. The exposed public APIs, on the other hand, is
+ guaranteed to be upheld.
+ </para>
+ </section>
+
+ <section id="architecture.invocations">
+ <title>Method Invocations On Nodes</title>
+ <para>
+ Since the cache is essentially a collection of nodes, aspects such as clustering, persistence, eviction, etc.
+ need to be applied to these nodes when operations are invoked on the cache as a whole or on individual nodes.
+ To achieve this in a clean, modular and extensible manner, an interceptor chain is used. The chain is built
+ up of a series of interceptors, each one adding an aspect or particular functionality. The chain is built
+ when the cache is created, based on the configuration used.
+ </para>
+ <para>
+ It is important to note that the <literal>NodeSPI</literal> offers some methods (such as the <literal>xxxDirect()</literal>
+ method family) that operate on a node directly without passing through the interceptor stack. Plugin authors
+ should note that using such methods will affect the aspects of the cache that may need to be applied, such as
+ locking, replication, etc. To put it simply, don't use such methods unless you <emphasis>really</emphasis>
+ know what you're doing!
+ </para>
+
+ <section id="architecture.interceptors">
+ <title>Interceptors</title>
+ <para>
+ JBoss Cache essentially is a core data structure - an implementation of <literal>DataContainer</literal> - and
+ aspects and features are implemented using interceptors in front of this data structure. A
+ <literal>CommandInterceptor</literal> is an abstract class, interceptor implementations extend this.
+ </para>
+ <para>
+ <literal>CommandInterceptor</literal> implements the <literal>Visitor</literal> interface so it is able to
+ alter commands in a strongly typed manner as the command makes its way to the data structure. More on
+ visitors and commands in the next section.
+ </para>
+ <para>
+ Interceptor implementations are chained together in the <literal>InterceptorChain</literal> class, which
+ dispatches a command across the chain of interceptors. A special interceptor, the <literal>CallInterceptor</literal>,
+ always sits at the end of this chain to invoke the command being passed up the chain by calling the
+ command's <literal>process()</literal> method.
+ </para>
+ <para>
+ JBoss Cache ships with several interceptors, representing different behavioral aspects, some of which
+ are:
+ <itemizedlist>
+ <listitem>
+ <literal>TxInterceptor</literal>
+ - looks for ongoing transactions and registers with transaction managers to participate in
+ synchronization events
+ </listitem>
+ <listitem>
+ <literal>ReplicationInterceptor</literal>
+ - replicates state across a cluster using the RpcManager class
+ </listitem>
+ <listitem>
+ <literal>CacheLoaderInterceptor</literal>
+ - loads data from a persistent store if the data requested is not available in memory
+ </listitem>
+ </itemizedlist>
+ The interceptor chain configured for your cache instance can be obtained and inspected by calling
+ <literal>CacheSPI.getInterceptorChain()</literal>, which returns an ordered <literal>List</literal>
+ of interceptors in the order in which they would be encountered by a command.
+ </para>
+ <section id="architecture.custom_interceptors">
+ <title>Writing Custom Interceptors</title>
+ <para>
+ Custom interceptors to add specific aspects or features can be written by extending
+ <literal>CommandInterceptor</literal> and overriding the relevant
+ <literal>visitXXX()</literal> methods based on the commands you are interested in intercepting. There
+ are other abstract interceptors you could extend instead, such as the <literal>PrePostProcessingCommandInterceptor</literal>
+ and the <literal>SkipCheckChainedInterceptor</literal>. Please see their respective javadocs for details
+ on the extra features provided.
+ </para>
+ <para>
+ The custom interceptor will need to be added to the interceptor chain by using the
+ <literal>Cache.addInterceptor()</literal> methods. See the javadocs on these methods for details.
+ </para>
+ <para>
+ Adding custom interceptors via XML is also supported, please see the
+ <link linkend="configuration_reference_chapter">XML configuration reference</link> for details.
+ </para>
+ </section>
+ </section>
+
+ <section id="architecture.commands">
+ <title>Commands and Visitors</title>
+ <para>
+ Internally, JBoss Cache uses a command/visitor pattern to execute API calls. Whenever a method is called
+ on the cache interface, the <literal>CacheInvocationDelegate</literal>, which implements the <literal>Cache</literal>
+ interface, creates an instance of <literal>VisitableCommand</literal> and dispatches this command up a chain of
+ interceptors. Interceptors, which implement the <literal>Visitor</literal> interface, are able to handle
+ <literal>VisitableCommand</literal>s they are interested in, and add behavior to the command.
+ </para>
+ <para>
+ Each command contains all knowledge of the command being executed such as parameters used and processing
+ behavior, encapsulated in a <literal>process()</literal> method. For example, the <literal>RemoveNodeCommand</literal>
+ is created and passed up the interceptor chain when <literal>Cache.removeNode()</literal> is called, and
+ <literal>RemoveNodeCommand.process()</literal> has the necessary knowledge of how to remove a node from
+ the data structure.
+ </para>
+ <para>
+ In addition to being visitable, commands are also replicable. The JBoss Cache marshallers know how to
+ efficiently marshall commands and invoke them on remote cache instances using an internal RPC mechanism
+ based on JGroups.
+ </para>
+ </section>
+
+ <section id="architecture.invocationcontext">
+ <title>InvocationContexts</title>
+ <para>
+ <literal>InvocationContext</literal>
+ holds intermediate state for the duration of a single invocation, and is set up and
+ destroyed by the
+ <literal>InvocationContextInterceptor</literal>
+ which sits at the start of the interceptor chain.
+ </para>
+ <para>
+ <literal>InvocationContext</literal>
+ , as its name implies, holds contextual information associated with a single cache
+ method invocation. Contextual information includes associated
+ <literal>javax.transaction.Transaction</literal>
+ or
+ <literal>org.jboss.cache.transaction.GlobalTransaction</literal>
+ ,
+ method invocation origin (
+ <literal>InvocationContext.isOriginLocal()</literal>
+ ) as well as
+ <link
+ linkend="configuration.options">
+ <literal>Option</literal>
+ overrides
+ </link>, and information around which nodes have been locked, etc.
+ </para>
+ <para>
+ The
+ <literal>InvocationContext</literal>
+ can be obtained by calling
+ <literal>Cache.getInvocationContext()</literal>.
+ </para>
+ </section>
+ </section>
+
+ <section id="architecture.managers">
+ <title>Managers For Subsystems</title>
+ <para>
+ Some aspects and functionality is shared by more than a single interceptor. Some of these have been
+ encapsulated
+ into managers, for use by various interceptors, and are made available by the
+ <literal>CacheSPI</literal>
+ interface.
+ </para>
+
+ <section id="architecture.rpcmanager">
+ <title>RpcManager</title>
+ <para>
+ This class is responsible for calls made via the JGroups channel for all RPC calls to remote caches, and
+ encapsulates the JGroups channel used.
+ </para>
+ </section>
+
+ <section id="architecture.buddymanager">
+ <title>BuddyManager</title>
+ <para>
+ This class manages buddy groups and invokes group organization remote calls to organize a cluster of
+ caches into smaller sub-groups.
+ </para>
+ </section>
+
+ <section id="architecture.cacheloadermanager">
+ <title>CacheLoaderManager</title>
+ <para>
+ Sets up and configures cache loaders. This class wraps individual
+ <literal>CacheLoader</literal>
+ instances
+ in delegating classes, such as
+ <literal>SingletonStoreCacheLoader</literal>
+ or
+ <literal>AsyncCacheLoader</literal>
+ ,
+ or may add the
+ <literal>CacheLoader</literal>
+ to a chain using the
+ <literal>ChainingCacheLoader</literal>
+ .
+ </para>
+ </section>
+
+ </section>
+
+ <section id="architecture.marshalling">
+ <title>Marshalling And Wire Formats</title>
+ <para>
+ Early versions of JBoss Cache simply wrote cached data to the network by writing to an
+ <literal>ObjectOutputStream</literal>
+ during replication. Over various releases in the JBoss Cache 1.x.x series this approach was gradually
+ deprecated
+ in favor of a more mature marshalling framework. In the JBoss Cache 2.x.x series, this is the only officially
+ supported and recommended mechanism for writing objects to datastreams.
+ </para>
+ <figure>
+ <title>The Marshaller interface</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="Marshaller.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+ <section>
+ <title>The Marshaller Interface</title>
+ <para>
+ The
+ <literal>Marshaller</literal>
+ interface extends
+ <literal>RpcDispatcher.Marshaller</literal>
+ from JGroups.
+ This interface has two main implementations - a delegating
+ <literal>VersionAwareMarshaller</literal>
+ and a
+ concrete
+ <literal>CacheMarshaller300</literal>
+ .
+ </para>
+ <para>
+ The marshaller can be obtained by calling
+ <literal>CacheSPI.getMarshaller()</literal>, and defaults to the
+ <literal>VersionAwareMarshaller</literal>.
+ Users may also write their own marshallers by implementing the
+ <literal>Marshaller</literal>
+ interface or extending the <literal>AbstractMarshaller</literal> class, and adding it to their configuration
+ by using the <literal>Configuration.setMarshallerClass()</literal> setter.
+ </para>
+ </section>
+
+ <section>
+ <title>VersionAwareMarshaller</title>
+ <para>
+ As the name suggests, this marshaller adds a version
+ <literal>short</literal>
+ to the start of any stream when
+ writing, enabling similar
+ <literal>VersionAwareMarshaller</literal>
+ instances to read the version short and
+ know which specific marshaller implementation to delegate the call to.
+ For example,
+ <literal>CacheMarshaller200</literal>
+ is the marshaller for JBoss Cache 2.0.x.
+ JBoss Cache 3.0.x ships with
+ <literal>CacheMarshaller300</literal>
+ with an improved wire protocol. Using a
+ <literal>VersionAwareMarshaller</literal>
+ helps achieve wire protocol compatibility between minor
+ releases but still affords us the flexibility to tweak and improve the wire protocol between minor or micro
+ releases.
+ </para>
+ </section>
+ </section>
+ <section id="architecture.regions">
+ <title>Class Loading and Regions</title>
+ <para>
+ When used to cluster state of application servers, applications deployed in the application tend to put
+ instances
+ of objects specific to their application in the cache (or in an
+ <literal>HttpSession</literal>
+ object) which
+ would require replication. It is common for application servers to assign separate
+ <literal>ClassLoader</literal>
+ instances to each application deployed, but have JBoss Cache libraries referenced by the application server's
+ <literal>ClassLoader</literal>.
+ </para>
+ <para>
+ To enable us to successfully marshall and unmarshall objects from such class loaders, we use a concept called
+ regions. A region is a portion of the cache which share a common class loader (a region also has other uses -
+ see <link linkend="eviction_policies">eviction policies</link>).
+ </para>
+ <para>
+ A region is created by using the
+ <literal>Cache.getRegion(Fqn fqn, boolean createIfNotExists)</literal>
+ method,
+ and returns an implementation of the
+ <literal>Region</literal>
+ interface. Once a region is obtained, a
+ class loader for the region can be set or unset, and the region can be activated/deactivated. By default,
+ regions
+ are active unless the
+ <literal>InactiveOnStartup</literal>
+ configuration attribute is set to
+ <literal>true</literal>.
+ </para>
+ </section>
+</chapter>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/basic_api.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/basic_api.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/basic_api.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,651 @@
+<chapter id="api">
+ <title>User API</title>
+ <section>
+ <title>API Classes</title>
+ <para>
+ The <literal>Cache</literal> interface is the primary mechanism for interacting with JBoss Cache. It is
+ constructed and optionally started using the <literal>CacheFactory</literal>. The <literal>CacheFactory</literal>
+ allows you to create a <literal>Cache</literal> either from a <literal>Configuration</literal> object or an XML
+ file. The cache organizes data into a tree structure, made up of nodes. Once you have a reference to a
+ <literal>Cache</literal>, you can use it to look up <literal>Node</literal> objects in the tree structure,
+ and store data in the tree.
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="PublicAPI.png" format="PNG"/>
+ </imageobject>
+ </mediaobject>
+
+ </para>
+
+ <para>
+ Note that the diagram above only depicts some of the more popular API methods. Reviewing the javadoc for the
+ above interfaces is the best way to learn the API. Below, we cover some of the main points.
+ </para>
+ </section>
+
+ <section id="api.create_start">
+ <title>Instantiating and Starting the Cache</title>
+ <para>
+ An instance of the <literal>Cache</literal> interface can only be created via a <literal>CacheFactory</literal>.
+ This is unlike JBoss Cache 1.x, where an instance of the old <literal>TreeCache</literal> class could be directly
+ instantiated.
+ </para>
+ <para>
+ The <literal>CacheFactory</literal> provides a number of overloaded methods for creating a <literal>Cache</literal>,
+ but they all fundamentally do the same thing:
+ <itemizedlist>
+ <listitem>
+ Gain access to a <literal>Configuration</literal>, either by having one passed in as a method
+ parameter or by parsing XML content and constructing one. The XML content can come from a provided input
+ stream, from a classpath or filesystem location. See the <link linkend="configuration">chapter on Configuration</link>
+ for more on obtaining a <literal>Configuration</literal>.
+ </listitem>
+ <listitem>
+ Instantiate the <literal>Cache</literal> and provide it with a reference to the <literal>Configuration</literal>.
+ </listitem>
+ <listitem>
+ Optionally invoke the cache's <literal>create()</literal> and <literal>start()</literal> methods.
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ Here is an example of the simplest mechanism for creating and starting a cache, using the default
+ configuration values:
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[
+ CacheFactory factory = new DefaultCacheFactory();
+ Cache cache = factory.createCache();
+ ]]></programlisting>
+
+ <para>
+ In this example, we tell the <literal>CacheFactory</literal> to find and parse a configuration file on
+ the classpath:
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[
+ CacheFactory factory = new DefaultCacheFactory();
+ Cache cache = factory.createCache("cache-configuration.xml");
+ ]]></programlisting>
+
+ <para>In this example, we configure the cache from a file, but want to programatically
+ change a configuration element. So, we tell the factory not to start the cache, and instead do it ourselves:
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[
+ CacheFactory factory = new DefaultCacheFactory();
+ Cache cache = factory.createCache("/opt/configurations/cache-configuration.xml", false);
+ Configuration config = cache.getConfiguration();
+ config.setClusterName(this.getClusterName());
+
+ // Have to create and start cache before using it
+ cache.create();
+ cache.start();
+ ]]></programlisting>
+
+ </section>
+
+ <section>
+ <title>Caching and Retrieving Data</title>
+
+ <para>
+ Next, lets use the <literal>Cache</literal> API to access a <literal>Node</literal> in the cache and then
+ do some simple reads and writes to that node.
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+ // Let's get a hold of the root node.
+ Node rootNode = cache.getRoot();
+
+ // Remember, JBoss Cache stores data in a tree structure.
+ // All nodes in the tree structure are identified by Fqn objects.
+ Fqn peterGriffinFqn = Fqn.fromString("/griffin/peter");
+
+ // Create a new Node
+ Node peterGriffin = rootNode.addChild(peterGriffinFqn);
+
+ // let's store some data in the node
+ peterGriffin.put("isCartoonCharacter", Boolean.TRUE);
+ peterGriffin.put("favoriteDrink", new Beer());
+
+ // some tests (just assume this code is in a JUnit test case)
+ assertTrue(peterGriffin.get("isCartoonCharacter"));
+ assertEquals(peterGriffinFqn, peterGriffin.getFqn());
+ assertTrue(rootNode.hasChild(peterGriffinFqn));
+
+ Set keys = new HashSet();
+ keys.add("isCartoonCharacter");
+ keys.add("favoriteDrink");
+
+ assertEquals(keys, peterGriffin.getKeys());
+
+ // let's remove some data from the node
+ peterGriffin.remove("favoriteDrink");
+
+ assertNull(peterGriffin.get("favoriteDrink");
+
+ // let's remove the node altogether
+ rootNode.removeChild(peterGriffinFqn);
+
+ assertFalse(rootNode.hasChild(peterGriffinFqn));
+ ]]></programlisting>
+
+ <para>
+ The <literal>Cache</literal> interface also exposes put/get/remove operations that take an
+ <link linkend="basic_api.fqn">Fqn</link> as an argument, for convenience:
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[
+ Fqn peterGriffinFqn = Fqn.fromString("/griffin/peter");
+
+ cache.put(peterGriffinFqn, "isCartoonCharacter", Boolean.TRUE);
+ cache.put(peterGriffinFqn, "favoriteDrink", new Beer());
+
+ assertTrue(peterGriffin.get(peterGriffinFqn, "isCartoonCharacter"));
+ assertTrue(cache.getRootNode().hasChild(peterGriffinFqn));
+
+ cache.remove(peterGriffinFqn, "favoriteDrink");
+
+ assertNull(cache.get(peterGriffinFqn, "favoriteDrink");
+
+ cache.removeNode(peterGriffinFqn);
+
+ assertFalse(cache.getRootNode().hasChild(peterGriffinFqn));
+ ]]></programlisting>
+ <section>
+ <title>Organizing Your Data and Using the Node Structure</title>
+ <para>
+ A Node should be viewed as a named logical grouping of data. A node should be used to contain data for a
+ single data record, for example information about a particular person or account. It should be kept in
+ mind that all aspects of the cache - locking, cache loading, replication and eviction - happen on a per-node
+ basis. As such, anything grouped together by being stored in a single node will be treated as a single
+ atomic unit.
+ </para>
+ </section>
+ </section>
+
+ <section id="basic_api.fqn">
+ <title>
+ The <literal>Fqn</literal> Class
+ </title>
+
+ <para>
+ The previous section used the <literal>Fqn</literal> class in its examples; now let's learn a bit more about
+ that class.
+ </para>
+
+ <para>
+ A Fully Qualified Name (Fqn) encapsulates a list of names which represent a path to a particular location in
+ the cache's tree structure. The elements in the list are typically <literal>String</literal>s but can be
+ any <literal>Object</literal> or a mix of different types.
+ </para>
+
+ <para>
+ This path can be absolute (i.e., relative to the root node), or relative to any node in the cache. Reading the
+ documentation on each API call that makes use of <literal>Fqn</literal> will tell you whether the API expects
+ a relative or absolute <literal>Fqn</literal>.
+ </para>
+
+ <para>
+ The <literal>Fqn</literal> class provides are variety of factory methods; see the javadoc for all the
+ possibilities. The following illustrates the most commonly used approaches to creating an Fqn:
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[
+ // Create an Fqn pointing to node 'Joe' under parent node 'Smith'
+ // under the 'people' section of the tree
+
+ // Parse it from a String
+ Fqn abc = Fqn.fromString("/people/Smith/Joe/");
+
+ // Here we want to use types other than String
+ Fqn acctFqn = Fqn.fromElements("accounts", "NY", new Integer(12345));
+ ]]></programlisting>
+
+ <para>Note that</para>
+ <programlisting role="JAVA"><![CDATA[Fqn f = Fqn.fromElements("a", "b", "c");]]></programlisting>
+ <para>is the same as
+ </para>
+ <programlisting role="JAVA"><![CDATA[Fqn f = Fqn.fromString("/a/b/c");]]></programlisting>
+
+ </section>
+
+ <section>
+ <title>Stopping and Destroying the Cache</title>
+ <para>
+ It is good practice to stop and destroy your cache when you are done
+ using it, particularly if it is a clustered cache and has thus
+ used a JGroups channel. Stopping and destroying a cache ensures
+ resources like network sockets and maintenance threads are properly cleaned up.
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[
+ cache.stop();
+ cache.destroy();
+ ]]></programlisting>
+
+ <para>
+ Not also that a cache that has had
+ <literal>stop()</literal>
+ invoked
+ on it can be started again with a new call to
+ <literal>start()</literal>
+ .
+ Similarly, a cache that has had
+ <literal>destroy()</literal>
+ invoked
+ on it can be created again with a new call to
+ <literal>create()</literal>
+ (and then started again with a
+ <literal>start()</literal>
+ call).
+ </para>
+ </section>
+
+ <section>
+ <title>Cache Modes</title>
+ <para>
+ Although technically not part of the API, the <emphasis>mode</emphasis> in which the cache is configured to
+ operate affects the cluster-wide behavior of any <literal>put</literal> or <literal>remove</literal>
+ operation, so we'll briefly mention the various modes here.
+ </para>
+ <para>
+ JBoss Cache modes are denoted by the <literal>org.jboss.cache.config.Configuration.CacheMode</literal>
+ enumeration. They consist of:
+ <itemizedlist>
+ <listitem>
+ <emphasis>LOCAL</emphasis>
+ - local, non-clustered cache. Local caches don't join a cluster and don't
+ communicate with other caches in a cluster.
+ </listitem>
+ <listitem>
+ <emphasis>REPL_SYNC</emphasis>
+ - synchronous replication. Replicated caches replicate all changes to the other
+ caches in the cluster. Synchronous replication means that changes are replicated and the caller blocks
+ until replication acknowledgements are received.
+ </listitem>
+ <listitem>
+ <emphasis>REPL_ASYNC</emphasis>
+ - asynchronous replication. Similar to REPL_SYNC above, replicated caches replicate
+ all changes to the other caches in the cluster. Being asynchronous, the caller does not block until
+ replication acknowledgements are received.
+ </listitem>
+ <listitem>
+ <emphasis>INVALIDATION_SYNC</emphasis>
+ - if a cache is configured for invalidation rather than replication,
+ every time data is changed in a cache other caches in the cluster
+ receive a message informing them that their data is now stale and should
+ be evicted from memory. This reduces replication overhead while still being able to invalidate stale data
+ on remote caches.
+ </listitem>
+ <listitem>
+ <emphasis>INVALIDATION_ASYNC</emphasis>
+ - as above, except this invalidation mode causes invalidation messages
+ to be broadcast asynchronously.
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ See the <link linkend="clustering">chapter on Clustering</link> for more details on how cache mode
+ affects behavior. See the <link linkend="configuration">chapter on Configuration</link> for info on how to
+ configure things like cache mode.
+ </para>
+ </section>
+
+ <section id="api.listener">
+ <title>
+ Adding a Cache Listener - registering for cache events
+ </title>
+ <para>
+ JBoss Cache provides a convenient mechanism for registering notifications on cache events.
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+ Object myListener = new MyCacheListener();
+ cache.addCacheListener(myListener);
+ ]]></programlisting>
+ <para>
+ Similar methods exist for removing or querying registered listeners. See the javadocs on the
+ <literal>Cache</literal> interface for more details.
+ </para>
+ <para>
+ Basically any public class can be used as a listener, provided it is annotated with the
+ <literal>@CacheListener</literal> annotation. In addition, the class needs to have one or
+ more methods annotated with one of the method-level annotations (in the
+ <literal>org.jboss.cache.notifications.annotation</literal>
+ package). Methods annotated as such need to be public, have a void return type, and accept a single parameter
+ of
+ type
+ <literal>org.jboss.cache.notifications.event.Event</literal>
+ or one of its subtypes.
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <literal>@CacheStarted</literal>
+ - methods annotated such receive a notification when the cache is
+ started. Methods need to accept a parameter type which is assignable from
+ <literal>CacheStartedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@CacheStopped</literal>
+ - methods annotated such receive a notification when the cache is
+ stopped. Methods need to accept a parameter type which is assignable from
+ <literal>CacheStoppedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@NodeCreated</literal>
+ - methods annotated such receive a notification when a node is
+ created. Methods need to accept a parameter type which is assignable from
+ <literal>NodeCreatedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@NodeRemoved</literal>
+ - methods annotated such receive a notification when a node is
+ removed. Methods need to accept a parameter type which is assignable from
+ <literal>NodeRemovedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@NodeModified</literal>
+ - methods annotated such receive a notification when a node is
+ modified. Methods need to accept a parameter type which is assignable from
+ <literal>NodeModifiedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@NodeMoved</literal>
+ - methods annotated such receive a notification when a node is
+ moved. Methods need to accept a parameter type which is assignable from
+ <literal>NodeMovedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@NodeVisited</literal>
+ - methods annotated such receive a notification when a node is
+ started. Methods need to accept a parameter type which is assignable from
+ <literal>NodeVisitedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@NodeLoaded</literal>
+ - methods annotated such receive a notification when a node is
+ loaded from a
+ <literal>CacheLoader</literal>
+ . Methods need to accept a parameter type which is assignable from
+ <literal>NodeLoadedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@NodeEvicted</literal>
+ - methods annotated such receive a notification when a node is
+ evicted from memory. Methods need to accept a parameter type which is assignable from
+ <literal>NodeEvictedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@NodeInvalidated</literal>
+ - methods annotated such receive a notification when a node is
+ evicted from memory due to a remote invalidation event. Methods need to accept a parameter type which is assignable from
+ <literal>NodeInvalidatedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@NodeActivated</literal>
+ - methods annotated such receive a notification when a node is
+ activated. Methods need to accept a parameter type which is assignable from
+ <literal>NodeActivatedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@NodePassivated</literal>
+ - methods annotated such receive a notification when a node is
+ passivated. Methods need to accept a parameter type which is assignable from
+ <literal>NodePassivatedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@TransactionRegistered</literal>
+ - methods annotated such receive a notification when the cache
+ registers a
+ <literal>javax.transaction.Synchronization</literal>
+ with a registered transaction manager.
+ Methods need to accept a parameter type which is assignable from
+ <literal>TransactionRegisteredEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@TransactionCompleted</literal>
+ - methods annotated such receive a notification when the cache
+ receives a commit or rollback call from a registered transaction manager.
+ Methods need to accept a parameter type which is assignable from
+ <literal>TransactionCompletedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@ViewChanged</literal>
+ - methods annotated such receive a notification when the group structure
+ of the cluster changes. Methods need to accept a parameter type which is assignable from
+ <literal>ViewChangedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@CacheBlocked</literal>
+ - methods annotated such receive a notification when the cluster
+ requests that cache operations are blocked for a state transfer event. Methods need to accept a
+ parameter type which is assignable from
+ <literal>CacheBlockedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@CacheUnblocked</literal>
+ - methods annotated such receive a notification when the cluster
+ requests that cache operations are unblocked after a state transfer event. Methods need to accept a
+ parameter type which is assignable from
+ <literal>CacheUnblockedEvent</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>@BuddyGroupChanged</literal>
+ - methods annotated such receive a notification when a node changes its buddy group, perhaps due
+ to a buddy falling out of the cluster or a newer, closer buddy joining.
+ Methods need to accept a parameter type which is assignable from <literal>BuddyGroupChangedEvent</literal>.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ Refer to the javadocs on the annotations as well as the
+ <literal>Event</literal> subtypes for details of what is passed in to your method, and when.
+ </para>
+ <para>
+ Example:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+ @CacheListener
+ public class MyListener
+ {
+
+ @CacheStarted
+ @CacheStopped
+ public void cacheStartStopEvent(Event e)
+ {
+ switch (e.getType())
+ {
+ case CACHE_STARTED:
+ System.out.println("Cache has started");
+ break;
+ case CACHE_STOPPED:
+ System.out.println("Cache has stopped");
+ break;
+ }
+ }
+
+ @NodeCreated
+ @NodeRemoved
+ @NodeVisited
+ @NodeModified
+ @NodeMoved
+ public void logNodeEvent(NodeEvent ne)
+ {
+ log("An event on node " + ne.getFqn() + " has occured");
+ }
+ }
+ ]]></programlisting>
+ <section>
+ <title>Synchronous and Asynchronous Notifications</title>
+ <para>
+ By default, all notifications are synchronous, in that they happen on the thread of the caller which generated
+ the event. As such, it is good practise to ensure cache listener implementations don't hold up the thread in
+ long-running tasks. Alternatively, you could set the <literal>CacheListener.sync()</literal> attribute to
+ <literal>false</literal>, in which case you will not be notified in the caller's thread. See the
+ <link linkend="element.listeners">configuration reference</link> on tuning this thread pool and size of blocking
+ queue.
+ </para>
+ </section>
+ </section>
+
+ <section>
+ <title>Using Cache Loaders</title>
+ <para>
+ Cache loaders are an important part of JBoss Cache. They allow persistence of nodes to disk or to remote cache
+ clusters, and allow for passivation when caches run out of memory. In addition, cache loaders allow JBoss Cache
+ to perform 'warm starts', where in-memory state can be preloaded from persistent storage. JBoss Cache ships
+ with a number of cache loader implementations.
+ <itemizedlist>
+ <listitem>
+ <literal>org.jboss.cache.loader.FileCacheLoader</literal>
+ - a basic, filesystem based cache loader that persists data to disk. Non-transactional and not very
+ performant, but a very simple solution. Used mainly for testing and not recommended for production use.
+ </listitem>
+ <listitem>
+ <literal>org.jboss.cache.loader.JDBCCacheLoader</literal>
+ - uses a JDBC connection to store data. Connections could be created and maintained in an internal pool
+ (uses the c3p0 pooling library)
+ or from a configured DataSource. The database this CacheLoader connects to could be local or remotely
+ located.
+ </listitem>
+ <listitem>
+ <literal>org.jboss.cache.loader.BdbjeCacheLoader</literal>
+ - uses Oracle's BerkeleyDB file-based transactional database to persist data. Transactional and very
+ performant, but potentially restrictive license.
+ </listitem>
+ <listitem>
+ <literal>org.jboss.cache.loader.JdbmCacheLoader</literal>
+ - an open source alternative to the BerkeleyDB.
+ </listitem>
+ <listitem>
+ <literal>org.jboss.cache.loader.tcp.TcpCacheLoader</literal>
+ - uses a TCP socket to "persist" data to a remote cluster, using <ulink url="http://www.jboss.org/community/docs/DOC-10292">a "far cache" pattern</ulink>.
+ </listitem>
+ <listitem>
+ <literal>org.jboss.cache.loader.ClusteredCacheLoader</literal>
+ - used as a "read-only" cache loader, where other nodes in the cluster are queried for state. Useful when full
+ state transfer is too expensive and it is preferred that state is lazily loaded.
+ </listitem>
+ </itemizedlist>
+ These cache loaders, along with advanced aspects and tuning issues, are discussed in the
+ <link linkend="cache_loaders">chapter dedicated to cache loaders</link>.
+ </para>
+ </section>
+
+ <section>
+ <title>Using Eviction Policies</title>
+ <para>
+ Eviction policies are the counterpart to cache loaders. They are necessary to make sure the cache does not run
+ out of memory and when the cache starts to fill,
+ an eviction algorithm running in a separate thread evicts in-memory state and frees up
+ memory. If configured with a cache loader, the state can then be retrieved from the cache loader if needed.
+ </para>
+ <para>
+ Eviction policies can be configured on a per-region basis, so different subtrees in the cache could have
+ different eviction preferences.
+
+ JBoss Cache ships with several eviction policies:
+ <itemizedlist>
+ <listitem>
+ <literal>org.jboss.cache.eviction.LRUPolicy</literal>
+ - an eviction policy that evicts the least recently used nodes when thresholds are hit.
+ </listitem>
+ <listitem>
+ <literal>org.jboss.cache.eviction.LFUPolicy</literal>
+ - an eviction policy that evicts the least frequently used nodes when thresholds are hit.
+ </listitem>
+ <listitem>
+ <literal>org.jboss.cache.eviction.MRUPolicy</literal>
+ - an eviction policy that evicts the most recently used nodes when thresholds are hit.
+ </listitem>
+ <listitem>
+ <literal>org.jboss.cache.eviction.FIFOPolicy</literal>
+ - an eviction policy that creates a first-in-first-out queue and evicts the oldest nodes when thresholds
+ are hit.
+ </listitem>
+ <listitem>
+ <literal>org.jboss.cache.eviction.ExpirationPolicy</literal>
+ - an eviction policy that selects nodes for eviction based on an expiry time each node is configured
+ with.
+ </listitem>
+ <listitem>
+ <literal>org.jboss.cache.eviction.ElementSizePolicy</literal>
+ - an eviction policy that selects nodes for eviction based on the number of key/value pairs held in the
+ node.
+ </listitem>
+ </itemizedlist>
+ Detailed configuration and implementing custom eviction policies are discussed in the
+ <link linkend="eviction_policies">chapter dedicated to eviction policies</link>.
+ </para>
+ </section>
+</chapter>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/batching.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/batching.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/batching.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,60 @@
+<chapter id="batching">
+ <title>Batching API</title>
+ <section id="batching.intro">
+ <title>Introduction</title>
+ <para>
+ The batching API, introduced in JBoss Cache 3.x, is intended as a mechanism to batch the way calls are replicated
+ independent of JTA transactions.
+ </para>
+ <para>
+ This is useful when you want to batch up replication calls within a scope finer than that of any ongoing JTA transactions.
+ </para>
+ </section>
+ <section id="batching.configuring">
+ <title>Configuring batching</title>
+ <para>
+ To use batching, you need to enable invocation batching in your cache configuration, either on the <literal>Configuration</literal> object:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+ Configuration.setInvocationBatchingEnabled(true);
+ ]]></programlisting>
+ <para>
+ or in your XML file:
+ </para>
+ <programlisting role="XML"><![CDATA[
+ <invocationBatching enabled="true"/>
+ ]]></programlisting>
+ <para>
+ By default, invocation batching is disabled. Note that you do <emphasis>not</emphasis> have to have a transaction
+ manager defined to use batching.
+ </para>
+ </section>
+
+ <section id="batching.api">
+ <title>Batching API</title>
+ <para>
+ Once you have configured your cache to use batching, you use it by calling <literal>startBatch()</literal>
+ and <literal>endBatch()</literal> on <literal>Cache</literal>. E.g.,
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+ Cache cache = getCache();
+
+ // not using a batch
+ cache.put("/a", "key", "value"); // will replicate immediately
+
+ // using a batch
+ cache.startBatch();
+ cache.put("/a", "key", "value");
+ cache.put("/b", "key", "value");
+ cache.put("/c", "key", "value");
+ cache.endBatch(true); // This will now replicate the modifications since the batch was started.
+
+ cache.startBatch();
+ cache.put("/a", "key", "value");
+ cache.put("/b", "key", "value");
+ cache.put("/c", "key", "value");
+ cache.endBatch(false); // This will "discard" changes made in the batch
+
+ ]]></programlisting>
+ </section>
+</chapter>
\ No newline at end of file
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/cache_loaders.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/cache_loaders.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/cache_loaders.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,1556 @@
+<chapter id="cache_loaders">
+ <title>Cache Loaders</title>
+ <para>JBoss Cache can use a
+ <literal>CacheLoader</literal>
+ to back up the in-memory cache to a backend datastore.
+ If JBoss Cache is configured with a cache loader, then the following features are provided:
+ <itemizedlist>
+ <listitem>Whenever a cache element is accessed, and that element is not in
+ the cache (e.g. due to eviction or due to server restart), then the cache loader transparently
+ loads the element into the cache if found in the backend
+ store.
+ </listitem>
+
+ <listitem>Whenever an element is modified, added or removed, then that
+ modification is persisted in the backend store via the cache loader. If
+ transactions are used, all modifications created within a transaction
+ are persisted. To this end, the
+ <literal>CacheLoader</literal>
+ takes part in the two
+ phase commit protocol run by the transaction manager, although it does not do so explicitly.
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <section>
+ <title>The CacheLoader Interface and Lifecycle</title>
+
+ <figure>
+ <title>The CacheLoader interface</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="CacheLoader.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>The interaction between JBoss Cache and a
+ <literal>CacheLoader</literal>
+ implementation is as follows. When
+ <literal>CacheLoaderConfiguration</literal>
+ (see below) is non-null, an
+ instance of each configured
+ <literal>CacheLoader</literal>
+ is created when the cache is created, and started when the cache is started.
+ </para>
+
+ <para>
+ <literal>CacheLoader.create()</literal>
+ and
+ <literal>CacheLoader.start()</literal>
+ are called when the cache is
+ started. Correspondingly,
+ <literal>stop()</literal>
+ and
+ <literal>destroy()</literal>
+ are called when the cache is
+ stopped.
+ </para>
+
+ <para>Next,
+ <literal>setConfig()</literal>
+ and
+ <literal>setCache()</literal>
+ are called. The latter can be used to
+ store a reference to the cache, the former is used to configure this
+ instance of the
+ <literal>CacheLoader</literal>
+ . For example, here a database cache loader
+ could establish a connection to the database.
+ </para>
+
+ <para>The
+ <literal>CacheLoader</literal>
+ interface has a set of methods that are called
+ when no transactions are used:
+ <literal>get()</literal>
+ ,
+ <literal>put()</literal>
+ ,
+ <literal>remove()</literal>
+ and
+ <literal>removeData()</literal>
+ : they get/set/remove the value
+ immediately. These methods are described as javadoc comments in the
+ interface.
+ </para>
+
+ <para>Then there are three methods that are used with transactions:
+ <literal>prepare()</literal>
+ ,
+ <literal>commit()</literal>
+ and
+ <literal>rollback()</literal>
+ . The
+ <literal>prepare()</literal>
+ method
+ is called when a transaction is to be committed. It has a transaction
+ object and a list of modfications as argument. The transaction object
+ can be used as a key into a hashmap of transactions, where the values
+ are the lists of modifications. Each modification list has a number of
+ <literal>Modification</literal>
+ elements, which represent the changes
+ made to a cache for a given transaction. When
+ <literal>prepare()</literal>
+ returns successfully, then the cache loader
+ <emphasis>must</emphasis>
+ be able to commit (or rollback) the
+ transaction successfully.
+ </para>
+
+ <para>
+ JBoss Cache takes care of calling prepare(), commit()
+ and rollback() on the cache loaders at the right time.
+ </para>
+
+ <para>The
+ <literal>commit()</literal>
+ method tells the cache loader to
+ commit the transaction, and the
+ <literal>rollback()</literal>
+ method
+ tells the cache loader to discard the changes associated with that
+ transaction.
+ </para>
+
+ <para>See the javadocs on this interface for a detailed explanation on each method and the contract
+ implementations would need to fulfill.
+ </para>
+
+ </section>
+
+ <section>
+ <title>Configuration</title>
+
+ <para>Cache loaders are configured as follows in the JBoss Cache XML
+ file. Note that you can define several cache loaders, in
+ a chain. The impact is that the cache will look at all of the cache
+ loaders in the order they've been configured, until it finds a valid,
+ non-null element of data. When performing writes, all cache loaders are
+ written to (except if the
+ <literal>ignoreModifications</literal>
+ element has been set to
+ <literal>true</literal>
+ for a specific cache loader. See the configuration section below for
+ details.
+ </para>
+
+ <programlisting role="XML"><![CDATA[
+...
+
+<!-- Cache loader config block -->
+<!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
+<loaders passivation="false" shared="false">
+ <preload>
+ <!-- Fqns to preload -->
+ <node fqn="/some/stuff"/>
+ </preload>
+ <!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
+ <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="true"
+ ignoreModifications="false" purgeOnStartup="false">
+ <properties>
+ cache.jdbc.driver=com.mysql.jdbc.Driver
+ cache.jdbc.url=jdbc:mysql://localhost:3306/jbossdb
+ cache.jdbc.user=root
+ cache.jdbc.password=
+ </properties>
+ </loader>
+ </loaders>
+]]></programlisting>
+
+ <para>The
+ <literal>class</literal>
+ element defines the
+ class of the cache loader implementation. (Note that, because of a bug in
+ the properties editor in JBoss AS, backslashes in variables for Windows
+ filenames might not get expanded correctly, so replace="false" may be
+ necessary). Note that an implementation of cache loader has to have an empty
+ constructor.
+ </para>
+
+ <para>The
+ <literal>properties</literal>
+ element defines a configuration
+ specific to the given implementation. The filesystem-based
+ implementation for example defines the root directory to be used,
+ whereas a database implementation might define the database URL, name
+ and password to establish a database connection. This configuration is
+ passed to the cache loader implementation via
+ <literal>CacheLoader.setConfig(Properties)</literal>
+ . Note that
+ backspaces may have to be escaped.
+ </para>
+
+ <para>
+ <literal>preload</literal>
+ allows us to define a list of nodes, or
+ even entire subtrees, that are visited by the cache on startup, in order
+ to preload the data associated with those nodes. The default ("/") loads
+ the entire data available in the backend store into the cache, which is
+ probably not a good idea given that the data in the backend store might
+ be large. As an example,
+ <literal>/a,
+ /product/catalogue
+ </literal>
+ loads the subtrees
+ <literal>/a</literal>
+ and
+ <literal>/product/catalogue</literal>
+ into the cache, but nothing
+ else. Anything else is loaded lazily when accessed. Preloading makes
+ sense when one anticipates using elements under a given subtree
+ frequently.
+ .
+ </para>
+
+ <para>
+ <literal>fetchPersistentState</literal>
+ determines whether or not
+ to fetch the persistent state of a cache when joining a cluster. Only
+ one configured cache loader may set this property to true; if more than
+ one cache loader does so, a configuration exception will be thrown when
+ starting your cache service.
+ </para>
+
+ <para>
+ <literal>async</literal>
+ determines whether writes to the cache
+ loader block until completed, or are run on a separate thread so writes
+ return immediately. If this is set to true, an instance of
+ <literal>org.jboss.cache.loader.AsyncCacheLoader</literal>
+ is
+ constructed with an instance of the actual cache loader to be used. The
+ <literal>AsyncCacheLoader</literal>
+ then delegates all requests to the
+ underlying cache loader, using a separate thread if necessary. See the
+ Javadocs on
+ <literal>AsyncCacheLoader</literal>
+ for more details. If unspecified, the
+ <literal>async</literal>
+ element
+ defaults to
+ <literal>false</literal>
+ .
+ </para>
+
+ <para>
+ <emphasis role="bold">Note on using the
+ <literal>async</literal>
+ element:
+ </emphasis>
+ there is always the possibility of dirty reads since
+ all writes are performed asynchronously, and it is thus impossible to
+ guarantee when (and even if) a write succeeds. This needs to be kept in
+ mind when setting the
+ <literal>async</literal>
+ element to true.
+ </para>
+
+ <para>
+ <literal>ignoreModifications</literal>
+ determines whether write
+ methods are pushed down to the specific cache loader. Situations may
+ arise where transient application data should only reside in a file
+ based cache loader on the same server as the in-memory cache, for
+ example, with a further shared
+ <literal>JDBCCacheLoader</literal>
+ used by all servers in
+ the network. This feature allows you to write to the 'local' file cache
+ loader but not the shared
+ <literal>JDBCCacheLoader</literal>
+ . This property defaults to
+ <literal>false</literal>
+ , so writes are propagated to all cache loaders
+ configured.
+ </para>
+
+ <para>
+ <literal>purgeOnStatup</literal>
+ empties the specified cache loader
+ (if
+ <literal>ignoreModifications</literal>
+ is
+ <literal>false</literal>
+ )
+ when the cache loader starts up.
+ </para>
+
+ <para>
+ <literal>shared</literal>
+ indicates that the cache loader is shared among different cache instances, for example where all instances
+ in a
+ cluster use the same JDBC settings t talk to the same remote, shared database. Setting this to
+ <literal>true</literal>
+ prevents repeated and unnecessary writes of the same data to the cache loader by different cache instances.
+ Default value is
+ <literal>false</literal>
+ .
+ </para>
+
+ <section id="sscl">
+ <title>Singleton Store Configuration</title>
+
+ <programlisting role="XML"><![CDATA[
+ <loaders passivation="false" shared="true">
+ <preload>
+ <node fqn="/a/b/c"/>
+ <node fqn="/f/r/s"/>
+ </preload>
+
+ <!-- we can now have multiple cache loaders, which get chained -->
+ <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="false"
+ ignoreModifications="false" purgeOnStartup="false">
+ <properties>
+ cache.jdbc.datasource=java:/DefaultDS
+ </properties>
+ <singletonStore enabled="true" class="org.jboss.cache.loader.SingletonStoreCacheLoader">
+ <properties>
+ pushStateWhenCoordinator=true
+ pushStateWhenCoordinatorTimeout=20000
+ </properties>
+ </singletonStore>
+ </loader>
+ </loaders>
+ ]]></programlisting>
+ <para>
+ <literal>singletonStore</literal>
+ element enables modifications to be stored by only one node in the cluster,
+ the coordinator. Essentially, whenever any data comes in to some node
+ it is always replicated so as to keep the caches' in-memory states in
+ sync; the coordinator, though, has the sole responsibility of pushing
+ that state to disk. This functionality can be activated setting the
+ <literal>enabled</literal>
+ subelement to true in all nodes, but
+ again only the coordinator of the cluster will store the modifications
+ in the underlying cache loader as defined in
+ <literal>loader</literal>
+ element. You cannot define a cache loader as
+ <literal>shared</literal>
+ and with
+ <literal>singletonStore</literal>
+ enabled at the same time.
+ Default value for
+ <literal>enabled</literal>
+ is
+ <literal>false</literal>
+ .
+ </para>
+
+ <para>
+ Optionally, within the
+ <literal>singletonStore</literal>
+ element, you can define a
+ <literal>class</literal>
+ element that specifies the implementation class that provides the
+ singleton store functionality. This class must extend
+ <literal>org.jboss.cache.loader.AbstractDelegatingCacheLoader</literal>
+ , and if absent, it defaults to
+ <literal>org.jboss.cache.loader.SingletonStoreCacheLoader</literal>
+ .
+ </para>
+
+ <para>
+ The
+ <literal>properties</literal>
+ subelement defines properties that allow changing the behavior of the
+ class providing the singleton store functionality. By default,
+ <literal>pushStateWhenCoordinator</literal>
+ and
+ <literal>pushStateWhenCoordinatorTimeout</literal>
+ properties have been defined, but more could be added as
+ required by the user-defined class providing singleton store
+ functionality.
+ </para>
+
+ <para>
+ <literal>pushStateWhenCoordinator</literal>
+ allows the in-memory
+ state to be pushed to the cache store when a node becomes the
+ coordinator, as a result of the new election of coordinator due to a
+ cluster topology change. This can be very useful in situations where the
+ coordinator crashes and there's a gap in time until the new coordinator
+ is elected. During this time, if this property was set to
+ <literal>false</literal>
+ and the
+ cache was updated, these changes would never be persisted. Setting this
+ property to
+ <literal>true</literal>
+ would ensure that any changes during this process also
+ get stored in the cache loader. You would also want to set this property
+ to
+ <literal>true</literal>
+ if each node's cache loader is configured with a different
+ location. Default value is
+ <literal>true</literal>
+ .
+ </para>
+
+ <para>
+ <literal>pushStateWhenCoordinatorTimeout</literal>
+ is only relevant if
+ <literal>pushStateWhenCoordinator</literal>
+ is
+ <literal>true</literal>
+ in which case, sets the maximum number of milliseconds that the process
+ of pushing the in-memory state to the underlying cache loader should take,
+ reporting a
+ <literal>PushStateException</literal>
+ if exceeded. Default value is 20000.
+ </para>
+
+ <para>
+ <emphasis role="bold">Note on using the
+ <literal>singletonStore</literal>
+ element:
+ </emphasis>
+ setting
+ up a cache loader as a singleton and using cache passivation (via
+ evictions) can lead to undesired effects. If a node is to be passivated
+ as a result of an eviction, while the cluster is in the process of
+ electing a new coordinator, the data will be lost. This is because no
+ coordinator is active at that time and therefore, none of the nodes in
+ the cluster will store the passivated node. A new coordinator is elected
+ in the cluster when either, the coordinator leaves the cluster, the
+ coordinator crashes or stops responding.
+ </para>
+ </section>
+
+ </section>
+
+ <section id="cl.impls">
+
+ <title>Shipped Implementations</title>
+
+ <para>The currently available implementations shipped with JBoss Cache are as follows.</para>
+
+ <section>
+ <title>File system based cache loaders</title>
+ <para>
+ JBoss Cache ships with several cache loaders that utilize the file system as a data store. They all
+ require
+ that the
+ <literal><![CDATA[<loader><properties>]]></literal>
+ configuration element
+ contains a
+ <literal>location</literal>
+ property, which maps to a directory to be used as a persistent store.
+ (e.g.,
+ <literal>location=/tmp/myDataStore</literal>
+ ). Used mainly for testing and not recommended for production use.
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <literal>FileCacheLoader</literal>
+ , which is a simple filesystem-based implementation. By default, this cache
+ loader checks for any potential character portability issues in the
+ location or tree node names, for example invalid characters, producing
+ warning messages. These checks can be disabled adding
+ <literal>check.character.portability</literal>
+ property to the
+ <literal><![CDATA[<properties>]]></literal>
+ element and setting it to
+ <literal>false</literal>
+ (e.g.,
+ <literal>check.character.portability=false</literal>
+ ).
+ </para>
+ <para>
+ The FileCacheLoader has some severe limitations which restrict its use in a production
+ environment, or if used in such an environment, it should be used with due care and sufficient
+ understanding of these limitations.
+ <itemizedlist>
+ <listitem>Due to the way the FileCacheLoader represents a tree structure on disk
+ (directories and
+ files) traversal is inefficient for deep trees.
+ </listitem>
+ <listitem>Usage on shared filesystems like NFS, Windows shares, etc. should be avoided as
+ these do
+ not implement proper file locking and can cause data corruption.
+ </listitem>
+ <listitem>Usage with an isolation level of NONE can cause corrupt writes as multiple threads
+ attempt to write to the same file.
+ </listitem>
+ <listitem>File systems are inherently not transactional, so when attempting to use your
+ cache in a
+ transactional context, failures when writing to the file (which happens during the
+ commit phase)
+ cannot be recovered.
+ </listitem>
+ </itemizedlist>
+
+ As a rule of thumb, it is recommended that the FileCacheLoader not be used in a highly
+ concurrent,
+ transactional or stressful environment, and its use is restricted to testing.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>BdbjeCacheLoader</literal>
+ , which is a cache loader implementation based on the Oracle/Sleepycat's
+ <ulink url="http://www.oracle.com/database/berkeley-db/index.html">BerkeleyDB Java Edition
+ </ulink>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <literal>JdbmCacheLoader</literal>
+ , which is a cache loader
+ implementation based on the
+ <ulink url="http://jdbm.sourceforge.net/">JDBM engine</ulink>
+ , a fast and free alternative to
+ BerkeleyDB.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Note that the BerkeleyDB implementation is much more efficient than
+ the filesystem-based implementation, and provides transactional
+ guarantees, but requires a commercial license if distributed with an
+ application (see http://www.oracle.com/database/berkeley-db/index.html for
+ details).
+ </para>
+
+ </section>
+
+ <section>
+ <title>Cache loaders that delegate to other caches</title>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <literal>LocalDelegatingCacheLoader</literal>
+ , which enables
+ loading from and storing to another local (same JVM) cache.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>ClusteredCacheLoader</literal>
+ , which allows querying
+ of other caches in the same cluster for in-memory data via the same
+ clustering protocols used to replicate data. Writes are
+ <emphasis>not</emphasis>
+ 'stored' though, as replication would
+ take care of any updates needed. You need to specify a property
+ called
+ <literal>timeout</literal>
+ , a long value telling the cache
+ loader how many milliseconds to wait for responses from the cluster
+ before assuming a null value. For example,
+ <literal>timeout = 3000</literal>
+ would use a timeout value of 3 seconds.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+
+
+ <section id="cl.jdbc">
+ <title>JDBCCacheLoader</title>
+
+ <para>JBossCache is distributed with a JDBC-based cache loader
+ implementation that stores/loads nodes' state into a relational database.
+ The implementing class is
+ <literal>org.jboss.cache.loader.JDBCCacheLoader</literal>
+ .
+ </para>
+
+ <para>The current implementation uses just one table. Each row in the table
+ represents one node and contains three columns:
+ <itemizedlist>
+ <listitem>column for
+ <literal>Fqn</literal>
+ (which is also a primary key
+ column)
+ </listitem>
+
+ <listitem>column for node contents (attribute/value
+ pairs)
+ </listitem>
+
+ <listitem>column for parent
+ <literal>Fqn</literal>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ <literal>Fqn</literal>s are stored as strings. Node content is stored
+ as a BLOB.
+ <emphasis>WARNING:</emphasis>
+ JBoss Cache does not impose any
+ limitations on the types of objects used in
+ <literal>Fqn</literal>
+ but this implementation of
+ cache loader requires
+ <literal>Fqn</literal>
+ to contain only objects of type
+ <literal>java.lang.String</literal>
+ . Another limitation for
+ <literal>Fqn</literal>
+ is its
+ length. Since
+ <literal>Fqn</literal>
+ is a primary key, its default column type is
+ <literal>VARCHAR</literal>
+ which can store text values up to some
+ maximum length determined by the database in use.
+ </para>
+
+ <para>See
+ <ulink url="http://www.jboss.org/community/docs/DOC-10864">this wiki page</ulink>
+ for configuration tips with specific database systems.
+ </para>
+
+ <section>
+ <title>JDBCCacheLoader configuration</title>
+
+ <section>
+ <title>Table configuration</title>
+
+ <para>Table and column names as well as column types are
+ configurable with the following properties.
+ <itemizedlist>
+ <listitem>
+ <emphasis>cache.jdbc.table.name</emphasis>
+ - the name
+ of the table. Can be prepended with schema name for the given table:
+ <literal>{schema_name}.{table_name}</literal>.
+ The default value is 'jbosscache'.
+ </listitem>
+
+ <listitem>
+ <emphasis>cache.jdbc.table.primarykey</emphasis>
+ - the
+ name of the primary key for the table. The default value is
+ 'jbosscache_pk'.
+ </listitem>
+
+ <listitem>
+ <emphasis>cache.jdbc.table.create</emphasis>
+ - can be
+ true or false. Indicates whether to create the table during startup.
+ If true, the table is created if it doesn't already exist. The
+ default value is true.
+ </listitem>
+
+ <listitem>
+ <emphasis>cache.jdbc.table.drop</emphasis>
+ - can be
+ true or false. Indicates whether to drop the table during shutdown. The
+ default value is true.
+ </listitem>
+
+ <listitem>
+ <emphasis>cache.jdbc.fqn.column</emphasis>
+ - FQN
+ column name. The default value is 'fqn'.
+ </listitem>
+
+ <listitem>
+ <emphasis>cache.jdbc.fqn.type</emphasis>
+ - FQN column
+ type. The default value is 'varchar(255)'.
+ </listitem>
+
+ <listitem>
+ <emphasis>cache.jdbc.node.column</emphasis>
+ - node
+ contents column name. The default value is 'node'.
+ </listitem>
+
+ <listitem>
+ <emphasis>cache.jdbc.node.type</emphasis>
+ - node
+ contents column type. The default value is 'blob'. This type must specify
+ a valid binary data type for the database being used.
+ </listitem>
+ </itemizedlist>
+ </para>
+ </section>
+
+ <section>
+ <title>DataSource</title>
+
+ <para>If you are using JBossCache in a managed environment (e.g., an
+ application server) you can specify the JNDI name of the DataSource
+ you want to use.
+ <itemizedlist>
+ <listitem>
+ <emphasis>cache.jdbc.datasource</emphasis>
+ - JNDI name
+ of the DataSource. The default value is
+ <literal>java:/DefaultDS</literal>
+ .
+ </listitem>
+ </itemizedlist>
+ </para>
+ </section>
+
+ <section>
+ <title>JDBC driver</title>
+
+ <para>If you are
+ <emphasis>not</emphasis>
+ using DataSource you have
+ the following properties to configure database access using a JDBC
+ driver.
+ <itemizedlist>
+ <listitem>
+ <emphasis>cache.jdbc.driver</emphasis>
+ - fully
+ qualified JDBC driver name.
+ </listitem>
+
+ <listitem>
+ <emphasis>cache.jdbc.url</emphasis>
+ - URL to connect
+ to the database.
+ </listitem>
+
+ <listitem>
+ <emphasis>cache.jdbc.user</emphasis>
+ - user name to
+ connect to the database.
+ </listitem>
+
+ <listitem>
+ <emphasis>cache.jdbc.password</emphasis>
+ - password to
+ connect to the database.
+ </listitem>
+ </itemizedlist>
+ </para>
+ </section>
+
+ <section>
+ <title>c3p0 connection pooling</title>
+
+ <para>JBoss Cache implements JDBC connection pooling when running outside of an application server
+ standalone using
+ the c3p0:JDBC DataSources/Resource Pools library. In order to enable it, just edit the following
+ property:
+ <itemizedlist>
+ <listitem>
+ <emphasis>cache.jdbc.connection.factory</emphasis>
+ - Connection factory class name.
+ If not set, it defaults to standard non-pooled implementation. To enable c3p0 pooling,
+ just set
+ the
+ connection factory class for c3p0. See example below.
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>You can also set any c3p0 parameters in the same cache loader properties section but don't
+ forget
+ to
+ start the property name with 'c3p0.'. To find a list of available properties, please check the
+ c3p0 documentation for the c3p0 library version distributed in
+ <ulink url="http://sourceforge.net/projects/c3p0">c3p0:JDBC DataSources/Resource Pools</ulink>
+ .
+ Also, in order to provide quick and easy way to try out different pooling
+ parameters, any of these properties can be set via a System property overriding any values these
+ properties might have in the JBoss Cache XML configuration file, for example:
+ <literal>-Dc3p0.maxPoolSize=20</literal>
+ .
+ If a c3p0 property is not defined in either the configuration file or as a System property,
+ default
+ value, as indicated in the c3p0 documentation, will apply.
+ </para>
+ </section>
+
+ <section>
+ <title>Configuration example</title>
+
+ <para>Below is an example of a JDBCCacheLoader using Oracle as
+ database. The CacheLoaderConfiguration XML element contains an
+ arbitrary set of properties which define the database-related
+ configuration.
+ </para>
+
+ <programlisting role="XML"><![CDATA[
+<loaders passivation="false" shared="false">
+ <preload>
+ <node fqn="/some/stuff"/>
+ </preload>
+ <!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
+ <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="true"
+ ignoreModifications="false" purgeOnStartup="false">
+ <properties>
+ cache.jdbc.table.name=jbosscache
+ cache.jdbc.table.create=true
+ cache.jdbc.table.drop=true
+ cache.jdbc.table.primarykey=jbosscache_pk
+ cache.jdbc.fqn.column=fqn
+ cache.jdbc.fqn.type=VARCHAR(255)
+ cache.jdbc.node.column=node
+ cache.jdbc.node.type=BLOB
+ cache.jdbc.parent.column=parent
+ cache.jdbc.driver=oracle.jdbc.OracleDriver
+ cache.jdbc.url=jdbc:oracle:thin:@localhost:1521:JBOSSDB
+ cache.jdbc.user=SCOTT
+ cache.jdbc.password=TIGER
+ </properties>
+ </loader>
+ </loaders>
+]]></programlisting>
+
+ <para>As an alternative to configuring the entire JDBC connection,
+ the name of an existing data source can be given:
+ </para>
+
+ <programlisting role="XML"><![CDATA[
+ <loaders passivation="false" shared="false">
+ <preload>
+ <node fqn="/some/stuff"/>
+ </preload>
+ <!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
+ <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="true"
+ ignoreModifications="false" purgeOnStartup="false">
+ <properties>
+ cache.jdbc.datasource=java:/DefaultDS
+ </properties>
+ </loader>
+ </loaders>
+]]></programlisting>
+
+ <para>Cconfiguration example for a cache loader using c3p0 JDBC connection pooling:</para>
+
+ <programlisting role="XML"><![CDATA[
+ <loaders passivation="false" shared="false">
+ <preload>
+ <node fqn="/some/stuff"/>
+ </preload>
+ <!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
+ <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false" fetchPersistentState="true"
+ ignoreModifications="false" purgeOnStartup="false">
+ <properties>
+ cache.jdbc.table.name=jbosscache
+ cache.jdbc.table.create=true
+ cache.jdbc.table.drop=true
+ cache.jdbc.table.primarykey=jbosscache_pk
+ cache.jdbc.fqn.column=fqn
+ cache.jdbc.fqn.type=VARCHAR(255)
+ cache.jdbc.node.column=node
+ cache.jdbc.node.type=BLOB
+ cache.jdbc.parent.column=parent
+ cache.jdbc.driver=oracle.jdbc.OracleDriver
+ cache.jdbc.url=jdbc:oracle:thin:@localhost:1521:JBOSSDB
+ cache.jdbc.user=SCOTT
+ cache.jdbc.password=TIGER
+ cache.jdbc.connection.factory=org.jboss.cache.loader.C3p0ConnectionFactory
+ c3p0.maxPoolSize=20
+ c3p0.checkoutTimeout=5000
+ </properties>
+ </loader>
+ </loaders>
+]]></programlisting>
+
+ </section>
+ </section>
+ </section>
+
+ <section id="cl.s3">
+ <title>S3CacheLoader</title>
+
+ <para>The
+ <literal>S3CacheLoader</literal>
+ uses the
+ <ulink url="http://aws.amazon.com/">Amazon S3</ulink>
+ (Simple Storage Solution)
+ for storing cache data.
+ Since Amazon S3 is remote network storage and has fairly high latency,
+ it is really best for caches that store large pieces of data, such as media
+ or files.
+ But consider this cache loader over the JDBC or
+ file system based cache loaders if you want remotely managed, highly reliable
+ storage. Or, use it for applications running on Amazon's EC2 (Elastic Compute Cloud).
+ </para>
+
+ <para>
+ If you're planning to use Amazon S3 for storage, consider using it with JBoss Cache.
+ JBoss Cache itself provides in-memory caching for your data to minimize the amount of
+ remote access calls, thus reducing the latency and cost of fetching your Amazon S3 data.
+ With cache replication, you are also able to load data from your local cluster
+ without having to remotely access it every time.
+ </para>
+
+ <para>
+ Note that Amazon S3 does not support transactions. If transactions
+ are used in your application then there is some possibility of state
+ inconsistency when using this cache loader. However, writes are atomic, in
+ that if a write fails nothing is considered written and data is never
+ corrupted.
+ </para>
+
+ <para>
+ Data is stored in keys based on the Fqn of the Node and Node data is
+ serialized as a java.util.Map using the
+ <literal>CacheSPI.getMarshaller()</literal>
+ instance.
+ Read the javadoc on how data is structured and stored.
+ Data is stored using Java serialization.
+ Be aware this means data is not readily accessible over HTTP to
+ non-JBoss Cache clients. Your feedback and help would be appreciated
+ to extend this cache loader for that purpose.
+ </para>
+
+ <para>
+ With this cache loader, single-key operations such as
+ <literal>Node.remove(Object)</literal>
+ and
+ <literal>Node.put(Object, Object)</literal>
+ are the slowest as data is stored in a single Map instance.
+ Use bulk operations such as
+ <literal>Node.replaceAll(Map)</literal>
+ and
+ <literal>Node.clearData()</literal>
+ for more efficiency.
+ Try the
+ <literal>cache.s3.optimize</literal>
+ option as well.
+ </para>
+
+ <section>
+ <title>Amazon S3 Library</title>
+ <para>The S3 cache loader is provided with the default
+ distribution but requires a library to access the service
+ at runtime. This runtime library may be obtained through a Sourceforge Maven
+ Repository. Include the following sections in your pom.xml file:
+ </para>
+ <programlisting role="XML"><![CDATA[
+ <repository>
+ <id>e-xml.sourceforge.net</id>
+ <url>http://e-xml.sourceforge.net/maven2/repository</url>
+ </repository>
+ ...
+ <dependency>
+ <groupId>net.noderunner</groupId>
+ <artifactId>amazon-s3</artifactId>
+ <version>1.0.0.0</version>
+ <scope>runtime</scope>
+ </dependency>
+ ]]>
+ </programlisting>
+ If you do not use Maven, you can still download the
+ amazon-s3 library by navigating the repository or through
+ <ulink url="http://e-xml.sourceforge.net/maven2/repository/net/noderunner/amazon-s3/1...">
+ this URL</ulink>.
+ </section>
+
+ <section>
+ <title>Configuration</title>
+ <para>At a minimum, you must configure your Amazon S3 access key and
+ secret access key. The following configuration keys are listed in general
+ order of utility.
+ </para>
+
+ <para>
+ <itemizedlist>
+ <listitem>
+ <literal>cache.s3.accessKeyId</literal>
+ -
+ Amazon S3 Access Key, available from your account profile.
+ </listitem>
+
+ <listitem>
+ <literal>cache.s3.secretAccessKey</literal>
+ -
+ Amazon S3 Secret Access Key, available from your account profile.
+ As this is a password, be careful not to distribute it or include
+ this secret key in built software.
+ </listitem>
+
+ <listitem>
+ <literal>cache.s3.secure</literal>
+ -
+ The default is<literal>false</literal>:
+ Traffic is sent unencrypted over the public Internet.
+ Set to
+ <literal>true</literal>
+ to use HTTPS.
+ Note that unencrypted uploads and downloads use less CPU.
+ </listitem>
+
+ <listitem>
+ <literal>cache.s3.bucket</literal>
+ -
+ Name of the bucket to store data.
+ For different caches using the same access key, use a different bucket name.
+ Read the S3 documentation on the definition of a bucket.
+ The default value is<literal>jboss-cache</literal>.
+ </listitem>
+
+ <listitem>
+ <literal>cache.s3.callingFormat</literal>
+ -
+ One of<literal>PATH</literal>,<literal>SUBDOMAIN</literal>, or
+ <literal>VANITY</literal>.
+ Read the S3 documentation on the use of calling domains.
+ The default value is<literal>SUBDOMAIN</literal>.
+ </listitem>
+
+ <listitem>
+ <literal>cache.s3.optimize</literal>
+ -
+ The default is<literal>false</literal>.
+ If true,
+ <literal>put(Map)</literal>
+ operations
+ replace the data stored at an Fqn rather than attempt
+ to fetch and merge. (This option is fairly experimental
+ at the moment.)
+ </listitem>
+
+ <listitem>
+ <literal>cache.s3.parentCache</literal>
+ -
+ The default is<literal>true</literal>.
+ Set this value to
+ <literal>false</literal>
+ if you are using multiple caches
+ sharing the same S3 bucket, that remove parent nodes of nodes being created
+ in other caches. (This is not a common use case.)
+ <para>
+ JBoss Cache stores nodes in a tree format and automatically
+ creates intermediate parent nodes as necessary.
+ The S3 cache loader must also create these parent nodes as well
+ to allow for operations such as
+ <literal>getChildrenNames</literal>
+ to work
+ properly. Checking if all parent nodes exists for every
+ <literal>put</literal>
+ operation is fairly expensive, so by default the cache loader caches
+ the existence of these parent nodes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <literal>cache.s3.location</literal>
+ -
+ This choses a primary storage location for your data
+ to reduce loading and retrieval latency.
+ Set to
+ <literal>EU</literal>
+ to store data in Europe.
+ The default is<literal>null</literal>, to store data in
+ the United States.
+ </listitem>
+ </itemizedlist>
+ </para>
+ </section>
+
+ </section>
+
+ <section id="cl.tcp">
+ <title>TcpDelegatingCacheLoader</title>
+
+ <para>This cache loader allows to delegate loads and stores to another
+ instance of JBoss Cache, which could reside (a) in the same address
+ space, (b) in a different process on the same host, or (c) in a
+ different process on a different host.
+ </para>
+
+ <para>A TcpDelegatingCacheLoader talks to a remote
+ <literal>org.jboss.cache.loader.tcp.TcpCacheServer</literal>
+ ,
+ which can be a standalone process started on the command line, or embedded as an MBean inside
+ JBoss AS. The
+ <literal>TcpCacheServer</literal>
+ has a reference to another JBoss Cache instance, which
+ it can create itself, or which is given to it (e.g. by JBoss, using
+ dependency injection).
+ </para>
+
+ <para>
+ As of JBoss Cache 2.1.0, the
+ <literal>TcpDelegatingCacheLoader</literal>
+ transparently handles reconnects if the connection
+ to the TcpCacheServer is lost.
+ </para>
+
+ <para>The TcpDelegatingCacheLoader is configured with the host and port of the remote TcpCacheServer, and
+ uses
+ this to communicate to
+ it. In addition, 2 new optional parameters are used to control transparent reconnecting to the
+ TcpCacheServer.
+ The
+ <literal>timeout</literal>
+ property (defaults to 5000) specifies the length of time the cache loader must continue
+ retrying to connect to the TcpCacheServer before giving up and throwing an exception. The
+ <literal>reconnectWaitTime</literal>
+ (defaults to 500) is how long the cache loader should wait before attempting a reconnect if it detects a
+ communication failure.
+ The last two parameters can be used to add a level of fault tolerance to the cache loader, do deal with
+ TcpCacheServer restarts.
+ </para>
+
+ <para>The configuration looks as follows:</para>
+
+ <programlisting role="XML"><![CDATA[
+ <loaders passivation="false" shared="false">
+ <preload>
+ <node fqn="/"/>
+ </preload>
+ <!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
+ <loader class="org.jboss.cache.loader.TcpDelegatingCacheLoader">
+ <properties>
+ host=myRemoteServer
+ port=7500
+ timeout=10000
+ reconnectWaitTime=250
+ </properties>
+ </loader>
+ </loaders>
+]]></programlisting>
+
+ <para>This means this instance of JBoss Cache will delegate all load
+ and store requests to the remote TcpCacheServer running on
+ <literal>myRemoteServer:7500</literal>
+ .
+ </para>
+
+ <para>A typical use case could be multiple replicated instances of
+ JBoss Cache in the same cluster, all delegating to the same
+ TcpCacheServer instance. The TcpCacheServer might itself delegate to a
+ database via JDBCCacheLoader, but the point here is that - if we have
+ 5 nodes all accessing the same dataset - they will load the data from
+ the TcpCacheServer, which has do execute one SQL statement per
+ unloaded data set. If the nodes went directly to the database, then
+ we'd have the same SQL executed multiple times. So TcpCacheServer
+ serves as a natural cache in front of the DB (assuming that a network
+ round trip is faster than a DB access (which usually also include a
+ network round trip)).
+ </para>
+
+ <para>To alleviate single point of failure, we could configure several cache loaders.
+ The first cache loader is a ClusteredCacheLoader, the second a TcpDelegatingCacheLoader, and the
+ last a JDBCacheLoader, effectively defining our cost of access to a
+ cache in increasing order.
+ </para>
+
+ </section>
+
+ <section id="cl.transforming">
+ <title>Transforming Cache Loaders</title>
+
+ <para>The way cached data is written to
+ <literal>FileCacheLoader</literal>
+ and
+ <literal>JDBCCacheLoader</literal>
+ based cache stores has changed in JBoss Cache 2.0 in such way that
+ these cache loaders now write and read data using the same marhalling framework used to replicate data
+ across the network. Such change is trivial for replication purposes as it just requires the rest of the
+ nodes to understand this format. However, changing the format of the data in cache stores brings up a
+ new
+ problem: how do users, which have their data stored in JBoss Cache 1.x.x format, migrate their stores to
+ JBoss Cache 2.0 format?
+ </para>
+
+ <para>With this in mind, JBoss Cache 2.0 comes with two cache loader implementations called
+ <literal>org.jboss.cache.loader.TransformingFileCacheLoader</literal>
+ and
+ <literal>org.jboss.cache.loader.TransformingJDBCCacheLoader</literal>
+ located within the optional
+ jbosscache-cacheloader-migration.jar file. These are one-off cache loaders that read data from the
+ cache store in JBoss Cache 1.x.x format and write data to cache stores in JBoss Cache 2.0 format.
+ </para>
+
+ <para>The idea is for users to modify their existing cache configuration file(s) momentarily to use these
+ cache loaders and for them to create a small Java application that creates an instance of this cache,
+ recursively reads the entire cache and writes the data read back into the cache. Once the data is
+ transformed, users can revert back to their original cache configuration file(s). In order to help the
+ users
+ with this task, a cache loader migration example has been constructed which can be located under the
+ <literal>examples/cacheloader-migration</literal>
+ directory within the JBoss Cache distribution. This
+ example, called
+ <literal>examples.TransformStore</literal>
+ , is independent of the actual data stored in
+ the cache as it writes back whatever it was read recursively. It is highly recommended that anyone
+ interested in porting their data run this example first, which contains a
+ <literal>readme.txt</literal>
+ file with detailed information about the example itself, and also use it as base for their own
+ application.
+ </para>
+
+ </section>
+
+ </section>
+
+
+ <section id="cl.pass">
+ <title>Cache Passivation</title>
+
+ <para>A cache loader can be used to enforce node passivation and
+ activation on eviction in a cache.
+ </para>
+
+ <para>
+ <emphasis>Cache Passivation</emphasis>
+ is the process of removing
+ an object from in-memory cache and writing it to a secondary data store
+ (e.g., file system, database) on eviction.
+ <emphasis>Cache
+ Activation
+ </emphasis>
+ is the process of restoring an object from the
+ data store into the in-memory cache when it's needed to be used. In both
+ cases, the configured cache loader will be used to read from the data
+ store and write to the data store.
+ </para>
+
+ <para>When an eviction policy in effect evicts a node
+ from the cache, if passivation is enabled, a notification that the node
+ is being passivated will be emitted to the cache listeners and the
+ node and its children will be stored in the cache loader store. When a
+ user attempts to retrieve a node that was evicted earlier, the node is loaded
+ (lazy loaded) from the cache loader store into memory. When
+ the node and its children have been loaded, they're removed from the
+ cache loader and a notification is emitted to the cache listeners
+ that the node has been activated.
+ </para>
+
+ <para>To enable cache passivation/activation, you can set
+ <literal>passivation</literal>
+ to true. The default is
+ <literal>false</literal>
+ .
+ When passivation is used, only the first cache loader configured is
+ used and all others are ignored.
+ </para>
+
+ <section>
+ <title>Cache Loader Behavior with Passivation Disabled vs. Enabled</title>
+
+ <para>
+ When passivation is disabled, whenever an element is modified, added or
+ removed, then that modification is persisted in the backend store via
+ the cache loader. There is no direct relationship between eviction and
+ cache loading. If you don't use eviction, what's in the persistent store
+ is basically a copy of what's in memory. If you do use eviction, what's
+ in the persistent store is basically a superset of what's in memory
+ (i.e. it includes nodes that have been evicted from memory).
+ </para>
+
+ <para>
+ When passivation is enabled, there is a direct relationship between
+ eviction and the cache loader. Writes to the persistent store via the
+ cache loader only occur as part of the eviction process. Data is deleted
+ from the persistent store when the application reads it back into
+ memory. In this case, what's in memory and what's in the persistent
+ store are two subsets of the total information set, with no intersection between the subsets.
+ </para>
+
+ <para>
+ Following is a simple example, showing what state is in RAM and in the
+ persistent store after each step of a 6 step process:
+ </para>
+
+ <orderedlist>
+ <listitem>Insert /A</listitem>
+ <listitem>Insert /B</listitem>
+ <listitem>Eviction thread runs, evicts /A</listitem>
+ <listitem>Read /A</listitem>
+ <listitem>Eviction thread runs, evicts /B</listitem>
+ <listitem>Remove /B</listitem>
+ </orderedlist>
+
+ <para>When passivation is disabled:</para>
+ <programlisting>
+ 1) Memory: /A Disk: /A
+ 2) Memory: /A, /B Disk: /A, /B
+ 3) Memory: /B Disk: /A, /B
+ 4) Memory: /A, /B Disk: /A, /B
+ 5) Memory: /A Disk: /A, /B
+ 6) Memory: /A Disk: /A
+ </programlisting>
+
+ <para>When passivation is enabled:</para>
+ <programlisting>
+ 1) Memory: /A Disk:
+ 2) Memory: /A, /B Disk:
+ 3) Memory: /B Disk: /A
+ 4) Memory: /A, /B Disk:
+ 5) Memory: /A Disk: /B
+ 6) Memory: /A Disk:
+ </programlisting>
+ </section>
+
+ </section>
+
+ <section>
+ <title>Strategies</title>
+ <para>
+ This section discusses different patterns of combining different cache loader types and configuration
+ options to achieve specific outcomes.
+ </para>
+
+ <section>
+ <title>Local Cache With Store</title>
+
+ <para>This is the simplest case. We have a JBoss Cache instance, whose
+ cache mode is
+ <literal>LOCAL</literal>
+ , therefore no replication is going
+ on. The cache loader simply loads non-existing elements from the store
+ and stores modifications back to the store. When the cache is started,
+ depending on the
+ <literal>preload</literal>
+ element, certain data can
+ be preloaded, so that the cache is partly warmed up.
+ </para>
+ </section>
+
+ <section>
+ <title>Replicated Caches With All Caches Sharing The Same Store</title>
+
+ <para>The following figure shows 2 JBoss Cache instances sharing the same
+ backend store:
+ </para>
+
+ <figure>
+ <title>2 nodes sharing a backend store</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="SharedCacheLoader.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Both nodes have a cache loader that accesses a common shared
+ backend store. This could for example be a shared filesystem (using
+ the FileCacheLoader), or a shared database. Because both nodes access
+ the same store, they don't necessarily need state transfer on
+ startup.
+ <footnote>
+ <para>Of course they can enable state transfer, if they want to
+ have a warm or hot cache after startup.
+ </para>
+ </footnote>
+ Rather, the
+ <literal>FetchInMemoryState</literal>
+ attribute could be set to false, resulting in a 'cold' cache, that
+ gradually warms up as elements are accessed and loaded for the first
+ time. This would mean that individual caches in a cluster might have
+ different in-memory state at any given time (largely depending on
+ their preloading and eviction strategies).
+ </para>
+
+ <para>When storing a value, the writer takes care of storing the
+ change in the backend store. For example, if node1 made change C1 and
+ node2 C2, then node1 would tell its cache loader to store C1, and node2
+ would tell its cache loader to store C2.
+ </para>
+ </section>
+
+ <section>
+ <title>Replicated Caches With Only One Cache Having A Store</title>
+
+ <figure>
+ <title>2 nodes but only one accesses the backend store</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="OnlyOneCacheLoader.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>This is a similar case to the previous one, but here only one
+ node in the cluster interacts with a backend store via its
+ cache loader. All other nodes perform in-memory replication. The idea
+ here is all application state is kept in memory in each node, with
+ the existence of multiple caches making the data highly available.
+ (This assumes that a client that needs the data is able to somehow
+ fail over from one cache to another.) The single persistent backend
+ store then provides a backup copy of the data in case all caches in
+ the cluster fail or need to be restarted.
+ </para>
+ <para>
+ Note that here it may make sense for the cache loader to store
+ changes asynchronously, that is
+ <emphasis>not</emphasis>
+ on the caller's thread, in order not to slow
+ down the cluster by accessing (for example) a database. This is a
+ non-issue when using asynchronous replication.
+ </para>
+ <para>
+ A weakness with this architecture is that the cache with access
+ to the cache loader becomes a single point of failure. Furthermore,
+ if the cluster is restarted, the cache with the cache loader must
+ be started first (easy to forget). A solution to the first problem
+ is to configure a cache loader on each node, but set the
+ <literal>singletonStore</literal>
+ configuration to
+ <literal>true</literal>. With this kind of setup, one but only one
+ node will always be writing to a persistent store. However, this
+ complicates the restart problem, as before restarting you need
+ to determine which cache was writing before the shutdown/failure
+ and then start that cache first.
+ </para>
+ </section>
+
+ <section>
+ <title>Replicated Caches With Each Cache Having Its Own Store</title>
+
+ <figure>
+ <title>2 nodes each having its own backend store</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="LocalCacheLoader.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Here, each node has its own datastore. Modifications to the
+ cache are (a) replicated across the cluster and (b) persisted using
+ the cache loader. This means that all datastores have exactly the same
+ state. When replicating changes synchronously and in a transaction,
+ the two phase commit protocol takes care that all modifications are
+ replicated and persisted in each datastore, or none is replicated and
+ persisted (atomic updates).
+ </para>
+
+ <para>Note that JBoss Cache is
+ <emphasis>not</emphasis>
+ an
+ XA Resource, that means it doesn't implement recovery. When used with a
+ transaction manager that supports recovery, this functionality is not
+ available.
+ </para>
+
+ <para>The challenge here is state transfer: when a new node starts it
+ needs to do the following:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>Tell the coordinator (oldest node in a cluster) to send it
+ the state. This is always a full state transfer, overwriting
+ any state that may already be present.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>The coordinator then needs to wait until all in-flight
+ transactions have completed. During this time, it will not allow
+ for new transactions to be started.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Then the coordinator asks its cache loader for the entire
+ state using
+ <literal>loadEntireState()</literal>
+ . It then sends
+ back that state to the new node.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>The new node then tells its cache loader to store that state
+ in its store, overwriting the old state. This is the
+ <literal>CacheLoader.storeEntireState()</literal>
+ method
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>As an option, the transient (in-memory) state can be
+ transferred as well during the state transfer.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>The new node now has the same state in its backend store as
+ everyone else in the cluster, and modifications received from
+ other nodes will now be persisted using the local
+ cache loader.
+ </para>
+ </listitem>
+ </orderedlist>
+
+
+ </section>
+
+ <section>
+ <title>Hierarchical Caches</title>
+
+ <para>If you need to set up a hierarchy within a single JVM, you can
+ use the
+ <literal>LocalDelegatingCacheLoader</literal>
+ . This type of
+ hierarchy can currently only be set up programmatically.
+ </para>
+
+ <para>
+ Hierarchical caches could also be set up spanning more than one JVM or server, using the
+ <literal>TcpDelegatingCacheLoader</literal>
+ .
+ <figure>
+ <title>TCP delegating cache loader</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="DelegatingCacheLoader.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ </para>
+
+ </section>
+
+
+ <section>
+ <title>Multiple Cache Loaders</title>
+
+ <para>
+ You can set up more than one cache loader in a chain. Internally, a delegating
+ <literal>ChainingCacheLoader</literal>
+ is used, with references to each
+ cache loader you have configured. Use cases vary depending on the type of cache loaders used in the
+ chain.
+ One example is
+ using a filesystem based cache loader, co-located on the same host as the JVM, used as an overflow for
+ memory. This ensures
+ data is available relatively easily and with low cost. An additional remote cache loader, such as a
+ <literal>TcpDelegatingCacheLoader</literal>
+ provides resilience between server restarts.
+ </para>
+
+ <figure>
+ <title>Multiple cache loaders in a chain</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="MultipleCacheLoaders.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ </section>
+
+
+ </section>
+
+
+</chapter>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/compatibility.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/compatibility.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/compatibility.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,48 @@
+<chapter id="compatibility">
+ <title>Version Compatibility and Interoperability</title>
+
+ <section>
+ <title>API compatibility</title>
+ <para>
+ Within a major version, releases of JBoss Cache are meant to be compatible and
+ interoperable. Compatible in the sense that it should be possible to
+ upgrade an application from one version to another by simply replacing
+ jars. Interoperable in the sense that if two different versions of
+ JBoss Cache are used in the same cluster, they should be able to exchange
+ replication and state transfer messages. Note however that interoperability
+ requires use of the same JGroups version in all nodes in the cluster.
+ In most cases, the version of JGroups used by a version of JBoss Cache can
+ be upgraded.
+ </para>
+
+ <para>
+ As such, JBoss Cache 2.x.x is not API or binary compatible with prior 1.x.x versions.
+ On the other hand, JBoss Cache 2.1.x will be API and binary compatible with 2.0.x.
+ </para>
+
+ <para>
+ We have made best efforts, however, to keep JBoss Cache 3.x both binary and API compatible with 2.x. Still,
+ it is recommended that client code is updated not to use deprecated methods, classes and configuration files.
+ </para>
+ </section>
+ <section>
+ <title>Wire-level interoperability</title>
+
+ <para>
+ A configuration parameter, <literal>Configuration.setReplicationVersion()</literal>, is available and is used
+ to control the wire format of inter-cache communications. They can be wound back from more
+ efficient and newer protocols to "compatible" versions when talking to older releases.
+ This mechanism allows us to improve JBoss Cache by using more efficient wire formats while
+ still providing a means to preserve interoperability.
+ </para>
+ </section>
+ <section>
+ <title>Compatibility Matrix</title>
+ <para>
+ A <ulink url="http://www.jboss.org/jbosscache/compatibility/index.html">compatibility matrix</ulink> is
+ maintained on the JBoss Cache website, which contains information on different versions of JBoss Cache,
+ JGroups and JBoss Application Server.
+ </para>
+ </section>
+
+</chapter>
\ No newline at end of file
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/configuration.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/configuration.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/configuration.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,337 @@
+<chapter id="configuration">
+ <title>Configuration</title>
+
+ <section>
+ <title>Configuration Overview</title>
+
+ <para>
+ The
+ <literal>org.jboss.cache.config.Configuration</literal>
+ class (along with its <link linkend="configuration.elements">component parts</link>)
+ is a Java Bean that encapsulates the configuration of the <literal>Cache</literal>
+ and all of its architectural elements (cache loaders, evictions policies, etc.)
+ </para>
+
+ <para>
+ The <literal>Configuration</literal> exposes numerous properties which
+ are summarized in the <link linkend="configuration_reference">configuration reference</link>
+ section of this book and many of which are discussed in later chapters. Any time you see a configuration option
+ discussed in this book, you can assume that the <literal>Configuration</literal>
+ class or one of its component parts exposes a simple property setter/getter for that configuration option.
+ </para>
+
+ </section>
+
+ <section id="configuration.creation">
+ <title>Creating a
+ <literal>Configuration</literal>
+ </title>
+
+ <para>
+ As discussed in the <link linkend="api.create_start">User API section</link>,
+ before a <literal>Cache</literal> can be created, the <literal>CacheFactory</literal>
+ must be provided with a <literal>Configuration</literal> object or with a file name or
+ input stream to use to parse a <literal>Configuration</literal> from XML. The following sections describe
+ how to accomplish this.
+ </para>
+
+ <section>
+ <title>Parsing an XML-based Configuration File</title>
+ <para>
+ The most convenient way to configure JBoss Cache is via an XML file. The JBoss Cache distribution ships
+ with a number of configuration files for common use cases. It is recommended that these files be used as
+ a starting point, and tweaked to meet specific needs.
+ </para>
+
+ <para>
+ The simplest example of a configuration XML file, a cache configured to run in LOCAL mode, looks like this:
+ </para>
+ <programlisting role="XML"><![CDATA[
+
+<?xml version="1.0" encoding="UTF-8"?>
+
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:jboss:jbosscache-core:config:3.1">
+</jbosscache>
+
+
+]]></programlisting>
+
+ <para>
+ This file uses sensible defaults for isolation levels, lock acquisition timeouts, locking modes, etc. Another,
+ more complete, sample XML file is included in the
+ <link linkend="sample_xml_file">configuration reference</link>
+ section of this book,
+ along with
+ <link linkend="configuration_reference">a handy look-up table</link>
+ explaining the various options.
+ </para>
+ </section>
+ <section id="configuration.validation">
+ <title>Validating Configuration Files</title>
+ <para>
+ By default JBoss Cache will validate your XML configuration file against an XML schema and throw an
+ exception if the configuration is invalid. This can be overridden with the <literal>-Djbosscache.config.validate=false</literal>
+ JVM parameter. Alternately, you could specify your own schema to validate against, using the
+ <literal>-Djbosscache.config.schemaLocation=url</literal> parameter.
+ </para>
+ <para>
+ By default though, configuration files are validated against the JBoss Cache configuration schema, which is
+ included in the <literal>jbosscache-core.jar</literal> or on <literal>http://www.jboss.org/jbosscache/jbosscache-config-3.0.xsd</literal>.
+ Most XML editing tools can be used with this schema to ensure the configuration file you create is correct
+ and valid.
+ </para>
+ </section>
+
+ <section>
+ <title>Programmatic Configuration</title>
+ <para>
+ In addition to the XML-based configuration above, the
+ <literal>Configuration</literal>
+ can be built up programatically,
+ using the simple property mutators exposed by
+ <literal>Configuration</literal>
+ and its components. When constructed,
+ the
+ <literal>Configuration</literal>
+ object is preset with JBoss Cache
+ defaults and can even be used as-is for a quick start.
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[
+ Configuration config = new Configuration();
+ config.setTransactionManagerLookupClass( GenericTransactionManagerLookup.class.getName() );
+ config.setIsolationLevel(IsolationLevel.READ_COMMITTED);
+ config.setCacheMode(CacheMode.LOCAL);
+ config.setLockAcquisitionTimeout(15000);
+
+ CacheFactory factory = new DefaultCacheFactory();
+ Cache cache = factory.createCache(config);
+]]></programlisting>
+
+ <para>
+ Even the above fairly simple configuration is pretty tedious programming;
+ hence the preferred use of XML-based configuration. However, if your
+ application requires it, there is no reason not to use XML-based
+ configuration for most of the attributes, and then access the
+ <literal>Configuration</literal>
+ object to programatically change
+ a few items from the defaults, add an eviction region, etc.
+ </para>
+
+ <para>
+ Note that configuration values may not be changed programmatically when a cache is running,
+ except those annotated as
+ <literal>@Dynamic</literal>
+ . Dynamic properties are also marked as such in the
+ <link linkend="configuration_reference">configuration reference</link>
+ table. Attempting to change a non-dynamic
+ property will result in a
+ <literal>ConfigurationException</literal>
+ .
+ </para>
+ </section>
+
+ <section>
+ <title>Using an IOC Framework</title>
+
+ <para>
+ The
+ <literal>Configuration</literal>
+ class and its
+ <link linkend="configuration.elements">component parts</link>
+ are all Java Beans that expose all config elements via simple setters
+ and getters. Therefore, any good IOC framework such as Spring, Google Guice, JBoss Microcontainer, etc. should be able to
+ build up a
+ <literal>Configuration</literal>
+ from an XML file in
+ the framework's own format. See the
+ <link linkend="deployment.microcontainer">deployment via the JBoss micrcontainer</link>
+ section for an example of this.
+ </para>
+ </section>
+ </section>
+
+ <section id="configuration.elements">
+ <title>Composition of a
+ <literal>Configuration</literal>
+ Object
+ </title>
+
+ <para>
+ A
+ <literal>Configuration</literal>
+ is composed of a number of
+ subobjects:
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="Configuration.png"/>
+ </imageobject>
+ </mediaobject>
+ </para>
+
+ <para>
+ Following is a brief overview of the components of a
+ <literal>Configuration</literal>
+ . See the javadoc and the linked
+ chapters in this book for a more complete explanation of the
+ configurations associated with each component.
+
+ <itemizedlist>
+ <listitem>
+ <literal>Configuration</literal>
+ : top level object
+ in the hierarchy; exposes the configuration properties listed in the
+ <link linkend="configuration_reference">configuration reference</link>
+ section of this book.
+ </listitem>
+
+ <listitem>
+ <literal>BuddyReplicationConfig</literal>
+ : only relevant if
+ <link linkend="br">buddy replication</link>
+ is used. General
+ buddy replication configuration options. Must include a:
+ </listitem>
+
+ <listitem>
+ <literal>BuddyLocatorConfig</literal>
+ : implementation-specific
+ configuration object for the
+ <literal>BuddyLocator</literal>
+ implementation
+ being used. What configuration elements are exposed depends on
+ the needs of the
+ <literal>BuddyLocator</literal>
+ implementation.
+ </listitem>
+
+ <listitem>
+ <literal>EvictionConfig</literal>
+ : only relevant if
+ <link linkend="eviction_policies">eviction</link>
+ is used. General
+ eviction configuration options. Must include at least one:
+ </listitem>
+
+ <listitem>
+ <literal>EvictionRegionConfig</literal>
+ : one for each
+ eviction region; names the region, etc. Must include a:
+ </listitem>
+
+ <listitem>
+ <literal>EvictionAlgorithmConfig</literal>
+ : implementation-specific
+ configuration object for the
+ <literal>EvictionAlgorithm</literal>
+ implementation
+ being used. What configuration elements are exposed depends on
+ the needs of the
+ <literal>EvictionAlgorithm</literal>
+ implementation.
+ </listitem>
+
+ <listitem>
+ <literal>CacheLoaderConfig</literal>
+ : only relevant if a
+ <link linkend="cache_loaders">cache loader</link>
+ is used. General
+ cache loader configuration options. Must include at least one:
+ </listitem>
+
+ <listitem>
+ <literal>IndividualCacheLoaderConfig</literal>
+ : implementation-specific
+ configuration object for the
+ <literal>CacheLoader</literal>
+ implementation
+ being used. What configuration elements are exposed depends on
+ the needs of the
+ <literal>CacheLoader</literal>
+ implementation.
+ </listitem>
+
+ <listitem>
+ <literal>RuntimeConfig</literal>
+ : exposes to cache clients
+ certain information about the cache's runtime environment (e.g. membership
+ in buddy replication groups if
+ <link linkend="br">buddy replication</link>
+ is used.) Also allows
+ direct injection into the cache of needed external services like a
+ JTA
+ <literal>TransactionManager</literal>
+ or a JGroups
+ <literal>ChannelFactory</literal>
+ .
+ </listitem>
+ </itemizedlist>
+ </para>
+ </section>
+
+ <section>
+ <title>Dynamic Reconfiguration</title>
+ <para>
+ Dynamically changing the configuration of
+ <emphasis>some</emphasis>
+ options while the cache is running is supported,
+ by programmatically obtaining the
+ <literal>Configuration</literal>
+ object from the running cache and changing values. E.g.,
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+ Configuration liveConfig = cache.getConfiguration();
+ liveConfig.setLockAcquisitionTimeout(2000);
+ ]]></programlisting>
+ <para>
+ A complete listing of which options may be changed dynamically is in the
+ <link linkend="configuration_reference">configuration reference</link>
+ section. An
+ <literal>org.jboss.cache.config.ConfigurationException</literal>
+ will be thrown if you attempt to change a
+ setting that is not dynamic.
+ </para>
+
+ <section id="configuration.options">
+ <title>Overriding the Configuration via the Option API</title>
+ <para>
+ The Option API allows you to override certain behaviours of the cache on a per invocation basis.
+ This involves creating an instance of
+ <literal>org.jboss.cache.config.Option</literal>
+ , setting the options
+ you wish to override on the
+ <literal>Option</literal>
+ object and passing it in the
+ <literal>InvocationContext</literal>
+ before invoking your method on the cache.
+ </para>
+ <para>
+ E.g., to force a write lock when reading data (when used in a transaction, this provides semantics
+ similar to SELECT FOR UPDATE in a database)
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+ // first start a transaction
+ cache.getInvocationContext().getOptionOverrides().setForceWriteLock(true);
+ Node n = cache.getNode(Fqn.fromString("/a/b/c"));
+ // make changes to the node
+ // commit transaction
+ ]]></programlisting>
+
+ <para>
+ E.g., to suppress replication of a put call in a REPL_SYNC cache:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+ Node node = cache.getChild(Fqn.fromString("/a/b/c"));
+ cache.getInvocationContext().getOptionOverrides().setLocalOnly(true);
+ node.put("localCounter", new Integer(2));
+ ]]></programlisting>
+ <para>
+ See the javadocs on the
+ <literal>Option</literal>
+ class for details on the options available.
+ </para>
+ </section>
+ </section>
+</chapter>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/configuration_reference.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/configuration_reference.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/configuration_reference.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,3403 @@
+<chapter id="configuration_reference_chapter">
+ <title>Configuration References</title>
+ <section id="sample_xml_file">
+ <title>Sample XML Configuration File</title>
+ <para>
+ This is what a typical XML configuration file looks like. It is recommended that you use one of the
+ configurations shipped with the JBoss Cache distribution and tweak according to your needs rather than write
+ one from scratch.
+ </para>
+ <programlisting role="XML"><![CDATA[
+<?xml version="1.0" encoding="UTF-8"?>
+
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.1">
+
+
+ <!--
+ isolation levels supported: READ_COMMITTED and REPEATABLE_READ
+ nodeLockingSchemes: mvcc, pessimistic (deprecated), optimistic (deprecated)
+ -->
+ <locking
+ isolationLevel="REPEATABLE_READ"
+ lockParentForChildInsertRemove="false"
+ lockAcquisitionTimeout="20000"
+ nodeLockingScheme="mvcc"
+ writeSkewCheck="false"
+ useLockStriping="true"
+ concurrencyLevel="500"/>
+
+ <!--
+ Used to register a transaction manager and participate in ongoing transactions.
+ -->
+ <transaction
+ transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"
+ syncRollbackPhase="false"
+ syncCommitPhase="false"/>
+
+ <!--
+ Used to register JMX statistics in any available MBean server
+ -->
+ <jmxStatistics
+ enabled="false"/>
+
+ <!--
+ If region based marshalling is used, defines whether new regions are inactive on startup.
+ -->
+ <startup
+ regionsInactiveOnStartup="true"/>
+
+ <!--
+ Used to register JVM shutdown hooks.
+ hookBehavior: DEFAULT, REGISTER, DONT_REGISTER
+ -->
+ <shutdown
+ hookBehavior="DEFAULT"/>
+
+ <!--
+ Used to define async listener notification thread pool size
+ -->
+ <listeners
+ asyncPoolSize="1"
+ asyncQueueSize="100000"/>
+
+ <!--
+ Used to enable invocation batching and allow the use of Cache.startBatch()/endBatch() methods.
+ -->
+ <invocationBatching
+ enabled="false"/>
+
+ <!--
+ serialization related configuration, used for replication and cache loading
+ -->
+ <serialization
+ objectInputStreamPoolSize="12"
+ objectOutputStreamPoolSize="14"
+ version="3.0.0"
+ marshallerClass="org.jboss.cache.marshall.VersionAwareMarshaller"
+ useLazyDeserialization="false"
+ useRegionBasedMarshalling="false"/>
+
+ <!--
+ This element specifies that the cache is clustered.
+ modes supported: replication (r) or invalidation (i).
+ -->
+ <clustering mode="replication" clusterName="JBossCache-cluster">
+
+ <!--
+ Defines whether to retrieve state on startup
+ -->
+ <stateRetrieval timeout="20000" fetchInMemoryState="false"/>
+
+ <!--
+ Network calls are synchronous.
+ -->
+ <sync replTimeout="20000"/>
+ <!--
+ Uncomment this for async replication.
+ -->
+ <!--<async useReplQueue="true" replQueueInterval="10000" replQueueMaxElements="500" serializationExecutorPoolSize="20" serializationExecutorQueueSize="5000000"/>-->
+
+ <!-- Uncomment to use Buddy Replication -->
+ <!--
+ <buddy enabled="true" poolName="myBuddyPoolReplicationGroup" communicationTimeout="2000">
+ <dataGravitation auto="true" removeOnFind="true" searchBackupTrees="true"/>
+ <locator class="org.jboss.cache.buddyreplication.NextMemberBuddyLocator">
+ <properties>
+ numBuddies = 1
+ ignoreColocatedBuddies = true
+ </properties>
+ </locator>
+ </buddy>
+ -->
+
+ <!--
+ Configures the JGroups channel. Looks up a JGroups config file on the classpath or filesystem. udp.xml
+ ships with jgroups.jar and will be picked up by the class loader.
+ -->
+ <jgroupsConfig configFile="udp.xml">
+ <!-- uncomment to define a JGroups stack here
+
+ <PING timeout="2000" num_initial_members="3"/>
+ <MERGE2 max_interval="30000" min_interval="10000"/>
+ <FD_SOCK/>
+ <FD timeout="10000" max_tries="5" shun="true"/>
+ <VERIFY_SUSPECT timeout="1500"/>
+ <pbcast.NAKACK use_mcast_xmit="false" gc_lag="0"
+ retransmit_timeout="300,600,1200,2400,4800"
+ discard_delivered_msgs="true"/>
+ <UNICAST timeout="300,600,1200,2400,3600"/>
+ <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
+ max_bytes="400000"/>
+ <pbcast.GMS print_local_addr="true" join_timeout="5000" shun="false"
+ view_bundling="true" view_ack_collection_timeout="5000"/>
+ <FRAG2 frag_size="60000"/>
+ <pbcast.STREAMING_STATE_TRANSFER use_reading_thread="true"/>
+ <pbcast.FLUSH timeout="0"/>
+ -->
+ </jgroupsConfig>
+ </clustering>
+
+ <!--
+ Eviction configuration. WakeupInterval defines how often the eviction thread runs, in milliseconds. 0 means
+ the eviction thread will never run.
+ -->
+ <eviction wakeUpInterval="500">
+ <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000">
+ <property name="maxNodes" value="5000" />
+ <property name="timeToLive" value="1000" />
+ </default>
+ <region name="/org/jboss/data1">
+ <property name="timeToLive" value="2000" />
+ </region>
+ <region name="/org/jboss/data2" algorithmClass="org.jboss.cache.eviction.FIFOAlgorithm" eventQueueSize="100000">
+ <property name="maxNodes" value="3000" />
+ <property name="minTimeToLive" value="4000" />
+ </region>
+ </eviction>
+
+ <!--
+ Cache loaders.
+
+ If passivation is enabled, state is offloaded to the cache loaders ONLY when evicted. Similarly, when the state
+ is accessed again, it is removed from the cache loader and loaded into memory.
+
+ Otherwise, state is always maintained in the cache loader as well as in memory.
+
+ Set 'shared' to true if all instances in the cluster use the same cache loader instance, e.g., are talking to the
+ same database.
+ -->
+ <loaders passivation="false" shared="false">
+ <preload>
+ <node fqn="/org/jboss"/>
+ <node fqn="/org/tempdata"/>
+ </preload>
+
+ <!--
+ we can have multiple cache loaders, which get chained
+ -->
+ <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="true" fetchPersistentState="true"
+ ignoreModifications="true" purgeOnStartup="true">
+ <properties>
+ cache.jdbc.table.name=jbosscache
+ cache.jdbc.table.create=true
+ cache.jdbc.table.drop=true
+ </properties>
+ <singletonStore enabled="true" class="org.jboss.cache.loader.SingletonStoreCacheLoader">
+ <properties>
+ pushStateWhenCoordinator=true
+ pushStateWhenCoordinatorTimeout=20000
+ </properties>
+ </singletonStore>
+ </loader>
+ </loaders>
+
+ <!--
+ Define custom interceptors. All custom interceptors need to extend org.jboss.cache.interceptors.base.CommandInterceptor
+ -->
+ <!--
+ <customInterceptors>
+ <interceptor position="first" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor">
+ <property name="attrOne" value="value1" />
+ <property name="attrTwo" value="value2" />
+ </interceptor>
+ <interceptor position="last" class="org.jboss.cache.config.parsing.custominterceptors.BbbCustomInterceptor"/>
+ <interceptor index="3" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"/>
+ <interceptor before="org.jboss.cache.interceptors.CallInterceptor"
+ class="org.jboss.cache.config.parsing.custominterceptors.BbbCustomInterceptor"/>
+ <interceptor after="org.jboss.cache.interceptors.CallInterceptor"
+ class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"/>
+ </customInterceptors>
+ -->
+</jbosscache>
+
+
+]]></programlisting>
+ <section>
+ <title>XML validation</title>
+ <para>
+ Configuration XML files are validated using an XSD schema. This schema is included in
+ <literal>jbosscache-core.jar</literal> and is also available online: <literal>http://www.jboss.org/jbosscache/jbosscache-config-3.0.xsd</literal>.
+ Most IDEs and XML authoring tools will be able to use this schema to validate your configuration file as you
+ write it.
+ </para>
+ <para>
+ JBoss Cache also validates your configuration file when you start up, and will throw an exception if it
+ encounters an invalid file. You can suppress this behavior by passing in <literal>-Djbosscache.config.validate=false</literal>
+ to your JVM when you start up. Alternatively, you can point the validator to a different schema by
+ passing in <literal>-Djbosscache.config.schemaLocation=url</literal>.
+ </para>
+ </section>
+ </section>
+
+
+ <section id="configuration_reference">
+ <title>
+ Configuration File Quick Reference
+ </title>
+ <para>A list of definitions of each of the XML elements attributes used above, and their bean counterparts for
+ programmatic configuration. If the description of an attribute states that it is <emphasis>dynamic</emphasis>,
+ that means it can be changed after the cache is created and started.
+ </para>
+
+ <table id="element.jbosscache">
+ <title>The <literal><![CDATA[<jbosscache />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<jbosscache />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This is the root element for the JBoss Cache configuration file. This is the only mandatory
+ element in a valid JBoss Cache configuration file.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>none (is root element)</para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>,
+ <link linkend="element.customInterceptors"><literal><![CDATA[<customInterceptors />]]></literal></link>,
+ <link linkend="element.eviction"><literal><![CDATA[<eviction />]]></literal></link>,
+ <link linkend="element.invocationBatching"><literal><![CDATA[<invocationBatching />]]></literal></link>,
+ <link linkend="element.jmxStatistics"><literal><![CDATA[<jmxStatistics />]]></literal></link>,
+ <link linkend="element.listeners"><literal><![CDATA[<listeners />]]></literal></link>,
+ <link linkend="element.loaders"><literal><![CDATA[<loaders />]]></literal></link>,
+ <link linkend="element.locking"><literal><![CDATA[<locking />]]></literal></link>,
+ <link linkend="element.serialization"><literal><![CDATA[<serialization />]]></literal></link>,
+ <link linkend="element.shutdown"><literal><![CDATA[<shutdown />]]></literal></link>,
+ <link linkend="element.startup"><literal><![CDATA[<startup />]]></literal></link>,
+ <link linkend="element.transaction"><literal><![CDATA[<transaction />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean Equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><literal>Configuration</literal></para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.jbosscache">
+ <title><literal><![CDATA[<jbosscache />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<jbosscache />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">xmlns</emphasis></entry>
+ <entry> - </entry>
+ <entry>urn:jboss:jbosscache-core:config:3.1</entry>
+ <entry>urn:jboss:jbosscache-core:config:3.1</entry>
+ <entry>Defines the XML namespace for all configuration entries.</entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">xmlns:xsi</emphasis></entry>
+ <entry> - </entry>
+ <entry>http://www.w3.org/2001/XMLSchema-instance</entry>
+ <entry>http://www.w3.org/2001/XMLSchema-instance</entry>
+ <entry>Defines the XML schema instance for the configuration.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.locking">
+ <title>The <literal><![CDATA[<locking />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<locking />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element specifies locking behavior on the cache.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <para></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><literal>Configuration</literal></para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.locking">
+ <title><literal><![CDATA[<locking />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<locking />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">isolationLevel</emphasis></entry>
+ <entry>isolationLevel</entry>
+ <entry>READ_COMMITTED, REPEATABLE_READ</entry>
+ <entry>REPEATABLE_READ</entry>
+
+ <entry>The isolation level used for transactions.</entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">lockParentForChildInsertRemove</emphasis></entry>
+ <entry>lockParentForChildInsertRemove</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+
+ <entry>Specifies whether parent nodes are locked when inserting or removing children. This
+ can also be configured on a per-node basis (see <literal>Node.setLockForChildInsertRemove()</literal></entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">lockAcquisitionTimeout</emphasis></entry>
+ <entry>lockAcquisitionTimeout
+ (<emphasis>dynamic</emphasis>)</entry>
+ <entry>Any positive long value</entry>
+ <entry>10000</entry>
+
+ <entry>Length of time, in milliseconds, that a thread will try and acquire a lock. A <literal>TimeoutException</literal>
+ is usually thrown if a lock cannot be acquired in this given timeframe. Can be overridden
+ on a per-invocation basis using <literal>Option.setLockAcquisitionTimeout()</literal></entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">nodeLockingScheme</emphasis>
+ (<emphasis>deprecated</emphasis>)</entry>
+ <entry>nodeLockingScheme</entry>
+ <entry>mvcc, pessimistic, optimistic</entry>
+ <entry>mvcc</entry>
+
+ <entry>Specifies the node locking scheme to be used.</entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">writeSkewCheck</emphasis></entry>
+ <entry>writeSkewCheck</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+
+ <entry>Specifies whether to check for write skews. Only used if <literal>nodeLockingScheme</literal>
+ is <literal>mvcc</literal> and <literal>isolationLevel</literal> is <literal>REPEATABLE_READ</literal>.
+ See the <link linkend="mvcc.writeskew">section on write skews</link> for a more detailed discussion.</entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">useLockStriping</emphasis></entry>
+ <entry>useLockStriping</entry>
+ <entry>true, false</entry>
+ <entry>true</entry>
+
+ <entry>Specifies whether lock striping is used. Only used if <literal>nodeLockingScheme</literal>
+ is <literal>mvcc</literal>. Lock striping usually offers greater performance and better memory usage,
+ although in certain cases deadlocks may occur where several Fqns map to the same shared lock. This
+ can be mitigated by increasing your concurrency level, though the only concrete solution is to
+ disable lock striping altogether.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">concurrencyLevel</emphasis></entry>
+ <entry>concurrencyLevel</entry>
+ <entry>Any positive integer; 0 not allowed.</entry>
+ <entry>500</entry>
+
+ <entry>Specifies the number of shared locks to use for write locks acquired. Only used if <literal>nodeLockingScheme</literal>
+ is <literal>mvcc</literal>.
+ See the <link linkend="mvcc.impl">section on JBoss Cache's MVCC implementation</link> for a more detailed discussion.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.transaction">
+ <title>The <literal><![CDATA[<transaction />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<transaction />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element specifies transactional behavior on the cache.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <para></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><literal>Configuration</literal></para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.transaction">
+ <title><literal><![CDATA[<transaction />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<transaction />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">transactionManagerLookupClass</emphasis></entry>
+ <entry>transactionManagerLookupClass</entry>
+ <entry>A valid class that is available on the classpath</entry>
+ <entry>none</entry>
+
+ <entry>Specifies the <literal>TransactionManagerLookupClass</literal> implementation to use to obtain
+ a transaction manager. If not specified (and a <literal>TransactionManager</literal> is not injected
+ using <literal>RuntimeConfig.setTransactionManager()</literal>, the cache will not be able to participate
+ in any transactions.</entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">syncCommitPhase</emphasis></entry>
+ <entry>syncCommitPhase
+ (<emphasis>dynamic</emphasis>)
+ </entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+
+ <entry>If enabled, commit messages that are broadcast around a cluster are done so synchronously. This is
+ usually of little value since detecting a failure in broadcasting a commit means little else can be done
+ except log a message, since some nodes in a cluster may have already committed and cannot rollback.</entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">syncRollbackPhase</emphasis></entry>
+ <entry>syncRollbackPhase
+ (<emphasis>dynamic</emphasis>)
+ </entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+
+ <entry>If enabled, rollback messages that are broadcast around a cluster are done so synchronously. This is
+ usually of little value since detecting a failure in broadcasting a rollback means little else can be done
+ except log a message, since some nodes in a cluster may have already committed and cannot rollback.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.jmxStatistics">
+ <title>The <literal><![CDATA[<jmxStatistics />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<jmxStatistics />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element specifies whether cache statistics are gathered and reported via JMX.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <para></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><literal>Configuration</literal></para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.jmxStatistics">
+ <title><literal><![CDATA[<jmxStatistics />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<jmxStatistics />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">enabled</emphasis></entry>
+ <entry>exposeManagementStatistics</entry>
+ <entry>true, false</entry>
+ <entry>true</entry>
+
+ <entry>Controls whether cache statistics are gathered and exposed via JMX.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.startup">
+ <title>The <literal><![CDATA[<startup />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<startup />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element specifies behavior when the cache starts up.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <para></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><literal>Configuration</literal></para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.startup">
+ <title><literal><![CDATA[<startup />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<startup />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">regionsInactiveOnStartup</emphasis></entry>
+ <entry>inactiveOnStartup</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+
+ <entry>If <link linkend="architecture.regions">region-based marshalling</link> is enabled, this
+ attribute controls whether new regions created are inactive on startup.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.shutdown">
+ <title>The <literal><![CDATA[<shutdown />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<shutdown />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element specifies behavior when the cache shuts down.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <para></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><literal>Configuration</literal></para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.shutdown">
+ <title><literal><![CDATA[<shutdown />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<shutdown />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">hookBehavior</emphasis></entry>
+ <entry>shutdownHookBehavior</entry>
+ <entry>DEFAULT, DONT_REGISTER, REGISTER</entry>
+ <entry>DEFAULT</entry>
+
+ <entry>
+ This attribute determines whether the cache registers a JVM shutdown hook so that it can clean
+ up resources if the JVM is receives a shutdown signal. By default a shutdown hook is registered
+ if no MBean server (apart from the JDK default) is detected. REGSTER forces the cache to register
+ a shutdown hook even if an MBean server is detected, and DONT_REGISTER forces the cache NOT to
+ register a shutdown hook, even if no MBean server is detected.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.listeners">
+ <title>The <literal><![CDATA[<listeners />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<listeners />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element specifies behavior of registered cache listeners.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <para></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><literal>Configuration</literal></para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.listeners">
+ <title><literal><![CDATA[<listeners />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<listeners />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">asyncPoolSize</emphasis></entry>
+ <entry>listenerAsyncPoolSize</entry>
+ <entry>integer</entry>
+ <entry>1</entry>
+
+ <entry>
+ The size of the threadpool used to dispatch events to cache listeners that have registered as
+ asynchronous listeners. If this number is less than 1, all asynchronous listeners will be
+ treated as synchronous listeners and notified synchronously.
+ </entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">asyncQueueSize</emphasis></entry>
+ <entry>listenerAsyncQueueSize</entry>
+ <entry>positive integer</entry>
+ <entry>50000</entry>
+
+ <entry>
+ The size of the bounded queue used by the async listener threadpool. Only considered if
+ <literal>asyncPoolSize</literal> is greater than 0. Increase this if you see a lot of threads
+ blocking trying to add events to this queue.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.invocationBatching">
+ <title>The <literal><![CDATA[<invocationBatching />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<invocationBatching />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element specifies behavior of invocation batching.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <para></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><literal>Configuration</literal></para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.invocationBatching">
+ <title><literal><![CDATA[<invocationBatching />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<invocationBatching />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">enabled</emphasis></entry>
+ <entry>invocationBatchingEnabled</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+
+ <entry>
+ Whether invocation batching is enabled or not. See the chapter on
+ <link linkend="batching">invocation batching</link> for details.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.serialization">
+ <title>The <literal><![CDATA[<serialization />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<serialization />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element specifies behavior of object serialization in JBoss Cache.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <para></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><literal>Configuration</literal></para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.serialization">
+ <title><literal><![CDATA[<serialization />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<serialization />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">marshallerClass</emphasis></entry>
+ <entry>marshallerClass</entry>
+ <entry>A valid class that is available on the classpath</entry>
+ <entry>VersionAwareMarshaller</entry>
+
+ <entry>
+ Specifies the marshaller to use when serializing and deserializing objects, either for replication
+ or persistence.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">useLazyDeserialization</emphasis></entry>
+ <entry>useLazyDeserialization</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+
+ <entry>
+ A mechanism by which serialization and deserialization of objects is deferred till the point in time
+ in which they are used and needed. This typically means that any deserialization happens using the
+ thread context class loader of the invocation that requires deserialization, and is an effective
+ mechanism to provide classloader isolation.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">useRegionBasedMarshalling</emphasis> (<emphasis>deprecated</emphasis>)</entry>
+ <entry>useRegionBasedMarshalling</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+
+ <entry>
+ An older mechanism by which classloader isolation was achieved, by registering classloaders on
+ specific regions.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">version</emphasis></entry>
+ <entry>replicationVersion</entry>
+ <entry>Valid JBoss Cache version string</entry>
+ <entry>Current version</entry>
+
+ <entry>
+ Used by the <literal>VersionAwareMarshaller</literal> in determining which version stream parser
+ to use by default when initiating communications in a cluster. Useful when you need to run a newer
+ version of JBoss Cache in a cluster containing older versions, and can be used to perform rolling
+ upgrades.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">objectInputStreamPoolSize</emphasis></entry>
+ <entry>objectInputStreamPoolSize</entry>
+ <entry>Positive integer</entry>
+ <entry>50</entry>
+
+ <entry>
+ Not used at the moment.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">objectOutputStreamPoolSize</emphasis></entry>
+ <entry>objectOutputStreamPoolSize</entry>
+ <entry>Positive integer</entry>
+ <entry>50</entry>
+
+ <entry>
+ Not used at the moment.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.eviction">
+ <title>The <literal><![CDATA[<eviction />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<eviction />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element controls how eviction works in the cache.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.default"><literal><![CDATA[<default />]]></literal></link>,
+ <link linkend="element.region"><literal><![CDATA[<region />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><literal>EvictionConfig</literal></para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.eviction">
+ <title><literal><![CDATA[<eviction />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<eviction />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">wakeUpInterval</emphasis></entry>
+ <entry>wakeupInterval</entry>
+ <entry>integer</entry>
+ <entry>5000</entry>
+
+ <entry>
+ The frequency with which the eviction thread runs, in milliseconds. If set to less than 1, the
+ eviction thread never runs and is effectively disabled.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.default">
+ <title>The <literal><![CDATA[<default />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<default />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element defines the default eviction region.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><link linkend="element.eviction"><literal><![CDATA[<eviction />]]></literal></link></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.property"><literal><![CDATA[<property />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><literal>EvictionRegionConfig</literal></para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.default">
+ <title><literal><![CDATA[<default />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<default />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">algorithmClass</emphasis></entry>
+ <entry>evictionAlgorithmConfig</entry>
+ <entry>A valid class that is available on the classpath</entry>
+ <entry>none</entry>
+ <entry>
+ This attribute needs to be specified if this tag is being used. Note that if being configured
+ programmatically, the eviction algorithm's corresponding <literal>EvictionAlgorithmConfig</literal>
+ file should be used instead. E.g., where you would use <literal>LRUAlgorithm</literal> in XML, you
+ would use an instance of <literal>LRUAlgorithmConfig</literal> programmatically.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">actionPolicyClass</emphasis></entry>
+ <entry>evictionActionPolicyClassName</entry>
+ <entry>A valid class that is available on the classpath</entry>
+ <entry>DefaultEvictionActionPolicy</entry>
+ <entry>
+ The eviction action policy class, defining what happens when a node needs to be evicted.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">eventQueueSize</emphasis></entry>
+ <entry>eventQueueSize
+ (<emphasis>dynamic</emphasis></entry>
+ <entry>integer</entry>
+ <entry>200000</entry>
+ <entry>
+ The size of the bounded eviction event queue.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.region">
+ <title>The <literal><![CDATA[<region />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<region />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element defines an eviction region. Multiple instances of this tag can exist provided they
+ have unique <literal>name</literal> attributes.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><link linkend="element.eviction"><literal><![CDATA[<eviction />]]></literal></link></para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.property"><literal><![CDATA[<property />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para><literal>EvictionRegionConfig</literal></para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.region">
+ <title><literal><![CDATA[<region />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<region />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">name</emphasis></entry>
+ <entry>regionFqn</entry>
+ <entry>A String that could be parsed using Fqn.fromString()</entry>
+ <entry>none</entry>
+ <entry>
+ This should be a unique name that defines this region. See the <link linkend="regions">chapter on eviction</link>
+ for details of eviction regions.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">algorithmClass</emphasis></entry>
+ <entry>evictionAlgorithmConfig</entry>
+ <entry>A valid class that is available on the classpath</entry>
+ <entry>none</entry>
+ <entry>
+ This attribute needs to be specified if this tag is being used. Note that if being configured
+ programmatically, the eviction algorithm's corresponding <literal>EvictionAlgorithmConfig</literal>
+ file should be used instead. E.g., where you would use <literal>LRUAlgorithm</literal> in XML, you
+ would use an instance of <literal>LRUAlgorithmConfig</literal> programmatically.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">actionPolicyClass</emphasis></entry>
+ <entry>evictionActionPolicyClassName</entry>
+ <entry>A valid class that is available on the classpath</entry>
+ <entry>DefaultEvictionActionPolicy</entry>
+ <entry>
+ The eviction action policy class, defining what happens when a node needs to be evicted.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">eventQueueSize</emphasis></entry>
+ <entry>eventQueueSize
+ (<emphasis>dynamic</emphasis></entry>
+ <entry>integer</entry>
+ <entry>200000</entry>
+ <entry>
+ The size of the bounded eviction event queue.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.property">
+ <title>The <literal><![CDATA[<property />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<property />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ A mechanism of passing in name-value properties to the enclosing configuration element.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.default"><literal><![CDATA[<default />]]></literal></link>,
+ <link linkend="element.region"><literal><![CDATA[<region />]]></literal></link>,
+ <link linkend="element.interceptor"><literal><![CDATA[<interceptor />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>Either direct setters or <literal>setProperties()</literal> enclosing bean</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.property">
+ <title><literal><![CDATA[<property />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<property />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">name</emphasis></entry>
+ <entry>Either direct setters or <literal>setProperties()</literal> enclosing bean</entry>
+ <entry>String</entry>
+ <entry>none</entry>
+ <entry>
+ Property name
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">value</emphasis></entry>
+ <entry>Either direct setters or <literal>setProperties()</literal> enclosing bean</entry>
+ <entry>String</entry>
+ <entry>none</entry>
+ <entry>
+ Property value
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.loaders">
+ <title>The <literal><![CDATA[<loaders />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<loaders />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ Defines any cache loaders.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <link linkend="element.preload"><literal><![CDATA[<preload />]]></literal></link>,
+ <link linkend="element.loader"><literal><![CDATA[<loader />]]></literal></link>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>CacheLoaderConfig</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.loaders">
+ <title><literal><![CDATA[<loaders />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<loaders />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">passivation</emphasis></entry>
+ <entry>passivation</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+ <entry>
+ If true, cache loaders are used in passivation mode. See the <link linkend="cache_loaders">chapter on cache loaders</link>
+ for a detailed discussion on this.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">shared</emphasis></entry>
+ <entry>shared</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+ <entry>
+ If true, cache loaders are used in shared mode. See the <link linkend="cache_loaders">chapter on cache loaders</link>
+ for a detailed discussion on this.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.preload">
+ <title>The <literal><![CDATA[<preload />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<preload />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ Defines preloading of Fqn subtrees when a cache starts up. This element has no attributes.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.loaders"><literal><![CDATA[<loaders />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <link linkend="element.node"><literal><![CDATA[<node />]]></literal></link>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>CacheLoaderConfig</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.node">
+ <title>The <literal><![CDATA[<node />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<node />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element defines a subtree under which all content will be preloaded from the cache loaders
+ when the cache starts. Multiple subtrees can be preloaded, although it only makes sense to
+ define more than one subtree if they do not overlap.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.preload"><literal><![CDATA[<preload />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>CacheLoaderConfig</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.node">
+ <title><literal><![CDATA[<node />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<node />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">fqn</emphasis></entry>
+ <entry>preload</entry>
+ <entry>String</entry>
+ <entry>none</entry>
+ <entry>
+ An Fqn to preload. This should be a String that can be parsed with Fqn.fromString(). When doing
+ this programmatically, you should create a single String containing all of the Fqns you wish to
+ preload, separated by spaces, and pass that into <literal>CacheLoaderConfig.setPreload()</literal>.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.loader">
+ <title>The <literal><![CDATA[<loader />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<loader />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element defines a cache loader. Multiple elements may be used to create cache loader
+ chains.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.loaders"><literal><![CDATA[<loaders />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <link linkend="element.properties"><literal><![CDATA[<properties />]]></literal></link>,
+ <link linkend="element.singletonStore"><literal><![CDATA[<singletonStore />]]></literal></link>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>IndividualCacheLoaderConfig</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.loader">
+ <title><literal><![CDATA[<loader />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<loader />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">class</emphasis></entry>
+ <entry>className</entry>
+ <entry>A valid class that is available on the classpath</entry>
+ <entry>none</entry>
+ <entry>
+ A cache loader implementation to use.
+ </entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">async</emphasis></entry>
+ <entry>async</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+ <entry>
+ All modifications to this cache loader happen asynchronously, on a separate thread.
+ </entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">fetchPersistentState</emphasis></entry>
+ <entry>fetchPersistentState</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+ <entry>
+ When a cache starts up, retrieve persistent state from the cache loaders in other caches in the
+ cluster. Only <emphasis>one</emphasis> loader element may set this to true. Also, only makes
+ sense if the <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>
+ tag is present.
+
+ </entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">purgeOnStartup</emphasis></entry>
+ <entry>purgeOnStartup</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+ <entry>
+ Purges this cache loader when it starts up.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.properties">
+ <title>The <literal><![CDATA[<properties />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<properties />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element contains a set of properties that can be read by a <literal>java.util.Properties</literal>
+ instance. This tag has no attributes, and the contents of this tag will be parsed by
+ <literal>Properties.load()</literal>.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.loader"><literal><![CDATA[<loader />]]></literal></link>,
+ <link linkend="element.singletonStore"><literal><![CDATA[<singletonStore />]]></literal></link>,
+ <link linkend="element.locator"><literal><![CDATA[<locator />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry></entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>IndividualCacheLoaderConfig.setProperties()</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.singletonStore">
+ <title>The <literal><![CDATA[<singletonStore />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<singletonStore />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element configures the enclosing cache loader as a <link linkend="sscl">singleton store cache loader</link>.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.loader"><literal><![CDATA[<loader />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <link linkend="element.properties"><literal><![CDATA[<properties />]]></literal></link>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>SingletonStoreConfig</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.singletonStore">
+ <title><literal><![CDATA[<singletonStore />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<singletonStore />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">class</emphasis></entry>
+ <entry>className</entry>
+ <entry>A valid class that is available on the classpath</entry>
+ <entry>SingletonStoreCacheLoader</entry>
+ <entry>
+ A singleton store wrapper implementation to use.
+ </entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">enabled</emphasis></entry>
+ <entry>enabled</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+ <entry>
+ If true, the singleton store cache loader is enabled.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.customInterceptors">
+ <title>The <literal><![CDATA[<customInterceptors />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<customInterceptors />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element allows you to define custom interceptors for the cache. This tag has no attributes.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <link linkend="element.interceptor"><literal><![CDATA[<interceptor />]]></literal></link>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>None. At runtime, instantiate your own interceptor and pass it in to the cache using
+ <literal>Cache.addInterceptor()</literal>.</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.interceptor">
+ <title>The <literal><![CDATA[<interceptor />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<interceptor />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This element allows you configure a custom interceptor. This tag may appear multiple times.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.customInterceptor"><literal><![CDATA[<customInterceptor />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <link linkend="element.property"><literal><![CDATA[<property />]]></literal></link>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>None. At runtime, instantiate your own interceptor and pass it in to the cache using
+ <literal>Cache.addInterceptor()</literal>.</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.interceptor">
+ <title><literal><![CDATA[<interceptor />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<interceptor />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">class</emphasis></entry>
+ <entry> - </entry>
+ <entry>A valid class that is available on the classpath</entry>
+ <entry>none</entry>
+ <entry>
+ An implementation of <literal>CommandInterceptor</literal>.
+ </entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">position</emphasis></entry>
+ <entry> - </entry>
+ <entry>first, last</entry>
+ <entry></entry>
+ <entry>
+ A position at which to place this interceptor in the chain. First is the first interceptor
+ encountered when an invocation is made on the cache, last is the last interceptor before the
+ call is passed on to the data structure. <emphasis>Note that this attribute is mutually
+ exclusive with <literal>before</literal>, <literal>after</literal> and <literal>index</literal>.</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">before</emphasis></entry>
+ <entry> - </entry>
+ <entry>Fully qualified class name of an interceptor</entry>
+ <entry></entry>
+ <entry>
+ Will place the new interceptor directly before the instance of the named interceptor.
+ <emphasis>Note that this attribute is mutually exclusive with <literal>position</literal>,
+ <literal>after</literal> and <literal>index</literal>.</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">after</emphasis></entry>
+ <entry> - </entry>
+ <entry>Fully qualified class name of an interceptor</entry>
+ <entry></entry>
+ <entry>
+ Will place the new interceptor directly after the instance of the named interceptor.
+ <emphasis>Note that this attribute is mutually exclusive with <literal>position</literal>,
+ <literal>before</literal> and <literal>index</literal>.</emphasis>
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">index</emphasis></entry>
+ <entry> - </entry>
+ <entry>Positive integers</entry>
+ <entry></entry>
+ <entry>
+ A position at which to place this interceptor in the chain, with 0 being the first position.
+ <emphasis>Note that this attribute is mutually exclusive with <literal>position</literal>,
+ <literal>before</literal> and <literal>after</literal>.</emphasis>
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.clustering">
+ <title>The <literal><![CDATA[<clustering />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<clustering />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ If this element is present, the cache is started in clustered mode. Attributes and child
+ elements define clustering characteristics.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.jbosscache"><literal><![CDATA[<jbosscache />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <link linkend="element.stateRetrieval"><literal><![CDATA[<stateRetrieval />]]></literal></link>,
+ <link linkend="element.sync"><literal><![CDATA[<sync />]]></literal></link>,
+ <link linkend="element.async"><literal><![CDATA[<async />]]></literal></link>,
+ <link linkend="element.buddy"><literal><![CDATA[<buddy />]]></literal></link>,
+ <link linkend="element.jgroupsConfig"><literal><![CDATA[<jgroupsConfig />]]></literal></link>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>Configuration</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.clustering">
+ <title><literal><![CDATA[<clustering />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<clustering />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">mode</emphasis></entry>
+ <entry>cacheMode</entry>
+ <entry>replication, invalidation, r, i</entry>
+ <entry>replication</entry>
+ <entry>
+ See the <link linkend="clustering">chapter on clustering</link> for the differences between
+ replication and invalidation. When using the bean, synchronous and asynchronous communication is
+ combined with clustering mode to give you the enumberation <literal>Configuration.CacheMode</literal>.
+ </entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">clusterName</emphasis></entry>
+ <entry>clusterName</entry>
+ <entry>String</entry>
+ <entry>JBossCache-cluster</entry>
+ <entry>
+ A cluster name which is used to identify the cluster to join.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.sync">
+ <title>The <literal><![CDATA[<sync />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<sync />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ If this element is present, all communications are synchronous, in that whenever a thread sends
+ a message sent over the wire, it blocks until it receives an acknowledgement from the recipient.
+ This element is mutually exclusive with the <link linkend="element.async"><literal><![CDATA[<async />]]></literal></link>
+ element.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>Configuration.setCacheMode()</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.sync">
+ <title><literal><![CDATA[<sync />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<sync />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">replTimeout</emphasis></entry>
+ <entry>syncReplTimeout (<emphasis>dynamic</emphasis>)</entry>
+ <entry>positive integer</entry>
+ <entry>15000</entry>
+ <entry>
+ This is the timeout used to wait for an acknowledgement when making a remote call, after which
+ an exception is thrown.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.async">
+ <title>The <literal><![CDATA[<async />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<async />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ If this element is present, all communications are asynchronous, in that whenever a thread sends
+ a message sent over the wire, it does not wait for an acknowledgement before returning.
+ This element is mutually exclusive with the <link linkend="element.sync"><literal><![CDATA[<sync />]]></literal></link>
+ element.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>Configuration.setCacheMode()</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.async">
+ <title><literal><![CDATA[<async />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<async />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">serializationExecutorPoolSize</emphasis></entry>
+ <entry>serializationExecutorPoolSize</entry>
+ <entry>positive integer</entry>
+ <entry>25</entry>
+ <entry>
+ In addition to replication happening asynchronously, even serialization of contents for replication
+ happens in a separate thread to allow the caller to return as quickly as possible. This setting
+ controls the size of the serializer thread pool. Setting this to any value less than 1 means
+ serialization does not happen asynchronously.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">serializationExecutorQueueSize</emphasis></entry>
+ <entry>serializationExecutorQueueSize</entry>
+ <entry>positive integer</entry>
+ <entry>50000</entry>
+ <entry>
+ This is used to define the size of the bounded queue that holds tasks for the serialization executor.
+ This is ignored if a serialization executor is not used, such as when <literal>serializationExecutorPoolSize</literal>
+ is less than 1.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">useReplQueue</emphasis></entry>
+ <entry>useReplQueue</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+ <entry>
+ If true, this forces all async communications to be queued up and sent out periodically as a batch.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">replQueueInterval</emphasis></entry>
+ <entry>replQueueInterval</entry>
+ <entry>positive integer</entry>
+ <entry>5000</entry>
+ <entry>
+ If <literal>useReplQueue</literal> is set to true, this attribute controls how often the asynchronous
+ thread used to flush the replication queue runs. This should be a positive integer which represents
+ thread wakeup time in milliseconds.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">replQueueMaxElements</emphasis></entry>
+ <entry>replQueueMaxElements</entry>
+ <entry>positive integer</entry>
+ <entry>1000</entry>
+ <entry>
+ If <literal>useReplQueue</literal> is set to true, this attribute can be used to trigger flushing
+ of the queue when it reaches a specific threshold.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.stateRetrieval">
+ <title>The <literal><![CDATA[<stateRetrieval />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<stateRetrieval />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This tag controls ho state is retrieved from neighboring caches when this cache instance starts.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>Configuration</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.stateRetrieval">
+ <title><literal><![CDATA[<stateRetrieval />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<stateRetrieval />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">fetchInMemoryState</emphasis></entry>
+ <entry>fetchInMemoryState</entry>
+ <entry>true, false</entry>
+ <entry>true</entry>
+ <entry>
+ If true, this will cause the cache to ask neighboring caches for state when it starts up, so the
+ cache starts "warm".
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">timeout</emphasis></entry>
+ <entry>stateRetrievalTimeout</entry>
+ <entry>positive integer</entry>
+ <entry>10000</entry>
+ <entry>
+ This is the maximum amount of time - in milliseconds - to wait for state from neighboring caches,
+ before throwing an exception and aborting startup.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">nonBlocking</emphasis></entry>
+ <entry>useNonBlockingStateTransfer</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+ <entry>
+ This configuration switch enables the Non-Blocking State Transfer mechanism, new in 3.1.0. Note that
+ this requires MVCC as a node locking scheme, and that STREAMING_STATE_TRANSFER is present in the
+ JGroups stack used.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.buddy">
+ <title>The <literal><![CDATA[<buddy />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<buddy />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ If this tag is present, then state is not replicated across the entire cluster. Instead, buddy
+ replication is used to select cache instances to maintain backups on. See
+ <link linkend="br">this section on buddy replication</link> for details. Note that this is only
+ used if the clustering mode is <literal>replication</literal>, and not if it is <literal>invalidation</literal>.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <link linkend="element.dataGravitation"><literal><![CDATA[<dataGravitation />]]></literal></link>,
+ <link linkend="element.locator"><literal><![CDATA[<locator />]]></literal></link>,
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>BuddyReplicationConfig</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.buddy">
+ <title><literal><![CDATA[<buddy />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<buddy />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">enabled</emphasis></entry>
+ <entry>enabled</entry>
+ <entry>true, false</entry>
+ <entry>false</entry>
+ <entry>
+ If true, buddy replication is enabled.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">communicationTimeout</emphasis></entry>
+ <entry>buddyCommunicationTimeout</entry>
+ <entry>positive integer</entry>
+ <entry>10000</entry>
+ <entry>
+ This is the maximum amount of time - in milliseconds - to wait for buddy group organization
+ communications from buddy caches.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">poolName</emphasis></entry>
+ <entry>buddyPoolName</entry>
+ <entry>String</entry>
+ <entry></entry>
+ <entry>
+ This is used as a means to identify cache instances and provide hints to the buddy selection
+ algorithms. More information on <link linkend="br">the section on buddy replication</link>.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.dataGravitation">
+ <title>The <literal><![CDATA[<dataGravitation />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<dataGravitation />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This tag configures how data gravitation is conducted. See
+ <link linkend="br">this section on buddy replication</link> for details.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.buddy"><literal><![CDATA[<buddy />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>BuddyReplicationConfig</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.dataGravitation">
+ <title><literal><![CDATA[<dataGravitation />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<dataGravitation />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">auto</emphasis></entry>
+ <entry>autoDataGravitation</entry>
+ <entry>true, false</entry>
+ <entry>true</entry>
+ <entry>
+ If true, when a get() is performed on a cache and nothing is found, a gravitation from neighboring
+ caches is attempted. If this is false, then gravitations can only occur if the
+ <literal>Option.setForceDataGravitation()</literal> option is provided.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">removeOnFind</emphasis></entry>
+ <entry>dataGravitationRemoveOnFind</entry>
+ <entry>true, false</entry>
+ <entry>true</entry>
+ <entry>
+ If true, when gravitation occurs, the instance that requests the gravitation takes ownership of
+ the state and requests that all other instances remove the gravitated state from memory.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">searchBackupTrees</emphasis></entry>
+ <entry>dataGravitationSearchBackupTrees</entry>
+ <entry>true, false</entry>
+ <entry>true</entry>
+ <entry>
+ If true, incoming gravitation requests will cause the cache to search not just its primary
+ data structure but its backup structure as well.
+ </entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.locator">
+ <title>The <literal><![CDATA[<locator />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<locator />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This tag provides a pluggable mechanism for providing buddy location algorithms.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.buddy"><literal><![CDATA[<buddy />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ <link linkend="element.properties"><literal><![CDATA[<properties />]]></literal></link>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>BuddyLocatorConfig</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.locator">
+ <title><literal><![CDATA[<locator />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<locator />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">class</emphasis></entry>
+ <entry>className</entry>
+ <entry>A valid class that is available on the classpath</entry>
+ <entry>NextMemberBuddyLocator</entry>
+ <entry>
+ A <literal>BuddyLocator</literal> implementation to use when selecting buddies from the cluster.
+ Please refer to <literal>BuddyLocator</literal> javadocs for details.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="element.jgroupsConfig">
+ <title>The <literal><![CDATA[<jgroupsConfig />]]></literal> Element</title>
+ <tgroup cols="2" align="left">
+ <colspec colname="name" />
+ <colspec colname="desc" />
+ <spanspec spanname="hspan" namest="name" nameend="desc" align="left" />
+
+ <thead valign="top">
+ <row>
+ <entry spanname="hspan">The <literal><![CDATA[<jgroupsConfig />]]></literal> Element</entry>
+ </row>
+ </thead>
+ <tbody valign="top">
+ <row>
+ <entry>
+ <para><emphasis role="bold">Description</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ This tag provides a configuration which is used with JGroups to create a network communication
+ channel.
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Parent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>
+ <link linkend="element.clustering"><literal><![CDATA[<clustering />]]></literal></link>
+ </para>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Children</emphasis></para>
+ </entry>
+
+ <entry>
+ A series of elements representing JGroups protocols (see
+ <ulink url="http://www.jgroups.org/javagroupsnew/docs/ug.html">JGroups documentation</ulink>). Note
+ that there are no child elements if any of the element attributes are used instead. See section
+ on attributes.
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <para><emphasis role="bold">Bean equivalent</emphasis></para>
+ </entry>
+
+ <entry>
+ <para>Configuration</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table id="attributes.jgroupsConfig">
+ <title><literal><![CDATA[<jgroupsConfig />]]></literal> Attributes</title>
+ <tgroup cols="5" align="left">
+ <colspec colname="c1" />
+ <colspec colname="c2" />
+ <colspec colname="c3" />
+ <colspec colname="c4" />
+ <colspec colname="c5" />
+
+ <spanspec spanname="hspan" namest="c1" nameend="c5" align="left" />
+ <thead valign="top">
+ <row><entry spanname="hspan"><literal><![CDATA[<jgroupsConfig />]]></literal> Attributes</entry></row>
+ <row>
+ <entry>Attribute</entry>
+ <entry>Bean Field</entry>
+ <entry>Allowed</entry>
+ <entry>Default</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry><emphasis role="bold">configFile</emphasis></entry>
+ <entry>clusterConfig</entry>
+ <entry>A JGroups configuration file on the classpath</entry>
+ <entry>udp.xml</entry>
+ <entry>
+ If this attribute is used, then any JGroups elements representing protocols within this tag are
+ ignored. Instead, JGroups settings are read from the file specified. Note that this cannot be used
+ with the <literal>multiplexerStack</literal> attribute.
+ </entry>
+ </row>
+ <row>
+ <entry><emphasis role="bold">multiplexerStack</emphasis></entry>
+ <entry>muxStackName</entry>
+ <entry>A valid multiplexer stack name that exists in the channel factory passed in to the <literal>RuntimeConfig</literal></entry>
+ <entry></entry>
+ <entry>
+ This can only be used with the <literal>RuntimeConfig</literal>, where you pass in a JGroups
+ <literal>ChannelFactory</literal> instance using <literal>RuntimeConfig.setMuxChannelFactory()</literal>.
+ If this attribute is used, then any JGroups elements representing protocols within this tag are
+ ignored. Instead, the JGroups channel is created using the factory passed in. Note that this cannot be
+ used with the <literal>configFile</literal> attribute.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </section>
+</chapter>
\ No newline at end of file
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/deployment.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/deployment.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/deployment.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,540 @@
+<chapter id="deployment">
+ <title>Deploying JBoss Cache</title>
+ <section id="deployment.standalone">
+ <title>Standalone Use/Programatic Deployment</title>
+ <para>
+ When used in a standalone Java program, all that needs to be done is to instantiate the cache using the
+ <literal>CacheFactory</literal>
+ and a
+ <literal>Configuration</literal>
+ instance or an XML file, as discussed
+ in the
+ <link linkend="api.create_start">User API</link>
+ and
+ <link linkend="configuration.creation">Configuration</link>
+ chapters.
+ </para>
+
+ <para>
+ The same techniques can be used when an application running in an application
+ server wishes to programatically deploy a cache rather than relying on an application server's
+ deployment features. An example of this would be
+ a webapp deploying a cache via a
+ <literal>javax.servlet.ServletContextListener</literal>.
+ </para>
+
+ <para>
+ After creation, you could share your cache instance among different application components either by using an
+ IOC container such as Spring, JBoss Microcontainer, etc., or by binding it to JNDI, or simply
+ holding a static reference to the cache.
+ </para>
+
+ <para>
+ If, after deploying your cache you wish to expose a management interface
+ to it in JMX, see the
+ <link linkend="jmx.registration.programatic">section on Programatic Registration in JMX</link>.
+ </para>
+ </section>
+ <section id="deployment.microcontainer">
+ <title>Via JBoss Microcontainer (JBoss AS 5.x)</title>
+
+ <para>
+ Beginning with AS 5, JBoss AS supports deployment of POJO services via
+ deployment of a file whose name ends with
+ <literal>-jboss-beans.xml</literal>.
+ A POJO service is one whose implementation is via a "Plain Old Java Object",
+ meaning a simple java bean that isn't required to implement any special
+ interfaces or extend any particular superclass. A
+ <literal>Cache</literal> is a POJO service, and all the components in a
+ <literal>Configuration</literal>
+ are also POJOs, so deploying a cache in this way is a natural step.
+ </para>
+ <para>
+ Deployment of the cache is done using the JBoss Microcontainer that forms the
+ core of JBoss AS. JBoss Microcontainer is a sophisticated IOC framework
+ similar to Spring. A <literal>-jboss-beans.xml</literal> file is basically
+ a descriptor that tells the IOC framework how to assemble the various
+ beans that make up a POJO service.
+ </para>
+ <para>
+ For each configurable option exposed by the <literal>Configuration</literal>
+ components, a getter/setter must be defined in the configuration class.
+ This is required so that JBoss Microcontainer can, in typical IOC way,
+ call these methods when the corresponding properties have been
+ configured.
+ </para>
+ <para>
+ You need to ensure that the <literal>jbosscache-core.jar</literal> and <literal>jgroups.jar</literal> libraries
+ are in your server's <literal>lib</literal> directory. This is usually the case when you use JBoss AS in its
+ <literal>all</literal> configuration. Note that you will have to bring in any optional jars you require, such
+ as <literal>jdbm.jar</literal> based on your cache configuration.
+ </para>
+ <para>
+ The following is an example
+ <literal>-beans.xml</literal>
+ file. If you
+ look in the
+ <literal>server/all/deploy</literal>
+ directory of a JBoss AS 5
+ installation, you can find several more examples.
+ </para>
+
+ <programlisting role="XML"><![CDATA[
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+ <!-- First we create a Configuration object for the cache -->
+ <bean name="ExampleCacheConfig"
+ class="org.jboss.cache.config.Configuration">
+
+ <!-- Externally injected services -->
+ <property name="runtimeConfig">
+ <bean class="org.jboss.cache.config.RuntimeConfig">
+ <property name="transactionManager">
+ <inject bean="jboss:service=TransactionManager"
+ property="TransactionManager"/>
+ </property>
+ <property name="muxChannelFactory"><inject bean="JChannelFactory"/></property>
+ </bean>
+ </property>
+
+ <property name="multiplexerStack">udp</property>
+
+ <property name="clusterName">Example-EntityCache</property>
+
+ <property name="isolationLevel">REPEATABLE_READ</property>
+
+ <property name="cacheMode">REPL_SYNC</property>
+
+ <property name="stateRetrievalTimeout">15000</property>
+
+ <property name="syncReplTimeout">20000</property>
+
+ <property name="lockAcquisitionTimeout">15000</property>
+
+ <property name="exposeManagementStatistics">true</property>
+ </bean>
+
+ <!-- Factory to build the Cache. -->
+ <bean name="DefaultCacheFactory" class="org.jboss.cache.DefaultCacheFactory">
+ <constructor factoryClass="org.jboss.cache.DefaultCacheFactory"
+ factoryMethod="getInstance" />
+ </bean>
+
+ <!-- The cache itself -->
+ <bean name="ExampleCache" class="org.jboss.cache.Cache">
+
+ <constructor factoryMethod="createCache">
+ <factory bean="DefaultCacheFactory"/>
+ <parameter class="org.jboss.cache.config.Configuration"><inject bean="ExampleCacheConfig"/></parameter>
+ <parameter class="boolean">false</parameter>
+ </constructor>
+
+ </bean>
+
+</deployment>
+]]></programlisting>
+
+ <para>
+ See <ulink url="http://www.jboss.org/jbossmc/docs">the JBoss Microcontainer documentation</ulink>
+ for details on the above syntax. Basically, each
+ <literal>bean</literal>
+ element represents an object and is used to create a
+ <literal>Configuration</literal>
+ and its <link linkend="configuration.elements">constituent parts</link>
+ The <literal>DefaultCacheFactory</literal> bean constructs the cache,
+ conceptually doing the same thing as is shown in the
+ <link linkend="api.create_start">User API</link> chapter.
+ </para>
+ <para>
+ An interesting thing to note in the above example is the use of the
+ <literal>RuntimeConfig</literal> object. External resources like a <literal>TransactionManager</literal>
+ and a JGroups <literal>ChannelFactory</literal> that are visible to the microcontainer are dependency injected
+ into the <literal>RuntimeConfig</literal>. The assumption here is that in some other deployment descriptor in
+ the AS, the referenced beans have already been described.
+ </para>
+ </section>
+
+ <section>
+ <title>Automatic binding to JNDI in JBoss AS</title>
+ <para>
+ This feature is not available as of the time of this writing. We will
+ add a wiki page describing how to use it once it becomes available.
+ </para>
+ </section>
+
+ <section>
+ <title>Runtime Management Information</title>
+ <para>JBoss Cache includes JMX MBeans to expose cache functionality and provide statistics that can be
+ used to analyze cache operations. JBoss Cache can also broadcast cache events as MBean notifications for
+ handling via JMX monitoring tools.
+ </para>
+
+ <section id="jmx.mbeans">
+ <title>JBoss Cache MBeans</title>
+ <para>
+ JBoss Cache provides an MBean that can be registered with your environments JMX server to allow access
+ to the cache instance via JMX. This MBean is the
+ <literal>org.jboss.cache.jmx.CacheJmxWrapper</literal>.
+ It is a StandardMBean, so its MBean interface is <literal>org.jboss.cache.jmx.CacheJmxWrapperMBean</literal>.
+ This MBean can be used to:
+ <itemizedlist>
+ <listitem>
+ Get a reference to the underlying <literal>Cache</literal>.
+ </listitem>
+ <listitem>
+ Invoke create/start/stop/destroy lifecycle operations on the underlying <literal>Cache</literal>.
+ </listitem>
+ <listitem>
+ Inspect various details about the cache's current state (number of nodes, lock information, etc.)
+ </listitem>
+ <listitem>
+ See numerous details about the cache's configuration, and
+ change those configuration items that can be changed when the
+ cache has already been started.
+ </listitem>
+ </itemizedlist>
+ See the <literal>CacheJmxWrapperMBean</literal> javadoc for more details.
+ </para>
+ <para>
+ If a <literal>CacheJmxWrapper</literal> is registered, JBoss Cache also provides MBeans
+ for several other internal components and subsystems. These MBeans are used to capture and expose
+ statistics related to the subsystems they represent. They are hierarchically associated with the
+ <literal>CacheJmxWrapper</literal> MBean and have service names that reflect this relationship. For
+ example, a replication interceptor MBean for the <literal>jboss.cache:service=TomcatClusteringCache</literal>
+ instance will be accessible through the service named
+ <literal>jboss.cache:service=TomcatClusteringCache,cache-interceptor=ReplicationInterceptor</literal>.
+ </para>
+ </section>
+
+ <section id="jmx.registration">
+ <title>Registering the CacheJmxWrapper with the MBeanServer</title>
+
+ <para>
+ The best way to ensure the <literal>CacheJmxWrapper</literal> is registered in JMX depends on how you are
+ deploying your cache.
+ </para>
+
+ <section id="jmx.registration.programatic">
+ <title>Programatic Registration</title>
+
+ <section id="jmx.registration.programatic.construct">
+ <title>With a Cache instance</title>
+ <para>
+ Simplest way to do this is to create your <literal>Cache</literal> and pass it to the
+ <literal>JmxRegistrationManager</literal> constructor.
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[
+ CacheFactory factory = new DefaultCacheFactory();
+ // Build but don't start the cache
+ // (although it would work OK if we started it)
+ Cache cache = factory.createCache("cache-configuration.xml");
+
+ MBeanServer server = getMBeanServer(); // however you do it
+ ObjectName on = new ObjectName("jboss.cache:service=Cache");
+
+ JmxRegistrationManager jmxManager = new JmxRegistrationManager(server, cache, on);
+ jmxManager.registerAllMBeans();
+
+ ... use the cache
+
+ ... on application shutdown
+
+ jmxManager.unregisterAllMBeans();
+ cache.stop();
+
+ ]]></programlisting>
+ </section>
+
+ <section id="jmx.registration.programatic.cfg">
+ <title>With a Configuration instance</title>
+ <para>
+ Alternatively, build a <literal>Configuration</literal> object and pass it to the
+ <literal>CacheJmxWrapper</literal>. The wrapper will construct the <literal>Cache</literal> on your
+ behalf.
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[
+ Configuration config = buildConfiguration(); // whatever it does
+
+ CacheJmxWrapperMBean wrapper = new CacheJmxWrapper(config);
+ MBeanServer server = getMBeanServer(); // however you do it
+ ObjectName on = new ObjectName("jboss.cache:service=TreeCache");
+ server.registerMBean(wrapper, on);
+
+ // Call to wrapper.create() will build the Cache if one wasn't injected
+ wrapper.create();
+ wrapper.start();
+
+ // Now that it's built, created and started, get the cache from the wrapper
+ Cache cache = wrapper.getCache();
+
+ ... use the cache
+
+ ... on application shutdown
+
+ wrapper.stop();
+ wrapper.destroy();
+ ]]></programlisting>
+ </section>
+ </section>
+
+ <section>
+ <title>JMX-Based Deployment in JBoss AS (JBoss AS 5.x)</title>
+ <para>
+ <literal>CacheJmxWrapper</literal> is a POJO, so the microcontainer has no problem creating one. The
+ trick is getting it to register your bean in JMX. This can be done by specifying the
+ <literal>org.jboss.aop.microcontainer.aspects.jmx.JMX</literal>
+ annotation on the <literal>CacheJmxWrapper</literal>
+ bean:
+ </para>
+
+ <programlisting role="XML"><![CDATA[
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+ <!-- First we create a Configuration object for the cache -->
+ <bean name="ExampleCacheConfig"
+ class="org.jboss.cache.config.Configuration">
+
+ ... build up the Configuration
+
+ </bean>
+
+ <!-- Factory to build the Cache. -->
+ <bean name="DefaultCacheFactory" class="org.jboss.cache.DefaultCacheFactory">
+ <constructor factoryClass="org.jboss.cache.DefaultCacheFactory"
+ factoryMethod="getInstance" />
+ </bean>
+
+ <!-- The cache itself -->
+ <bean name="ExampleCache" class="org.jboss.cache.CacheImpl">
+
+ <constructor factoryMethod="createnewInstance">
+ <factory bean="DefaultCacheFactory"/>
+ <parameter><inject bean="ExampleCacheConfig"/></parameter>
+ <parameter>false</parameter>
+ </constructor>
+
+ </bean>
+
+ <!-- JMX Management -->
+ <bean name="ExampleCacheJmxWrapper" class="org.jboss.cache.jmx.CacheJmxWrapper">
+
+ <annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.cache:service=ExampleTreeCache",
+ exposedInterface=org.jboss.cache.jmx.CacheJmxWrapperMBean.class,
+ registerDirectly=true)</annotation>
+
+ <constructor>
+ <parameter><inject bean="ExampleCache"/></parameter>
+ </constructor>
+
+ </bean>
+
+</deployment>
+]]></programlisting>
+
+ <para>
+ As discussed in the <link linkend="jmx.registration.programatic">Programatic Registration</link>
+ section, <literal>CacheJmxWrapper</literal> can do the work of building, creating and starting the
+ <literal>Cache</literal> if it is provided with a <literal>Configuration</literal>. With the
+ microcontainer, this is the preferred approach, as it saves the boilerplate XML
+ needed to create the <literal>CacheFactory</literal>.
+ </para>
+
+ <programlisting role="XML"><![CDATA[
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+ <!-- First we create a Configuration object for the cache -->
+ <bean name="ExampleCacheConfig"
+ class="org.jboss.cache.config.Configuration">
+
+ ... build up the Configuration
+
+ </bean>
+
+ <bean name="ExampleCache" class="org.jboss.cache.jmx.CacheJmxWrapper">
+
+ <annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.cache:service=ExampleTreeCache",
+ exposedInterface=org.jboss.cache.jmx.CacheJmxWrapperMBean.class,
+ registerDirectly=true)</annotation>
+
+ <constructor>
+ <parameter><inject bean="ExampleCacheConfig"/></parameter>
+ </constructor>
+
+ </bean>
+
+</deployment>
+]]></programlisting>
+ </section>
+
+ </section>
+
+ <section id="jmx.statistics">
+ <title>JBoss Cache Statistics</title>
+ <para>
+ JBoss Cache captures statistics in its interceptors and various other components, and exposes these
+ statistics through a set of MBeans. Gathering of statistics is enabled by default; this can be disabled for
+ a specific cache instance through the <literal>Configuration.setExposeManagementStatistics()</literal>
+ setter. Note that the majority of the statistics are provided by the <literal>CacheMgmtInterceptor</literal>,
+ so this MBean is the most significant in this regard. If you want to disable all statistics for performance
+ reasons, you set <literal>Configuration.setExposeManagementStatistics(false)</literal> and this will
+ prevent the <literal>CacheMgmtInterceptor</literal> from being included in the cache's interceptor stack
+ when the cache is started.
+ </para>
+ <para>
+ If a <literal>CacheJmxWrapper</literal> is registered with JMX, the wrapper also ensures that
+ an MBean is registered in JMX for each interceptor and component that exposes statistics.
+ <footnote>
+ <para>
+ Note that if the
+ <literal>CacheJmxWrapper</literal>
+ is not registered in JMX, the
+ interceptor MBeans will not be registered either. The JBoss Cache 1.4 releases
+ included code that would try to "discover" an
+ <literal>MBeanServer</literal>
+ and
+ automatically register the interceptor MBeans with it. For JBoss Cache 2.x we decided
+ that this sort of "discovery" of the JMX environment was beyond the proper scope of
+ a caching library, so we removed this functionality.
+ </para>
+ </footnote>.
+ Management tools can then access those MBeans to examine the statistics. See the section in the
+ <link linkend="jmx_reference.statistics">JMX Reference chapter</link>
+ pertaining to the statistics that are made available via JMX.
+ </para>
+ </section>
+
+ <section>
+ <title>Receiving JMX Notifications</title>
+ <para>
+ JBoss Cache users can register a listener to receive cache events described earlier in the
+ <link linkend="api.listener">User API</link>
+ chapter. Users can alternatively utilize the cache's management information infrastructure to receive these
+ events via JMX notifications. Cache events are accessible as notifications by registering a
+ <literal>NotificationListener</literal> for the <literal>CacheJmxWrapper</literal>.
+ </para>
+
+ <para>
+ See the section in the <link linkend="jmx_reference.notifications">JMX Reference chapter</link>
+ pertaining to JMX notifications for a list of notifications that can be received through the
+ <literal>CacheJmxWrapper</literal>.
+ </para>
+
+ <para>
+ The following is an example of how to programmatically receive cache notifications when running in a
+ JBoss AS environment. In this example, the client uses a filter to specify which events are of interest.
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[
+ MyListener listener = new MyListener();
+ NotificationFilterSupport filter = null;
+
+ // get reference to MBean server
+ Context ic = new InitialContext();
+ MBeanServerConnection server = (MBeanServerConnection)ic.lookup("jmx/invoker/RMIAdaptor");
+
+ // get reference to CacheMgmtInterceptor MBean
+ String cache_service = "jboss.cache:service=TomcatClusteringCache";
+ ObjectName mgmt_name = new ObjectName(cache_service);
+
+ // configure a filter to only receive node created and removed events
+ filter = new NotificationFilterSupport();
+ filter.disableAllTypes();
+ filter.enableType(CacheNotificationBroadcaster.NOTIF_NODE_CREATED);
+ filter.enableType(CacheNotificationBroadcaster.NOTIF_NODE_REMOVED);
+
+ // register the listener with a filter
+ // leave the filter null to receive all cache events
+ server.addNotificationListener(mgmt_name, listener, filter, null);
+
+ // ...
+
+ // on completion of processing, unregister the listener
+ server.removeNotificationListener(mgmt_name, listener, filter, null);
+ ]]></programlisting>
+
+ <para>The following is the simple notification listener implementation used in the previous example.</para>
+ <programlisting role="JAVA"><![CDATA[
+ private class MyListener implements NotificationListener, Serializable
+ {
+ public void handleNotification(Notification notification, Object handback)
+ {
+ String message = notification.getMessage();
+ String type = notification.getType();
+ Object userData = notification.getUserData();
+
+ System.out.println(type + ": " + message);
+
+ if (userData == null)
+ {
+ System.out.println("notification data is null");
+ }
+ else if (userData instanceof String)
+ {
+ System.out.println("notification data: " + (String) userData);
+ }
+ else if (userData instanceof Object[])
+ {
+ Object[] ud = (Object[]) userData;
+ for (Object data : ud)
+ {
+ System.out.println("notification data: " + data.toString());
+ }
+ }
+ else
+ {
+ System.out.println("notification data class: " + userData.getClass().getName());
+ }
+ }
+ }
+ ]]></programlisting>
+
+ <para>Note that the JBoss Cache management implementation only listens to cache events after a client registers
+ to receive MBean notifications. As soon as no clients are registered for notifications, the MBean will
+ remove
+ itself as a cache listener.
+ </para>
+
+ </section>
+
+ <section id="jconsole">
+ <title>Accessing Cache MBeans in a Standalone Environment using the <literal>jconsole</literal> Utility</title>
+ <para>
+ JBoss Cache MBeans are easily accessed when running cache instances in an application server that
+ provides an MBean server interface such as JBoss JMX Console. Refer to your server documentation
+ for instructions on how to access MBeans running in a server's MBean container.
+ </para>
+ <para>
+ In addition, though, JBoss Cache MBeans are also accessible when running in a non-server environment using
+ your JDK's <literal>jconsole</literal> tool. When running a standalone cache outside of an application server,
+ you can access the cache's MBeans as follows.
+ </para>
+ <para>
+ <orderedlist>
+ <listitem>
+ Set the system property <literal>-Dcom.sun.management.jmxremote</literal>
+ when starting the JVM where the cache will run.
+ </listitem>
+ <listitem>
+ Once the JVM is running, start the <literal>jconsole</literal> utility, located in your JDK's
+ <literal>/bin</literal> directory.
+ </listitem>
+ <listitem>
+ When the utility loads, you will be able to select your running JVM and connect to it. The
+ JBoss Cache MBeans will be available on the MBeans panel.
+ </listitem>
+ </orderedlist>
+ </para>
+ <para>Note that the <literal>jconsole</literal> utility will automatically register as a listener for cache
+ notifications when connected to a JVM running JBoss Cache instances.
+ </para>
+ </section>
+ </section>
+</chapter>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/eviction_policies.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/eviction_policies.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/eviction_policies.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,508 @@
+<chapter id="eviction_policies">
+ <title>Eviction</title>
+
+ <para>
+ Eviction controls JBoss Cache's memory management by restricting how many nodes are allowed to be stored in
+ memory, and for how long. Memory constraints on servers mean caches cannot grow indefinitely, so eviction
+ needs to occur to prevent out of memory errors. Eviction is most often used alongside <link linkend="cache_loaders">cache loaders</link>.
+ </para>
+
+ <section id="eviction.design">
+ <title>Design</title>
+ <para>
+ Eviction in JBoss Cache is designed around four concepts:
+ <itemizedlist>
+ <listitem>1. Collecting statistics</listitem>
+ <listitem>2. Determining which nodes to evict</listitem>
+ <listitem>3. How nodes are evicted</listitem>
+ <listitem>4. Eviction threads.</listitem>
+ </itemizedlist>
+ In addition, Regions play a key role in eviction, as eviction is always configured on a per-region basis so that
+ different subtrees in the cache can have different eviction characteristics.
+ </para>
+
+ <section>
+ <title>Collecting Statistics</title>
+ <para>
+ This is done on the caller's thread whenever anyone interacts with the cache. If eviction is enabled, an
+ <literal>EvictionInterceptor</literal> is added to the interceptor chain and events are recorded in an
+ event queue. Events are denoted by the <literal>EvictionEvent</literal> class. Event queues are held on
+ specific Regions so each region has its own event queue.
+ </para>
+ <para>
+ This aspect of eviction is not configurable, except that the <literal>EvictionInterceptor</literal> is either
+ added to the interceptor chain or not, depending on whether eviction is enabled.
+ </para>
+ </section>
+
+ <section>
+ <title>Determining Which Nodes to Evict</title>
+ <para>
+ An <literal>EvictionAlgorithm</literal> implementation processes the eviction queue to decide which nodes to
+ evict. JBoss Cache ships with a number of implementations, including <literal>FIFOAlgorithm</literal>,
+ <literal>LRUAlgorithm</literal>, <literal>LFUAlgorithm</literal>, etc. Each implementation has a corresponding
+ <literal>EvictionAlgorithmConfig</literal> implementation with configuration details for the algorithm.
+ </para>
+ <para>
+ Custom <literal>EvictionAlgorithm</literal> implementations can be provided by implementing the interface
+ or extending one of the provided implementations.
+ </para>
+ <para>
+ Algorithms are executed by calling its <literal>process()</literal> method and passing in the event queue to
+ process. This is typically done by calling <literal>Region.processEvictionQueues()</literal>, which will
+ locate the Algorithm assigned to the region.
+ </para>
+ </section>
+
+ <section>
+ <title>How Nodes are Evicted</title>
+ <para>
+ Once the <literal>EvictionAlgorithm</literal> decides which nodes to evict, it uses an implementation of
+ <literal>EvictionActionPolicy</literal> to determine how to evict nodes. This is configurable on a per-region
+ basis, and defaults to <literal>DefaultEvictionActionPolicy</literal>, which invokes <literal>Cache.evict()</literal>
+ for each node that needs to be evicted.
+ </para>
+ <para>
+ JBoss Cache also ships with <literal>RemoveOnEvictActionPolicy</literal>, which calls <literal>Cache.removeNode()</literal>
+ for each node that needs to be evicted, instead of <literal>Cache.evict()</literal>.
+ </para>
+ <para>
+ Custom <literal>EvictionActionPolicy</literal> implementations can be used as well.
+ </para>
+ </section>
+
+ <section>
+ <title>Eviction threads</title>
+ <para>
+ By default, a single cache-wide eviction thread is used to periodically iterate through registered regions
+ and call <literal>Region.processEvictionQueues()</literal> on each region. The frequency with which this
+ thread runs can be configured using the <literal>wakeUpInterval</literal> attribute in the <literal>eviction</literal>
+ configuration element, and defaults to 5000 milliseconds if not specified.
+ </para>
+ <para>
+ The eviction thread can be disabled by setting <literal>wakeUpInterval</literal> to <literal>0</literal>.
+ This can be useful if you have your own periodic maintenance thread running and would like to iterate through
+ regions and call <literal>Region.processEvictionQueues()</literal> yourself.
+ </para>
+ </section>
+ </section>
+
+ <section id="regions">
+ <title>Eviction Regions</title>
+ <para>
+ The concept of regions and the <literal>Region</literal> class were
+ <link linkend="architecture.regions">visited earlier</link> when talking about marshalling. Regions are also
+ used to define the eviction behavior for nodes within that region. In addition to using a region-specific
+ configuration, you can also configure default, cache-wide eviction behavior for nodes that do not fall into
+ predefined regions or if you do not wish to define specific regions. It is important to note that when
+ defining regions using the configuration XML file, all elements of the <literal>Fqn</literal> that defines
+ the region are <literal>String</literal> objects.
+ </para>
+ <para>
+ For each region, you can define eviction parameters.
+ </para>
+
+ <para>It's possible to define regions that overlap. In other words, one region can be defined for
+ <literal>/a/b/c</literal>, and another defined for <literal>/a/b/c/d</literal> (which is just the
+ <emphasis>d</emphasis> subtree of the <literal>/a/b/c</literal> sub-tree).
+ The algorithm, in order to handle scenarios like this consistently, will always choose the first region
+ it encounters. In this way, if the algorithm needed to decide how to handle node
+ <literal>/a/b/c/d/e</literal>, it would start from there and work
+ its way up the tree until it hits the first defined region - in this case
+ <literal>/a/b/c/d</literal>.
+ </para>
+ <section>
+ <title>Resident Nodes</title>
+ <para>
+ Nodes marked as resident (using
+ <literal>Node.setResident()</literal>
+ API) will be ignored by the eviction policies both when checking whether to trigger
+ the eviction and when proceeding with the actual eviction of nodes. E.g. if a region is configured to have a
+ maximum of 10 nodes, resident nodes won't be
+ counted when deciding whether to evict nodes in that region. In addition, resident nodes will not be
+ considered for eviction when the region's eviction
+ threshold is reached.
+ </para>
+ <para>
+ In order to mark a node as resident the
+ <literal>Node.setResident()</literal>
+ API should be used. By default, the newly created nodes are not resident.
+ The
+ <literal>resident</literal>
+ attribute of a node is neither replicated, persisted nor transaction-aware.
+ </para>
+ <para>
+ A sample use case for resident nodes would be ensuring "path" nodes don't add "noise" to an eviction policy.
+ E.g.,:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+...
+ Map lotsOfData = generateData();
+ cache.put("/a/b/c", lotsOfData);
+ cache.getRoot().getChild("/a").setResident(true);
+ cache.getRoot().getChild("/a/b").setResident(true);
+...
+ ]]></programlisting>
+ <para>
+ In this example, the nodes
+ <literal>/a</literal>
+ and
+ <literal>/a/b</literal>
+ are paths which exist solely to
+ support the existence of node
+ <literal>/a/b/c</literal>
+ and don't hold any data themselves. As such, they are
+ good candidates for being marked as resident. This would lead to better memory management as no eviction
+ events would be
+ generated when accessing
+ <literal>/a</literal>
+ and<literal>/a/b</literal>.
+ </para>
+ <para>
+ N.B. when adding attributes to a resident node, e.g.
+ <literal>cache.put("/a", "k", "v")</literal>
+ in the above example, it would make sense to mark the nodes
+ as non-resident again and let them be considered for eviction..
+ </para>
+ </section>
+ </section>
+
+ <section>
+ <title>Configuring Eviction</title>
+ <section id="eviction.basic_cfg">
+ <title>Basic Configuration</title>
+ <para>
+ The basic eviction configuration element looks like:
+ </para>
+ <programlisting role="XML"><![CDATA[
+ ...
+ <eviction wakeUpInterval="500" eventQueueSize="100000">
+ <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm">
+ <property name="maxNodes" value="5000" />
+ <property name="timeToLive" value="1000" />
+ </default>
+ </eviction>
+ ...
+]]></programlisting>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <literal>wakeUpInterval</literal>
+ - this required parameter defines how often the eviction thread runs, in milliseconds.
+ </listitem>
+ <listitem>
+ <literal>eventQueueSize</literal>
+ - this optional parameter defines the size of the bounded queue which holds eviction events. If your
+ eviction thread does not run often enough, you may find that the event queue fills up. It may then be
+ necessary to get your eviction thread to run more frequently, or increase the size of your event queue.
+ This configuration is just the <emphasis>default</emphasis> event queue size, and can be overridden
+ in specific eviction regions. If not specified, this defaults to <literal>200000</literal>.
+ </listitem>
+ <listitem>
+ <literal>algorithmClass</literal>
+ - this is required, unless you set individual <literal>algorithmClass</literal> attributes on each and every region. This
+ defines the default eviction algorithm to use if one is not defined for a region.
+ </listitem>
+ <listitem>
+ Algorithm configuration attributes - these are specific to the algorithm specified in <literal>algorithmClass</literal>.
+ See the section specific to the algorithm you are interested in for details.
+ </listitem>
+ </itemizedlist>
+ </para>
+ </section>
+
+ <section>
+ <title>Programmatic Configuration</title>
+ <para>
+ Configuring eviction using the
+ <literal>Configuration</literal>
+ object entails the use of the
+ <literal>org.jboss.cache.config.EvictionConfig</literal>
+ bean, which is passed into
+ <literal>Configuration.setEvictionConfig()</literal>. See the
+ <link linkend="configuration">chapter on Configuration</link>
+ for more on building a
+ <literal>Configuration</literal>
+ programatically.
+ </para>
+
+ <para>
+ The use of simple POJO beans to represent all elements in a
+ cache's configuration also makes it fairly easy to programatically
+ add eviction regions after the cache is started. For example,
+ assume we had an existing cache configured via XML with the
+ EvictionConfig element shown above. Now at runtime we wished to
+ add a new eviction region named "/org/jboss/fifo", using
+ <literal>LRUAlgorithm</literal>
+ but a different number of
+ <literal>maxNodes</literal>:
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[
+ Fqn fqn = Fqn.fromString("/org/jboss/fifo");
+
+ // Create a configuration for an LRUPolicy
+ LRUAlgorithmConfig lruc = new LRUAlgorithmConfig();
+ lruc.setMaxNodes(10000);
+
+ // Create an eviction region config
+ EvictionRegionConfig erc = new EvictionRegionConfig(fqn, lruc);
+
+ // Create the region and set the config
+ Region region = cache.getRegion(fqn, true);
+ region.setEvictionRegionConfig(erc);
+ ]]></programlisting>
+ </section>
+ </section>
+
+ <section id="eviction.shipped">
+ <title>Shipped Eviction Policies</title>
+
+ This section details the different algorithms shipped with JBoss Cache, and the various configuration parameters
+ used for each algorithm.
+
+ <section>
+ <title>LRUAlgorithm - Least Recently Used</title>
+
+ <para>
+ <literal>org.jboss.cache.eviction.LRUAlgorithm</literal>
+ controls both the node lifetime and age. This policy guarantees a constant order (
+ <literal>O (1)</literal>
+ ) for
+ adds, removals and lookups (visits). It has the following configuration
+ parameters:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <literal>maxNodes</literal>
+ - This is the maximum number of nodes allowed in this region. 0 denotes immediate expiry, -1 denotes no limit.
+ </listitem>
+ <listitem>
+ <literal>timeToLive</literal>
+ - The amount of time a node is not written to or read (in milliseconds) before the node is swept away. 0
+ denotes immediate expiry, -1 denotes no limit.
+ </listitem>
+
+ <listitem>
+ <literal>maxAge</literal>
+ - Lifespan of a node (in milliseconds) regardless of idle time before the node is swept away. 0
+ denotes immediate expiry, -1 denotes no limit.
+ </listitem>
+
+ <listitem>
+ <literal>minTimeToLive</literal>
+ - the minimum amount of time a node must be allowed to live after being accessed before it is allowed to
+ be considered for eviction. 0 denotes that this feature is disabled, which is the default value.
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section>
+ <title>FIFOAlgorithm - First In, First Out</title>
+
+ <para>
+ <literal>org.jboss.cache.eviction.FIFOAlgorithm</literal>
+ controls the eviction in a proper first in first out order. This policy
+ guarantees a constant order (
+ <literal>O (1)</literal>
+ ) for adds, removals and lookups (visits). It has the
+ following configuration parameters:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <literal>maxNodes</literal>
+ - This is the maximum number of nodes allowed in this region. 0 denotes immediate expiry, -1 denotes no limit.
+ </listitem>
+ <listitem>
+ <literal>minTimeToLive</literal>
+ - the minimum amount of time a node must be allowed to live after being accessed before it is allowed to
+ be considered for eviction. 0 denotes that this feature is disabled, which is the default value.
+ </listitem>
+ </itemizedlist>
+ </section>
+
+
+ <section>
+ <title>MRUAlgorithm - Most Recently Used</title>
+
+ <para>
+ <literal>org.jboss.cache.eviction.MRUAlgorithm</literal>
+ controls
+ the eviction in based on most recently used algorithm. The most recently
+ used nodes will be the first to evict with this policy. This policy
+ guarantees a constant order (
+ <literal>O (1)</literal>
+ ) for adds, removals and lookups (visits). It has the
+ following configuration parameters:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <literal>maxNodes</literal>
+ - This is the maximum number of nodes allowed in this region. 0
+ denotes immediate expiry, -1 denotes no limit.
+ </listitem>
+ <listitem>
+ <literal>minTimeToLive</literal>
+ - the minimum amount of time a node must be allowed to live after being accessed before it is allowed to
+ be considered for eviction. 0 denotes that this feature is disabled, which is the default value.
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section>
+ <title>LFUAlgorithm - Least Frequently Used</title>
+
+ <para>
+ <literal>org.jboss.cache.eviction.LFUAlgorithm</literal>
+ controls
+ the eviction in based on least frequently used algorithm. The least
+ frequently used nodes will be the first to evict with this policy. Node
+ usage starts at 1 when a node is first added. Each time it is visited,
+ the node usage counter increments by 1. This number is used to determine
+ which nodes are least frequently used. LFU is also a sorted eviction
+ algorithm. The underlying EvictionQueue implementation and algorithm is
+ sorted in ascending order of the node visits counter. This class
+ guarantees a constant order (
+ <literal>O (1)</literal>
+ ) for adds, removal and searches. However, when any
+ number of nodes are added/visited to the queue for a given processing
+ pass, a single quasilinear (
+ <literal>O (n * log n)</literal>
+ ) operation is used to resort the queue in
+ proper LFU order. Similarly if any nodes are removed or evicted, a
+ single linear (
+ <literal>O (n)</literal>
+ ) pruning operation is necessary to clean up the
+ EvictionQueue. LFU has the following configuration parameters:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <literal>maxNodes</literal>
+ - This is the maximum number of nodes allowed in this region. 0
+ denotes immediate expiry, -1 denotes no limit.
+ </listitem>
+ <listitem>
+ <literal>minNodes</literal>
+ - This is the minimum number of nodes allowed in this region. This value determines what
+ the eviction queue should prune down to per pass. e.g. If
+ minNodes is 10 and the cache grows to 100 nodes, the cache is
+ pruned down to the 10 most frequently used nodes when the
+ eviction timer makes a pass through the eviction
+ algorithm.
+ </listitem>
+ <listitem>
+ <literal>minTimeToLive</literal>
+ - the minimum amount of time a node must be allowed to live after being accessed before it is allowed to
+ be considered for eviction. 0 denotes that this feature is disabled, which is the default value.
+ </listitem>
+ </itemizedlist>
+
+ </section>
+
+ <section>
+ <title>ExpirationAlgorithm</title>
+
+ <para>
+ <literal>org.jboss.cache.eviction.ExpirationAlgorithm</literal>
+ is a policy
+ that evicts nodes based on an absolute expiration time. The
+ expiration time is indicated using the
+ <literal>org.jboss.cache.Node.put()</literal>
+ method, using a String key
+ <literal>expiration</literal>
+ and the absolute time as a
+ <literal>java.lang.Long</literal>
+ object, with a value indicated as milliseconds past midnight
+ January 1st, 1970 UTC (the same relative time as provided by
+ <literal>java.lang.System.currentTimeMillis()</literal>
+ ).
+ </para>
+
+ <para>
+ This policy guarantees a constant order (
+ <literal>O (1)</literal>
+ ) for adds and removals.
+ Internally, a sorted set (TreeSet) containing the expiration
+ time and Fqn of the nodes is stored, which essentially
+ functions as a heap.
+ </para>
+
+ <para>
+ This policy has the following configuration parameters:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <literal>expirationKeyName</literal>
+ - This is the Node key name used
+ in the eviction algorithm. The configuration default is
+ <literal>expiration</literal>
+ .
+ </listitem>
+ <listitem>
+ <literal>maxNodes</literal>
+ - This is the maximum number of nodes allowed in this region. 0
+ denotes immediate expiry, -1 denotes no limit.
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ The following listing shows how the expiration date is indicated and how the
+ policy is applied:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+ Cache cache = DefaultCacheFactory.createCache();
+ Fqn fqn1 = Fqn.fromString("/node/1");
+ Long future = new Long(System.currentTimeMillis() + 2000);
+
+ // sets the expiry time for a node
+ cache.getRoot().addChild(fqn1).put(ExpirationConfiguration.EXPIRATION_KEY, future);
+
+ assertTrue(cache.getRoot().hasChild(fqn1));
+ Thread.sleep(5000);
+
+ // after 5 seconds, expiration completes
+ assertFalse(cache.getRoot().hasChild(fqn1));
+ ]]></programlisting>
+ <para>
+ Note that the expiration time of nodes is only checked when the
+ region manager wakes up every
+ <literal>wakeUpIntervalSeconds</literal>
+ , so eviction
+ may happen a few seconds later than indicated.
+ </para>
+ </section>
+ <section>
+ <title>ElementSizeAlgorithm - Eviction based on number of key/value pairs in a node</title>
+
+ <para>
+ <literal>org.jboss.cache.eviction.ElementSizeAlgorithm</literal>
+ controls
+ the eviction in based on the number of key/value pairs in the node. Nodes The most recently
+ used nodes will be the first to evict with this policy. It has the following configuration parameters:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <literal>maxNodes</literal>
+ - This is the maximum number of nodes allowed in this region. 0
+ denotes immediate expiry, -1 denotes no limit.
+ </listitem>
+ <listitem>
+ <literal>maxElementsPerNode</literal>
+ - This is the trigger number of attributes per node for the node to be selected for eviction. 0
+ denotes immediate expiry, -1 denotes no limit.
+ </listitem>
+ <listitem>
+ <literal>minTimeToLive</literal>
+ - the minimum amount of time a node must be allowed to live after being accessed before it is allowed to
+ be considered for eviction. 0 denotes that this feature is disabled, which is the default value.
+ </listitem>
+ </itemizedlist>
+ </section>
+ </section>
+</chapter>
\ No newline at end of file
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/images/icon.svg
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/images/icon.svg (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/images/icon.svg 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,3936 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:ns="http://ns.adobe.com/AdobeSVGViewerExtensions/3/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="32"
+ height="32"
+ id="svg3017"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ sodipodi:docname="book.svg"
+ sodipodi:docbase="/home/andy/Desktop">
+ <metadata
+ id="metadata489">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:window-height="480"
+ inkscape:window-width="858"
+ inkscape:pageshadow="0"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="1"
+ inkscape:cx="16"
+ inkscape:cy="15.944056"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:current-layer="svg3017" />
+ <defs
+ id="defs3019">
+ <linearGradient
+ id="linearGradient2381">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop2383" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="stop2385" />
+ </linearGradient>
+ <linearGradient
+ x1="415.73831"
+ y1="11.854"
+ x2="418.13361"
+ y2="18.8104"
+ id="XMLID_1758_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8362,0.5206,-1.1904,0.992,147.62,-30.9374)">
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="0"
+ id="stop3903" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop3905" />
+ <a:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="500.70749"
+ y1="-13.2441"
+ x2="513.46442"
+ y2="-2.1547"
+ id="XMLID_1757_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop3890" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop3892" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="XMLID_1755_">
+ <use
+ id="use3874"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_343_" />
+ </clipPath>
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop3877" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop3879" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop3881" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop3883" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="471.0806"
+ y1="201.07761"
+ x2="481.91711"
+ y2="210.4977"
+ id="XMLID_1754_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#6498c1;stop-opacity:1"
+ offset="0.005618"
+ id="stop3863" />
+ <stop
+ style="stop-color:#79a9cc;stop-opacity:1"
+ offset="0.2332"
+ id="stop3865" />
+ <stop
+ style="stop-color:#a4cde2;stop-opacity:1"
+ offset="0.74049997"
+ id="stop3867" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="1"
+ id="stop3869" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="5.618000e-003" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="0.4438" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="XMLID_1753_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop3851" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop3853" />
+ <a:midPointStop
+ style="stop-color:#B2B2B2"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B2B2B2"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="XMLID_1751_">
+ <use
+ id="use3837"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_338_" />
+ </clipPath>
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop3840" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop3842" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop3844" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop3846" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="468.2915"
+ y1="204.7612"
+ x2="479.39871"
+ y2="214.4166"
+ id="XMLID_1750_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop3830" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop3832" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop3818" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop3820" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="501.0903"
+ y1="-19.2544"
+ x2="531.85413"
+ y2="0.72390002"
+ id="XMLID_1748_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop3803" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop3805" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop3807" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop3809" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="XMLID_2275_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop9947" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop9949" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop9951" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop9953" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="XMLID_2273_">
+ <use
+ id="use9933"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_960_" />
+ </clipPath>
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="XMLID_2274_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop9936" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop9938" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop9940" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop9942" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="478.21341"
+ y1="-131.9297"
+ x2="469.85818"
+ y2="-140.28481"
+ id="XMLID_2272_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.5592,0.829,-0.829,0.5592,101.3357,-104.791)">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop9917" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop9919" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop9921" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop9923" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ style="overflow:visible"
+ id="TriangleInM">
+ <path
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
+ transform="scale(-0.4,-0.4)"
+ style="fill:#5c5c4f"
+ id="path3197" />
+ </marker>
+ <linearGradient
+ x1="200.7363"
+ y1="100.4028"
+ x2="211.99519"
+ y2="89.143997"
+ id="XMLID_3298_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#bfbfbf;stop-opacity:1"
+ offset="0"
+ id="stop20103" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop20105" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#BFBFBF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#BFBFBF" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F2F2F2" />
+ </linearGradient>
+ <linearGradient
+ x1="200.7363"
+ y1="100.4028"
+ x2="211.99519"
+ y2="89.143997"
+ id="linearGradient36592"
+ xlink:href="#XMLID_3298_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="181.2925"
+ y1="110.8481"
+ x2="192.6369"
+ y2="99.5037"
+ id="XMLID_3297_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="stop20096" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop20098" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="181.2925"
+ y1="110.8481"
+ x2="192.6369"
+ y2="99.5037"
+ id="linearGradient36595"
+ xlink:href="#XMLID_3297_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="211.77589"
+ y1="105.7749"
+ x2="212.6619"
+ y2="108.2092"
+ id="XMLID_3296_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#0f6124;stop-opacity:1"
+ offset="0"
+ id="stop20087" />
+ <stop
+ style="stop-color:#219630;stop-opacity:1"
+ offset="1"
+ id="stop20089" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#0F6124" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#0F6124" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#219630" />
+ </linearGradient>
+ <linearGradient
+ x1="211.77589"
+ y1="105.7749"
+ x2="212.6619"
+ y2="108.2092"
+ id="linearGradient36677"
+ xlink:href="#XMLID_3296_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="208.9834"
+ y1="116.8296"
+ x2="200.0811"
+ y2="96.834602"
+ id="XMLID_3295_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop20076" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.5"
+ id="stop20078" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop20080" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="208.9834"
+ y1="116.8296"
+ x2="200.0811"
+ y2="96.834602"
+ id="linearGradient36604"
+ xlink:href="#XMLID_3295_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="195.5264"
+ y1="97.911102"
+ x2="213.5213"
+ y2="115.9061"
+ id="XMLID_3294_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="0"
+ id="stop20069" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop20071" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="195.5264"
+ y1="97.911102"
+ x2="213.5213"
+ y2="115.9061"
+ id="linearGradient36607"
+ xlink:href="#XMLID_3294_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="186.1938"
+ y1="109.1343"
+ x2="206.6881"
+ y2="88.639999"
+ id="XMLID_3293_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop20056" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.16850001"
+ id="stop20058" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.23029999"
+ id="stop20060" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.2809"
+ id="stop20062" />
+ <stop
+ style="stop-color:#c2c2c2;stop-opacity:1"
+ offset="0.5"
+ id="stop20064" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.1685"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.2303"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.2809"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#C2C2C2" />
+ </linearGradient>
+ <linearGradient
+ x1="186.1938"
+ y1="109.1343"
+ x2="206.6881"
+ y2="88.639999"
+ id="linearGradient36610"
+ xlink:href="#XMLID_3293_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="184.8569"
+ y1="112.2676"
+ x2="211.94099"
+ y2="89.541397"
+ id="XMLID_3292_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop20043" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.16850001"
+ id="stop20045" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.23029999"
+ id="stop20047" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.2809"
+ id="stop20049" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop20051" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.1685"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.2303"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.2809"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="184.8569"
+ y1="112.2676"
+ x2="211.94099"
+ y2="89.541397"
+ id="linearGradient36613"
+ xlink:href="#XMLID_3292_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ style="overflow:visible"
+ id="TriangleOutM">
+ <path
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
+ transform="scale(0.4,0.4)"
+ style="fill:#5c5c4f;fill-rule:evenodd;stroke-width:1pt;marker-start:none"
+ id="path3238" />
+ </marker>
+ <linearGradient
+ x1="165.3"
+ y1="99.5"
+ x2="165.3"
+ y2="115.9"
+ id="XMLID_3457_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="0"
+ id="stop8309" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8311" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="1"
+ id="stop8313" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#999999" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#999999" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#B2B2B2" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#B2B2B2" />
+ </linearGradient>
+ <linearGradient
+ x1="165.3"
+ y1="99.5"
+ x2="165.3"
+ y2="115.9"
+ id="lg1997"
+ xlink:href="#XMLID_3457_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="175"
+ y1="99.800003"
+ x2="175"
+ y2="112.5"
+ id="XMLID_3456_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="0"
+ id="stop8300" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="0.60000002"
+ id="stop8302" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="1"
+ id="stop8304" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="0.6"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#191919" />
+ </linearGradient>
+ <linearGradient
+ x1="175"
+ y1="99.800003"
+ x2="175"
+ y2="112.5"
+ id="lg2000"
+ xlink:href="#XMLID_3456_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="168.8"
+ y1="107.1"
+ x2="164.5"
+ y2="110"
+ id="XMLID_3455_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="0"
+ id="stop8291" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="0.69999999"
+ id="stop8293" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="1"
+ id="stop8295" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.7"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#191919" />
+ </linearGradient>
+ <linearGradient
+ x1="168.8"
+ y1="107.1"
+ x2="164.5"
+ y2="110"
+ id="lg2003"
+ xlink:href="#XMLID_3455_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ id="lg63694">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop63696" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="stop63698" />
+ </linearGradient>
+ <linearGradient
+ x1="458"
+ y1="483"
+ x2="465.20001"
+ y2="271.39999"
+ id="lg2006"
+ xlink:href="#lg63694"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(6.3e-2,0,0,6.3e-2,-1.3,-9.8)" />
+ <linearGradient
+ x1="176.3"
+ y1="110.1"
+ x2="158.7"
+ y2="105"
+ id="XMLID_3453_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="0"
+ id="stop8271" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="0.2"
+ id="stop8273" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop8275" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.2"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="176.3"
+ y1="110.1"
+ x2="158.7"
+ y2="105"
+ id="lg2009"
+ xlink:href="#XMLID_3453_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="173.60001"
+ y1="118.9"
+ x2="172.8"
+ y2="128.2"
+ id="XMLID_3449_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8232" />
+ <stop
+ style="stop-color:#fff95e;stop-opacity:1"
+ offset="0.60000002"
+ id="stop8234" />
+ <stop
+ style="stop-color:#ecd600;stop-opacity:1"
+ offset="1"
+ id="stop8236" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.6"
+ style="stop-color:#FFF95E" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFF95E" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#ECD600" />
+ </linearGradient>
+ <linearGradient
+ x1="173.60001"
+ y1="118.9"
+ x2="172.8"
+ y2="128.2"
+ id="lg2016"
+ xlink:href="#XMLID_3449_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <radialGradient
+ cx="284.60001"
+ cy="172.60001"
+ r="6.5"
+ fx="284.60001"
+ fy="172.60001"
+ id="XMLID_3448_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4,0,0,1.4,-237.3,-126.8)">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8219" />
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8221" />
+ <stop
+ style="stop-color:#c96b00;stop-opacity:1"
+ offset="0.89999998"
+ id="stop8223" />
+ <stop
+ style="stop-color:#9a5500;stop-opacity:1"
+ offset="1"
+ id="stop8225" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.9"
+ style="stop-color:#C96B00" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#C96B00" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#9A5500" />
+ </radialGradient>
+ <radialGradient
+ cx="284.60001"
+ cy="172.60001"
+ r="6.5"
+ fx="284.60001"
+ fy="172.60001"
+ id="rg2020"
+ xlink:href="#XMLID_3448_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.513992,0,0,2.347576,-689.1621,-378.5717)" />
+ <linearGradient
+ x1="158.10001"
+ y1="123"
+ x2="164.2"
+ y2="126.6"
+ id="XMLID_3447_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecd600;stop-opacity:1"
+ offset="0"
+ id="stop8204" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8206" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop8208" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECD600" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECD600" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="158.10001"
+ y1="123"
+ x2="164.2"
+ y2="126.6"
+ id="lg2026"
+ xlink:href="#XMLID_3447_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <radialGradient
+ cx="280.89999"
+ cy="163.7"
+ r="10.1"
+ fx="280.89999"
+ fy="163.7"
+ id="XMLID_3446_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4,0,0,1.4,-237.3,-126.8)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop8197" />
+ <stop
+ style="stop-color:#fff95e;stop-opacity:1"
+ offset="1"
+ id="stop8199" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#FFFFFF" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#FFF95E" />
+ </radialGradient>
+ <radialGradient
+ cx="280.89999"
+ cy="163.7"
+ r="10.1"
+ fx="280.89999"
+ fy="163.7"
+ id="rg2029"
+ xlink:href="#XMLID_3446_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.7,0,0,1.7,-457.5,-266.8)" />
+ <linearGradient
+ x1="156.5"
+ y1="122.7"
+ x2="180.10001"
+ y2="122.7"
+ id="XMLID_3445_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8184" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.2"
+ id="stop8186" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8188" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.40000001"
+ id="stop8190" />
+ <stop
+ style="stop-color:#d68100;stop-opacity:1"
+ offset="1"
+ id="stop8192" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.2"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.4"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#D68100" />
+ </linearGradient>
+ <linearGradient
+ x1="156.5"
+ y1="122.7"
+ x2="180.10001"
+ y2="122.7"
+ id="lg2032"
+ xlink:href="#XMLID_3445_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="156.39999"
+ y1="115.4"
+ x2="180.10001"
+ y2="115.4"
+ id="XMLID_3444_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8171" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.2"
+ id="stop8173" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8175" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.40000001"
+ id="stop8177" />
+ <stop
+ style="stop-color:#d68100;stop-opacity:1"
+ offset="1"
+ id="stop8179" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.2"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.4"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#D68100" />
+ </linearGradient>
+ <linearGradient
+ x1="156.39999"
+ y1="115.4"
+ x2="180.10001"
+ y2="115.4"
+ id="lg2035"
+ xlink:href="#XMLID_3444_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="379.70001"
+ y1="167.89999"
+ x2="383.89999"
+ y2="172.89999"
+ id="lg4286_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s16159" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.1"
+ id="s16161" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="1"
+ id="s16163" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.1" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#737373"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="379.60001"
+ y1="167.8"
+ x2="383.79999"
+ y2="172"
+ id="lg6416"
+ xlink:href="#lg4286_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.622156,0.623859,-0.623859,2.62182,-882.9706,-673.7921)" />
+ <linearGradient
+ x1="384.20001"
+ y1="169.8"
+ x2="384.79999"
+ y2="170.39999"
+ id="lg4285_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="0"
+ id="s16152" />
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="1"
+ id="s16154" />
+ <ns:midPointStop
+ style="stop-color:#737373"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#737373"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#D9D9D9"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="384.20001"
+ y1="169.8"
+ x2="384.79999"
+ y2="170.39999"
+ id="lg6453"
+ xlink:href="#lg4285_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6,0.6,-0.6,2.6,-883,-673.8)" />
+ <linearGradient
+ x1="380.5"
+ y1="172.60001"
+ x2="382.79999"
+ y2="173.7"
+ id="lg4284_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
+ <stop
+ style="stop-color:gray;stop-opacity:1"
+ offset="0"
+ id="s16145" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="1"
+ id="s16147" />
+ <ns:midPointStop
+ style="stop-color:#808080"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#808080"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#E5E5E5"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="380.5"
+ y1="172.60001"
+ x2="382.79999"
+ y2="173.7"
+ id="lg6456"
+ xlink:href="#lg4284_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6,0.6,-0.6,2.6,-883,-673.8)" />
+ <radialGradient
+ cx="347.29999"
+ cy="244.5"
+ r="5.1999998"
+ fx="347.29999"
+ fy="244.5"
+ id="lg4282_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
+ <stop
+ style="stop-color:#333;stop-opacity:1"
+ offset="0"
+ id="s16135" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="s16137" />
+ <ns:midPointStop
+ style="stop-color:#333333"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#333333"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#999999"
+ offset="1" />
+ </radialGradient>
+ <linearGradient
+ x1="310.39999"
+ y1="397.70001"
+ x2="310.89999"
+ y2="399.5"
+ id="lg4280_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="0"
+ id="s16111" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.60000002"
+ id="s16113" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="1"
+ id="s16115" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.6" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="310.39999"
+ y1="397.70001"
+ x2="310.89999"
+ y2="399.5"
+ id="lg6467"
+ xlink:href="#lg4280_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
+ <linearGradient
+ x1="310.89999"
+ y1="395.79999"
+ x2="313.29999"
+ y2="403.10001"
+ id="lg4279_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0"
+ id="s16100" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.40000001"
+ id="s16102" />
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="0.89999998"
+ id="s16104" />
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="1"
+ id="s16106" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.4" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0.9" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="310.89999"
+ y1="395.79999"
+ x2="313.29999"
+ y2="403.10001"
+ id="lg6465"
+ xlink:href="#lg4279_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
+ <linearGradient
+ x1="307.79999"
+ y1="395.20001"
+ x2="313.79999"
+ y2="413.60001"
+ id="lg4278_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0"
+ id="s16091" />
+ <stop
+ style="stop-color:#fcd72f;stop-opacity:1"
+ offset="0.40000001"
+ id="s16093" />
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="1"
+ id="s16095" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FCD72F"
+ offset="0.4" />
+ <ns:midPointStop
+ style="stop-color:#FCD72F"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="306.5"
+ y1="393"
+ x2="309"
+ y2="404"
+ id="lg6400"
+ xlink:href="#lg4278_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
+ <linearGradient
+ x1="352.10001"
+ y1="253.60001"
+ x2="348.5"
+ y2="237.8"
+ id="lg4276_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
+ <stop
+ style="stop-color:#ffff87;stop-opacity:1"
+ offset="0"
+ id="s16077" />
+ <stop
+ style="stop-color:#ffad00;stop-opacity:1"
+ offset="1"
+ id="s16079" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFAD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="335.60001"
+ y1="354.79999"
+ x2="337.89999"
+ y2="354.79999"
+ id="lg4275_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="s16057" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.80000001"
+ id="s16059" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="s16061" />
+ <ns:midPointStop
+ style="stop-color:#D9D9D9"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#D9D9D9"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.8" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="335.60001"
+ y1="354.79999"
+ x2="337.89999"
+ y2="354.79999"
+ id="lg6463"
+ xlink:href="#lg4275_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
+ <linearGradient
+ x1="337.39999"
+ y1="353.10001"
+ x2="339.39999"
+ y2="357.10001"
+ id="lg4274_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s16048" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.1"
+ id="s16050" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s16052" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.1" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="337.39999"
+ y1="353.10001"
+ x2="339.39999"
+ y2="357.10001"
+ id="lg6461"
+ xlink:href="#lg4274_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
+ <linearGradient
+ x1="334.39999"
+ y1="355.5"
+ x2="335.5"
+ y2="356.79999"
+ id="lg4273_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s16041" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s16043" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="5.6e-003" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="334.39999"
+ y1="355.5"
+ x2="335.5"
+ y2="356.79999"
+ id="lg6381"
+ xlink:href="#lg4273_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
+ <linearGradient
+ x1="348.39999"
+ y1="247.39999"
+ x2="354.10001"
+ y2="242"
+ id="lg4271_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0"
+ id="s16025" />
+ <stop
+ style="stop-color:#9e9e9e;stop-opacity:1"
+ offset="0.40000001"
+ id="s16027" />
+ <stop
+ style="stop-color:black;stop-opacity:1"
+ offset="1"
+ id="s16029" />
+ <ns:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="351.29999"
+ y1="257.29999"
+ x2="346.29999"
+ y2="235.5"
+ id="lg4270_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ffff87;stop-opacity:1"
+ offset="0"
+ id="s16007" />
+ <stop
+ style="stop-color:#ffad00;stop-opacity:1"
+ offset="1"
+ id="s16009" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFAD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="351.29999"
+ y1="257.29999"
+ x2="346.29999"
+ y2="235.5"
+ id="lg6459"
+ xlink:href="#lg4270_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)" />
+ <linearGradient
+ x1="43.799999"
+ y1="32.5"
+ x2="63.299999"
+ y2="66.400002"
+ id="XMLID_2708_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop75318" />
+ <stop
+ style="stop-color:#fffcea;stop-opacity:1"
+ offset="1"
+ id="stop75320" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#FFFCEA"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="43.799999"
+ y1="32.5"
+ x2="63.299999"
+ y2="66.400002"
+ id="lg1907"
+ xlink:href="#XMLID_2708_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)" />
+ <linearGradient
+ x1="52.5"
+ y1="40.400002"
+ x2="58.200001"
+ y2="64"
+ id="XMLID_2707_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ffdea0;stop-opacity:1"
+ offset="0"
+ id="stop75305" />
+ <stop
+ style="stop-color:#ffd89e;stop-opacity:1"
+ offset="0.30000001"
+ id="stop75307" />
+ <stop
+ style="stop-color:#ffd79e;stop-opacity:1"
+ offset="0.30000001"
+ id="stop75309" />
+ <stop
+ style="stop-color:#dbaf6d;stop-opacity:1"
+ offset="0.69999999"
+ id="stop75311" />
+ <stop
+ style="stop-color:#6f4c24;stop-opacity:1"
+ offset="1"
+ id="stop75313" />
+ <a:midPointStop
+ style="stop-color:#FFDEA0"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFDEA0"
+ offset="0.6" />
+ <a:midPointStop
+ style="stop-color:#FFD79E"
+ offset="0.3" />
+ <a:midPointStop
+ style="stop-color:#FFD79E"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#DBAF6D"
+ offset="0.7" />
+ <a:midPointStop
+ style="stop-color:#DBAF6D"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#6F4C24"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="52.5"
+ y1="40.400002"
+ x2="58.200001"
+ y2="64"
+ id="lg1910"
+ xlink:href="#XMLID_2707_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)" />
+ <linearGradient
+ x1="58"
+ y1="73.199997"
+ x2="44.5"
+ y2="19"
+ id="XMLID_2704_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)">
+ <stop
+ style="stop-color:#d4a96c;stop-opacity:1"
+ offset="0.5"
+ id="stop75284" />
+ <stop
+ style="stop-color:#dcb273;stop-opacity:1"
+ offset="0.60000002"
+ id="stop75286" />
+ <stop
+ style="stop-color:#f0ca87;stop-opacity:1"
+ offset="0.80000001"
+ id="stop75288" />
+ <stop
+ style="stop-color:#ffdc96;stop-opacity:1"
+ offset="0.69999999"
+ id="stop75290" />
+ <stop
+ style="stop-color:#c18a42;stop-opacity:1"
+ offset="1"
+ id="stop75292" />
+ <a:midPointStop
+ style="stop-color:#D4A96C"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#D4A96C"
+ offset="0.6" />
+ <a:midPointStop
+ style="stop-color:#FFDC96"
+ offset="0.7" />
+ <a:midPointStop
+ style="stop-color:#FFDC96"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#C18A42"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="53.700001"
+ y1="32"
+ x2="53.700001"
+ y2="64.599998"
+ id="XMLID_2703_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e5c9b0;stop-opacity:1"
+ offset="0"
+ id="stop75268" />
+ <stop
+ style="stop-color:#e5c9b0;stop-opacity:1"
+ offset="0.40000001"
+ id="stop75270" />
+ <stop
+ style="stop-color:#c0aa94;stop-opacity:1"
+ offset="1"
+ id="stop75272" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0.4" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#C0AA94"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="53.700001"
+ y1="32"
+ x2="53.700001"
+ y2="64.599998"
+ id="lg1916"
+ xlink:href="#XMLID_2703_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)" />
+ <linearGradient
+ x1="224.31"
+ y1="19.450001"
+ x2="214.33"
+ y2="11.46"
+ id="XMLID_419_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#404040;stop-opacity:1"
+ offset="0"
+ id="s1903" />
+ <stop
+ style="stop-color:#6d6d6d;stop-opacity:1"
+ offset="0.33000001"
+ id="s1905" />
+ <stop
+ style="stop-color:#e9e9e9;stop-opacity:1"
+ offset="1"
+ id="s1907" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#404040" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#404040" />
+ <a:midPointStop
+ offset="0.33"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E9E9E9" />
+ </linearGradient>
+ <linearGradient
+ x1="221.84"
+ y1="32.779999"
+ x2="212.2"
+ y2="20.27"
+ id="lg1988"
+ xlink:href="#XMLID_419_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
+ <linearGradient
+ x1="228.35001"
+ y1="33.279999"
+ x2="215.42999"
+ y2="33.279999"
+ id="lg1900"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s1902" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="s1906" />
+ <a:midPointStop
+ style="stop-color:#575757"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#575757"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#6D6D6D"
+ offset="0.33" />
+ <a:midPointStop
+ style="stop-color:#6D6D6D"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#D3D3D3"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="234.81"
+ y1="33.279999"
+ x2="228.27"
+ y2="33.279999"
+ id="lg1908"
+ xlink:href="#lg1900"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
+ <linearGradient
+ x1="228.35001"
+ y1="33.279999"
+ x2="215.42999"
+ y2="33.279999"
+ id="XMLID_416_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#575757;stop-opacity:1"
+ offset="0"
+ id="s1874" />
+ <stop
+ style="stop-color:#6d6d6d;stop-opacity:1"
+ offset="0.33000001"
+ id="s1876" />
+ <stop
+ style="stop-color:#d3d3d3;stop-opacity:1"
+ offset="1"
+ id="s1878" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#575757" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#575757" />
+ <a:midPointStop
+ offset="0.33"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#D3D3D3" />
+ </linearGradient>
+ <linearGradient
+ x1="228.35001"
+ y1="33.279999"
+ x2="215.42999"
+ y2="33.279999"
+ id="lg1991"
+ xlink:href="#XMLID_416_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
+ <radialGradient
+ cx="603.19"
+ cy="230.77"
+ r="1.67"
+ fx="603.19"
+ fy="230.77"
+ id="x5010_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1,0,0,1.1,-54.33,-75.4)">
+ <stop
+ style="stop-color:#c9ffc9;stop-opacity:1"
+ offset="0"
+ id="stop29201" />
+ <stop
+ style="stop-color:#23a11f;stop-opacity:1"
+ offset="1"
+ id="stop29203" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#C9FFC9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#C9FFC9" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#23A11F" />
+ </radialGradient>
+ <radialGradient
+ cx="603.19"
+ cy="230.77"
+ r="1.67"
+ fx="603.19"
+ fy="230.77"
+ id="radialGradient5711"
+ xlink:href="#x5010_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23,0,0,1.23,-709.93,-245.02)" />
+ <linearGradient
+ x1="592.31"
+ y1="162.60001"
+ x2="609.32001"
+ y2="145.59"
+ id="lg5722"
+ xlink:href="#x5003_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="601.48999"
+ y1="170.16"
+ x2="613.84003"
+ y2="170.16"
+ id="x5002_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop29134" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.2"
+ id="stop29136" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="stop29138" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.20"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#999999" />
+ </linearGradient>
+ <linearGradient
+ x1="601.48999"
+ y1="170.16"
+ x2="613.84003"
+ y2="170.16"
+ id="lg5725"
+ xlink:href="#x5002_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.23"
+ id="x5004_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop29157" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop29159" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.23"
+ id="lg5728"
+ xlink:href="#x5004_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="592.31"
+ y1="162.60001"
+ x2="609.32001"
+ y2="145.59"
+ id="x5003_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0"
+ id="stop29143" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="1"
+ id="stop29145" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E5E5E5" />
+ </linearGradient>
+ <linearGradient
+ x1="592.31"
+ y1="162.60001"
+ x2="609.32001"
+ y2="145.59"
+ id="lg5732"
+ xlink:href="#x5003_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.24001"
+ id="x5000_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop29124" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop29126" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.24001"
+ id="lg5735"
+ xlink:href="#x5000_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="308.54999"
+ y1="149.89999"
+ x2="299.72"
+ y2="148.83"
+ id="XMLID_2433_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d6d6d6;stop-opacity:1"
+ offset="0"
+ id="71615" />
+ <stop
+ style="stop-color:#a5a5a5;stop-opacity:1"
+ offset="1"
+ id="71617" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D6D6D6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D6D6D6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#A5A5A5" />
+ </linearGradient>
+ <linearGradient
+ x1="308.54999"
+ y1="149.89999"
+ x2="299.72"
+ y2="148.83"
+ id="lg1952"
+ xlink:href="#XMLID_2433_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
+ <radialGradient
+ cx="307.39999"
+ cy="121"
+ r="23.35"
+ fx="307.39999"
+ fy="121"
+ id="XMLID_2432_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.98,0,0,0.98,2.88,2.75)">
+ <stop
+ style="stop-color:#d2d2d2;stop-opacity:1"
+ offset="0.19"
+ id="71592" />
+ <stop
+ style="stop-color:#cfcfcf;stop-opacity:1"
+ offset="0.44999999"
+ id="71594" />
+ <stop
+ style="stop-color:#c7c7c7;stop-opacity:1"
+ offset="0.60000002"
+ id="71596" />
+ <stop
+ style="stop-color:#b9b9b9;stop-opacity:1"
+ offset="0.74000001"
+ id="71598" />
+ <stop
+ style="stop-color:#a4a4a4;stop-opacity:1"
+ offset="0.86000001"
+ id="71600" />
+ <stop
+ style="stop-color:#8a8a8a;stop-opacity:1"
+ offset="0.95999998"
+ id="71602" />
+ <stop
+ style="stop-color:gray;stop-opacity:1"
+ offset="1"
+ id="71604" />
+ <a:midPointStop
+ offset="0.19"
+ style="stop-color:#D2D2D2" />
+ <a:midPointStop
+ offset="0.8"
+ style="stop-color:#D2D2D2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#808080" />
+ </radialGradient>
+ <radialGradient
+ cx="307.39999"
+ cy="121"
+ r="23.35"
+ fx="307.39999"
+ fy="121"
+ id="radialGradient2331"
+ xlink:href="#XMLID_2432_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-276.62,-121.54)" />
+ <linearGradient
+ x1="294.13"
+ y1="127.07"
+ x2="294.13"
+ y2="142.2"
+ id="XMLID_2430_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b5d8ff;stop-opacity:1"
+ offset="0"
+ id="71582" />
+ <stop
+ style="stop-color:black;stop-opacity:1"
+ offset="1"
+ id="71584" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B5D8FF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B5D8FF" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000" />
+ </linearGradient>
+ <linearGradient
+ x1="294.13"
+ y1="127.07"
+ x2="294.13"
+ y2="142.2"
+ id="lg2820"
+ xlink:href="#XMLID_2430_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
+ <linearGradient
+ x1="279.10999"
+ y1="148.03"
+ x2="309.16"
+ y2="148.03"
+ id="XMLID_2429_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e1e1e1;stop-opacity:1"
+ offset="0"
+ id="71564" />
+ <stop
+ style="stop-color:#e1e1e1;stop-opacity:1"
+ offset="0.25"
+ id="71566" />
+ <stop
+ style="stop-color:#a5a5a5;stop-opacity:1"
+ offset="0.44"
+ id="71568" />
+ <stop
+ style="stop-color:#a5a5a5;stop-opacity:1"
+ offset="1"
+ id="71570" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.25"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.44"
+ style="stop-color:#A5A5A5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A5A5A5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#A5A5A5" />
+ </linearGradient>
+ <linearGradient
+ x1="279.10999"
+ y1="148.03"
+ x2="309.16"
+ y2="148.03"
+ id="lg2818"
+ xlink:href="#XMLID_2429_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
+ <radialGradient
+ cx="622.34302"
+ cy="14.449"
+ r="26.496"
+ fx="622.34302"
+ fy="14.449"
+ id="lg3499_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.851,0,0,0.849,69.297,51.658)">
+ <stop
+ style="stop-color:#23468e;stop-opacity:1"
+ offset="0"
+ id="stop10972" />
+ <stop
+ style="stop-color:#012859;stop-opacity:1"
+ offset="1"
+ id="stop10974" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#23468E" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#23468E" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#012859" />
+ </radialGradient>
+ <radialGradient
+ cx="622.34302"
+ cy="14.449"
+ r="26.496"
+ fx="622.34302"
+ fy="14.449"
+ id="rg5791"
+ xlink:href="#lg3499_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.858,0,0,0.857,-511.7,9.02)" />
+ <linearGradient
+ x1="616.112"
+ y1="76.247002"
+ x2="588.14099"
+ y2="60.742001"
+ id="lg3497_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#01326e;stop-opacity:1"
+ offset="0"
+ id="stop10962" />
+ <stop
+ style="stop-color:#012859;stop-opacity:1"
+ offset="1"
+ id="stop10964" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#01326E" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#01326E" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#012859" />
+ </linearGradient>
+ <linearGradient
+ x1="617.698"
+ y1="82.445999"
+ x2="585.95203"
+ y2="54.848999"
+ id="lg3496_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="stop10950" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop10952" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="617.698"
+ y1="82.445999"
+ x2="585.95203"
+ y2="54.848999"
+ id="lg5794"
+ xlink:href="#lg3496_"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="601.39001"
+ y1="55.341"
+ x2="588.29199"
+ y2="71.515999"
+ id="lg3495_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop10941" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.52200001"
+ id="stop10943" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop10945" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.522"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="601.39001"
+ y1="55.341"
+ x2="588.29199"
+ y2="71.515999"
+ id="lg5771"
+ xlink:href="#lg3495_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.009,0,0,1.009,-581.615,-43.098)" />
+ <linearGradient
+ x1="611.34601"
+ y1="55.279999"
+ x2="590.39001"
+ y2="81.157997"
+ id="lg3494_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop10932" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.52200001"
+ id="stop10934" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop10936" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.522"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="611.34601"
+ y1="55.279999"
+ x2="590.39001"
+ y2="81.157997"
+ id="lg5774"
+ xlink:href="#lg3494_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.009,0,0,1.009,-581.616,-43.098)" />
+ <linearGradient
+ x1="798.72998"
+ y1="69.839996"
+ x2="799.04999"
+ y2="70.709999"
+ id="g3302_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#005e00;stop-opacity:1"
+ offset="0"
+ id="s6504" />
+ <stop
+ style="stop-color:#23a11f;stop-opacity:1"
+ offset="1"
+ id="s6506" />
+ <a:midPointstop
+ style="stop-color:#005E00"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#005E00"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#23A11F"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="798.72998"
+ y1="69.839996"
+ x2="799.04999"
+ y2="70.709999"
+ id="lg5851"
+ xlink:href="#g3302_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
+ <linearGradient
+ x1="779.19"
+ y1="122.73"
+ x2="811.69"
+ y2="149.74001"
+ id="g3301_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,129.19)">
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0"
+ id="s6483" />
+ <stop
+ style="stop-color:#eee;stop-opacity:1"
+ offset="0.17"
+ id="s6485" />
+ <stop
+ style="stop-color:#e3e3e3;stop-opacity:1"
+ offset="0.34"
+ id="s6487" />
+ <stop
+ style="stop-color:#cfcfcf;stop-opacity:1"
+ offset="0.50999999"
+ id="s6489" />
+ <stop
+ style="stop-color:#b4b4b4;stop-opacity:1"
+ offset="0.67000002"
+ id="s6491" />
+ <stop
+ style="stop-color:#919191;stop-opacity:1"
+ offset="0.83999997"
+ id="s6493" />
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="1"
+ id="s6495" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.71" />
+ <a:midPointstop
+ style="stop-color:#666666"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="779.19"
+ y1="122.73"
+ x2="811.69"
+ y2="149.74001"
+ id="lg5855"
+ xlink:href="#g3301_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,-0.316,0,1.263,-926.036,103.123)" />
+ <clipPath
+ id="g3299_">
+ <use
+ id="use6469"
+ x="0"
+ y="0"
+ width="1005.92"
+ height="376.97"
+ xlink:href="#g101_" />
+ </clipPath>
+ <radialGradient
+ cx="1189.9301"
+ cy="100.05"
+ r="40.400002"
+ fx="1189.9301"
+ fy="100.05"
+ id="g3300_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.34,-8.46e-2,0,0.34,394.16,137.13)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s6472" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="s6474" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#000000"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1199.74"
+ cy="97.150002"
+ r="40.400002"
+ fx="1199.74"
+ fy="97.150002"
+ id="rg5860"
+ xlink:href="#g3300_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.409,-0.107,0,0.429,-451.489,113.149)" />
+ <linearGradient
+ x1="796.38"
+ y1="67.580002"
+ x2="781.28003"
+ y2="58.549999"
+ id="g3298_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#4c8bca;stop-opacity:1"
+ offset="0"
+ id="s6462" />
+ <stop
+ style="stop-color:#b7e9ff;stop-opacity:1"
+ offset="1"
+ id="s6464" />
+ <a:midPointstop
+ style="stop-color:#4C8BCA"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#4C8BCA"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B7E9FF"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="800.97998"
+ y1="140.72"
+ x2="777.71997"
+ y2="121.76"
+ id="g3297_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,129.19)">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="s6448" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s6450" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="800.97998"
+ y1="140.72"
+ x2="777.71997"
+ y2="121.76"
+ id="lg5890"
+ xlink:href="#g3297_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,129.19)" />
+ <linearGradient
+ x1="790.03998"
+ y1="-16.33"
+ x2="779.84003"
+ y2="-3.73"
+ id="g3296_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,70.17)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="s6439" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.51999998"
+ id="s6441" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s6443" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.52" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="790.03998"
+ y1="-16.33"
+ x2="779.84003"
+ y2="-3.73"
+ id="lg5866"
+ xlink:href="#g3296_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,28.6)" />
+ <linearGradient
+ x1="785.84003"
+ y1="72.989998"
+ x2="785.26001"
+ y2="76.279999"
+ id="g3293_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s6412" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="1"
+ id="s6414" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#737373"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="785.84003"
+ y1="72.989998"
+ x2="785.26001"
+ y2="76.279999"
+ id="lg5871"
+ xlink:href="#g3293_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
+ <linearGradient
+ x1="789.37"
+ y1="69.879997"
+ x2="791.03998"
+ y2="77.120003"
+ id="g3292_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="0"
+ id="s6403" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.28"
+ id="s6405" />
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="1"
+ id="s6407" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.28" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#666666"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="789.37"
+ y1="69.879997"
+ x2="791.03998"
+ y2="77.120003"
+ id="lg5874"
+ xlink:href="#g3292_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
+ <linearGradient
+ x1="786.65997"
+ y1="136.12"
+ x2="786.71002"
+ y2="134.33"
+ id="g3290_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,137.29)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="s6380" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="1"
+ id="s6382" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="786.65997"
+ y1="136.12"
+ x2="786.71002"
+ y2="134.33"
+ id="lg5878"
+ xlink:href="#g3290_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,-0.316,0,1.263,-926.036,113.351)" />
+ <radialGradient
+ cx="1458.77"
+ cy="-5.0999999"
+ r="35.130001"
+ fx="1458.77"
+ fy="-5.0999999"
+ id="g3289_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.42,0,0,0.42,167.09,79.84)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s6371" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="s6373" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1458.77"
+ cy="-5.0999999"
+ r="35.130001"
+ fx="1458.77"
+ fy="-5.0999999"
+ id="rg5881"
+ xlink:href="#g3289_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.505,0,0,0.53,-724.957,40.636)" />
+ <radialGradient
+ cx="1612.98"
+ cy="-4.4699998"
+ r="36.580002"
+ fx="1612.98"
+ fy="-4.4699998"
+ id="g3288_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.34,0,0,0.36,238.56,86.87)">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="s6362" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0.63999999"
+ id="s6364" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="1"
+ id="s6366" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.64" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#737373"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1612.98"
+ cy="-4.4699998"
+ r="36.580002"
+ fx="1612.98"
+ fy="-4.4699998"
+ id="rg5884"
+ xlink:href="#g3288_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.408,0,0,0.448,-638.943,49.495)" />
+ <radialGradient
+ cx="1470.5"
+ cy="-10.21"
+ r="33.290001"
+ fx="1470.5"
+ fy="-10.21"
+ id="g3287_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.42,0,0,0.42,167.09,79.84)">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="s6347" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0.38999999"
+ id="s6349" />
+ <stop
+ style="stop-color:#b1b1b1;stop-opacity:1"
+ offset="0.75"
+ id="s6351" />
+ <stop
+ style="stop-color:#aaa;stop-opacity:1"
+ offset="0.88"
+ id="s6353" />
+ <stop
+ style="stop-color:#9e9e9e;stop-opacity:1"
+ offset="0.97000003"
+ id="s6355" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="s6357" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.39" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.87" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1470.5"
+ cy="-10.21"
+ r="33.290001"
+ fx="1470.5"
+ fy="-10.21"
+ id="rg5887"
+ xlink:href="#g3287_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.505,0,0,0.53,-724.957,40.636)" />
+ <pattern
+ patternTransform="matrix(0.592927,0,0,0.592927,78,462)"
+ id="cream-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-365.3146,-513.505)"
+ id="g3047">
+ id="path2858" />
+ <path
+ inkscape:label="#path2854"
+ sodipodi:nodetypes="czzzz"
+ style="fill:#e3dcc0"
+ id="path3060"
+ d="M 390.31462,529.50504 C 390.31462,534.47304 386.28262,538.50504 381.31462,538.50504 C 376.34662,538.50504 372.31462,534.47304 372.31462,529.50504 C 372.31462,524.53704 376.34662,520.50504 381.31462,520.50504 C 386.28262,520.50504 390.31462,524.53704 390.31462,529.50504 z " />
+</g>
+ </pattern>
+ <pattern
+ patternTransform="matrix(0.733751,0,0,0.733751,67,367)"
+ id="dark-cream-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-408.0946,-513.505)"
+ id="dark-cream-spot"
+ inkscape:label="#g3043">
+ <path
+ sodipodi:nodetypes="czzzz"
+ style="fill:#c8c5ac"
+ d="M 433.09458,529.50504 C 433.09458,534.47304 429.06258,538.50504 424.09458,538.50504 C 419.12658,538.50504 415.09458,534.47304 415.09458,529.50504 C 415.09458,524.53704 419.12658,520.50504 424.09458,520.50504 C 429.06258,520.50504 433.09458,524.53704 433.09458,529.50504 z "
+ id="path2953" />
+ </g>
+ </pattern>
+ <pattern
+ patternTransform="matrix(0.375,0,0,0.375,379,400)"
+ id="white-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-484.3997,-513.505)"
+ id="white-spot"
+ inkscape:label="#g3035">
+ <path
+ style="opacity:0.25;fill:white"
+ id="path3033"
+ d="M 509.39967,529.50504 C 509.39967,534.47304 505.36767,538.50504 500.39967,538.50504 C 495.43167,538.50504 491.39967,534.47304 491.39967,529.50504 C 491.39967,524.53704 495.43167,520.50504 500.39967,520.50504 C 505.36767,520.50504 509.39967,524.53704 509.39967,529.50504 z "
+ sodipodi:nodetypes="czzzz" />
+ </g>
+ </pattern>
+ <pattern
+ patternTransform="matrix(0.455007,0,0,0.455007,-5e-5,1.9e-5)"
+ id="black-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-448.3997,-513.505)"
+ id="black-spot"
+ inkscape:label="#g3039">
+ <path
+ sodipodi:nodetypes="czzzz"
+ d="M 473.39967,529.50504 C 473.39967,534.47304 469.36767,538.50504 464.39967,538.50504 C 459.43167,538.50504 455.39967,534.47304 455.39967,529.50504 C 455.39967,524.53704 459.43167,520.50504 464.39967,520.50504 C 469.36767,520.50504 473.39967,524.53704 473.39967,529.50504 z "
+ id="path2961"
+ style="opacity:0.25;fill:black" />
+ </g>
+ </pattern>
+ <linearGradient
+ x1="501.0903"
+ y1="-19.2544"
+ x2="531.85413"
+ y2="0.72390002"
+ id="linearGradient17334"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop17336" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop17338" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop17340" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop17342" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.5112"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.6461"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#16336E" />
+ </linearGradient>
+ <linearGradient
+ x1="415.73831"
+ y1="11.854"
+ x2="418.13361"
+ y2="18.8104"
+ id="linearGradient17426"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8362,0.5206,-1.1904,0.992,147.62,-30.9374)">
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="0"
+ id="stop17428" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop17430" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F2F2F2" />
+ </linearGradient>
+ <linearGradient
+ x1="478.21341"
+ y1="-131.9297"
+ x2="469.85818"
+ y2="-140.28481"
+ id="linearGradient17434"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.5592,0.829,-0.829,0.5592,101.3357,-104.791)">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop17436" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop17438" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop17440" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop17442" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F3403F" />
+ <a:midPointStop
+ offset="0.4213"
+ style="stop-color:#F3403F" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#A6100C" />
+ </linearGradient>
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17709"
+ xlink:href="#XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)" />
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17711"
+ xlink:href="#XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="linearGradient17713"
+ xlink:href="#XMLID_1753_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17715"
+ xlink:href="#XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="500.70749"
+ y1="-13.2441"
+ x2="513.46442"
+ y2="-2.1547"
+ id="linearGradient17717"
+ xlink:href="#XMLID_1757_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="linearGradient17721"
+ xlink:href="#XMLID_2274_"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="linearGradient17723"
+ xlink:href="#XMLID_2275_"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="500.70749"
+ y1="-13.2441"
+ x2="513.46442"
+ y2="-2.1547"
+ id="linearGradient17416"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop17418" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop17420" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <defs
+ id="defs9929">
+ <path
+ d="M 489.21,209.35 L 485.35,203.63 C 483.63,204.25 473.47,208.93 471.5,210.18 C 470.57,210.77 470.17,211.16 469.72,212.48 C 470.93,212.31 471.72,212.49 473.42,213.04 C 473.26,214.77 473.24,215.74 473.57,218.2 C 474.01,216.88 474.41,216.49 475.34,215.9 C 477.33,214.65 487.49,209.97 489.21,209.35 z "
+ id="XMLID_960_" />
+ </defs>
+ <clipPath
+ id="clipPath17448">
+ <use
+ id="use17450"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_960_" />
+ </clipPath>
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="linearGradient17452"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop17454" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop17456" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop17458" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop17460" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="linearGradient17463"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop17465" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop17467" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop17469" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop17471" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="linearGradient17807"
+ xlink:href="#XMLID_2275_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-177.1654,35.43307)" />
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="linearGradient17810"
+ xlink:href="#XMLID_2274_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-177.1654,35.43307)" />
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17812"
+ xlink:href="#XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)" />
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17814"
+ xlink:href="#XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="linearGradient17816"
+ xlink:href="#XMLID_1753_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17818"
+ xlink:href="#XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17347"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop17349" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop17351" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#96BAD6" />
+ </linearGradient>
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="linearGradient17379"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop17381" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop17383" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F2F2F2" />
+ </linearGradient>
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17862"
+ xlink:href="#XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,-166.1427,-0.18283)" />
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17864"
+ xlink:href="#XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <defs
+ id="defs3859">
+ <polygon
+ points="465.54,213.52 481.94,217.46 482.74,216.71 487.46,198.05 471.08,194.07 470.26,194.83 465.54,213.52 "
+ id="XMLID_343_" />
+ </defs>
+ <linearGradient
+ x1="471.0806"
+ y1="201.07761"
+ x2="481.91711"
+ y2="210.4977"
+ id="linearGradient17389"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#6498c1;stop-opacity:1"
+ offset="0.005618"
+ id="stop17391" />
+ <stop
+ style="stop-color:#79a9cc;stop-opacity:1"
+ offset="0.2332"
+ id="stop17393" />
+ <stop
+ style="stop-color:#a4cde2;stop-opacity:1"
+ offset="0.74049997"
+ id="stop17395" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="1"
+ id="stop17397" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="5.618000e-003" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="0.4438" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="clipPath17400">
+ <use
+ id="use17402"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_343_" />
+ </clipPath>
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17404"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop17406" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop17408" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop17410" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop17412" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17882"
+ xlink:href="#XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <defs
+ id="defs3826">
+ <polygon
+ points="463.52,216.14 480.56,220.24 481.36,219.5 483.03,202.04 469.05,196.69 468.24,197.45 463.52,216.14 "
+ id="XMLID_338_" />
+ </defs>
+ <linearGradient
+ x1="468.2915"
+ y1="204.7612"
+ x2="479.39871"
+ y2="214.4166"
+ id="linearGradient17357"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop17359" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop17361" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="clipPath17364">
+ <use
+ id="use17366"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_338_" />
+ </clipPath>
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17368"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop17370" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop17372" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop17374" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop17376" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398"
+ id="linearGradient2387"
+ xlink:href="#linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
+ <linearGradient
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398"
+ id="linearGradient5105"
+ xlink:href="#linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
+ <linearGradient
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398"
+ id="linearGradient5145"
+ xlink:href="#linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2381"
+ id="linearGradient2371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)"
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398" />
+ </defs>
+ <g
+ transform="matrix(0.437808,-0.437808,0.437808,0.437808,-220.8237,43.55311)"
+ id="g5089">
+ <path
+ d="M 8.4382985,-6.28125 C 7.8309069,-6.28125 4.125,-0.33238729 4.125,1.96875 L 4.125,28.6875 C 4.125,29.533884 4.7068159,29.8125 5.28125,29.8125 L 30.84375,29.8125 C 31.476092,29.8125 31.968751,29.319842 31.96875,28.6875 L 31.96875,23.46875 L 32.25,23.46875 C 32.74684,23.46875 33.156249,23.059339 33.15625,22.5625 L 33.15625,-5.375 C 33.15625,-5.8718398 32.74684,-6.28125 32.25,-6.28125 L 8.4382985,-6.28125 z "
+ transform="translate(282.8327,227.1903)"
+ style="fill:#5c5c4f;stroke:black;stroke-width:3.23021388;stroke-miterlimit:4;stroke-dasharray:none"
+ id="path5091" />
+ <rect
+ width="27.85074"
+ height="29.369793"
+ rx="1.1414107"
+ ry="1.1414107"
+ x="286.96509"
+ y="227.63805"
+ style="fill:#032c87"
+ id="rect5093" />
+ <path
+ d="M 288.43262,225.43675 L 313.67442,225.43675 L 313.67442,254.80655 L 287.29827,254.83069 L 288.43262,225.43675 z "
+ style="fill:white"
+ id="rect5095" />
+ <path
+ d="M 302.44536,251.73726 C 303.83227,259.59643 301.75225,263.02091 301.75225,263.02091 C 303.99609,261.41329 305.71651,259.54397 306.65747,257.28491 C 307.62455,259.47755 308.49041,261.71357 310.9319,263.27432 C 310.9319,263.27432 309.33686,256.07392 309.22047,251.73726 L 302.44536,251.73726 z "
+ style="fill:#a70000;fill-opacity:1;stroke-width:2"
+ id="path5097" />
+ <rect
+ width="25.241802"
+ height="29.736675"
+ rx="0.89682275"
+ ry="0.89682275"
+ x="290.73544"
+ y="220.92249"
+ style="fill:#809cc9"
+ id="rect5099" />
+ <path
+ d="M 576.47347,725.93939 L 582.84431,726.35441 L 583.25121,755.8725 C 581.35919,754.55465 576.39694,752.1117 574.98889,754.19149 L 574.98889,727.42397 C 574.98889,726.60151 575.65101,725.93939 576.47347,725.93939 z "
+ transform="matrix(0.499065,-0.866565,0,1,0,0)"
+ style="fill:#4573b3;fill-opacity:1"
+ id="rect5101" />
+ <path
+ d="M 293.2599,221.89363 L 313.99908,221.89363 C 314.45009,221.89363 314.81318,222.25673 314.81318,222.70774 C 315.02865,229.0361 295.44494,244.47124 292.44579,240.30491 L 292.44579,222.70774 C 292.44579,222.25673 292.80889,221.89363 293.2599,221.89363 z "
+ style="opacity:0.65536726;fill:url(#linearGradient2371);fill-opacity:1"
+ id="path5103" />
+ </g>
+</svg>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/introduction.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/introduction.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/introduction.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="introduction">
+ <title>Overview</title>
+
+ <section>
+ <title>What is JBoss Cache?</title>
+
+ <para>
+ JBoss Cache is a tree-structured, clustered, transactional cache. It can be used in a standalone, non-clustered
+ environment, to cache frequently accessed data in memory thereby removing data retrieval or calculation bottlenecks
+ while providing "enterprise" features such as <ulink url="http://java.sun.com/products/jta">JTA</ulink> compatibility, eviction and persistence.
+ </para>
+ <para>
+ JBoss Cache is also a clustered cache, and can be used in a cluster to replicate state providing a high degree
+ of failover. A variety of replication modes are supported, including invalidation and buddy replication, and
+ network communications can either be synchronous or asynchronous.
+ </para>
+ <para>
+ When used in a clustered mode, the cache is an effective mechanism of building high availability, fault
+ tolerance and even load balancing into custom applications and frameworks. For example, the
+ <ulink url="http://www.jboss.org/projects/jbossas/">JBoss Application Server</ulink> and Red Hat's
+ <ulink url="http://www.jboss.com">Enterprise Application Platform</ulink> make extensive use of JBoss Cache to
+ cluster services such as HTTP and <ulink url="http://java.sun.com/products/ejb/">EJB</ulink> sessions, as well as
+ providing a distributed entity cache for <ulink url="http://en.wikipedia.org/wiki/Java_Persistence_API">JPA</ulink>.
+ </para>
+ <para>
+ JBoss Cache can - and often is - used outside of JBoss AS, in other Java EE environments such as Spring, Tomcat,
+ Glassfish, BEA WebLogic, IBM WebSphere, and even in standalone Java programs thanks to its minimal dependency set.
+ </para>
+ <section>
+ <title>And what is POJO Cache?</title>
+ <para>
+ POJO Cache is an extension of the core JBoss Cache API. POJO Cache offers additional functionality such as:
+ <itemizedlist>
+ <listitem>maintaining object references even after replication or persistence.</listitem>
+ <listitem>fine grained replication, where only modified object fields are replicated.</listitem>
+ <listitem>"API-less" clustering model where POJOs are simply annotated as being clustered.</listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ POJO Cache has a complete and separate set of documentation, including a Users' Guide, FAQ and tutorial all
+ available on the JBoss Cache <ulink url="http://www.jboss.org/jbosscache">documentation website</ulink>.
+ As such, POJO Cache will not be discussed further in this book.
+ </para>
+ </section>
+
+ </section>
+
+ <section>
+ <title>Summary of Features</title>
+
+ <section>
+ <title>Caching objects</title>
+
+ <para>
+ JBoss Cache offers a simple and straightforward API, where data - simple Java objects - can be placed in the
+ cache. Based on configuration options selected, this data may be one or all of:
+ <itemizedlist>
+ <listitem>cached in-memory for efficient, thread-safe retrieval.</listitem>
+ <listitem>replicated to some or all cache instances in a cluster.</listitem>
+ <listitem>persisted to disk and/or a remote, in-memory cache cluster ("far-cache").</listitem>
+ <listitem>garbage collected from memory when memory runs low, and passivated to disk so state isn't lost.
+ </listitem>
+ </itemizedlist>
+ In addition, JBoss Cache offers a rich set of enterprise-class features:
+ <itemizedlist>
+ <listitem>being able to participate in <ulink url="http://java.sun.com/products/jta">JTA</ulink> transactions
+ (works with most Java EE compliant transaction managers).</listitem>
+ <listitem>attach to JMX consoles and provide runtime statistics on the state of the cache.</listitem>
+ <listitem>allow client code to attach listeners and receive notifications on cache events.</listitem>
+ <listitem>allow grouping of cache operations into batches, for efficient replication</listitem>
+ </itemizedlist>
+ </para>
+ </section>
+
+ <section>
+ <title>Local and clustered modes</title>
+
+ <para>
+ The cache is organized as a tree, with a single root. Each node in the tree essentially contains a map,
+ which acts as a store for key/value pairs. The only requirement placed on objects that are cached is that
+ they implement <literal>java.io.Serializable</literal>.
+ </para>
+
+ <para>
+ JBoss Cache can be either local or replicated. Local caches exist only within the scope of the JVM in which
+ they are created, whereas replicated caches propagate any changes to some or all other caches in the same
+ cluster. A cluster may span different hosts on a network or just different JVMs on a single host.
+ </para>
+
+ </section>
+
+ <section>
+ <title>Clustered caches and transactions</title>
+
+ <para>
+ When a change is made to an object in the cache and that change is done in
+ the context of a transaction, the replication of changes is deferred until the transaction
+ completes successfully. All modifications are kept in a list associated with
+ the transaction of the caller. When the transaction commits, changes are replicated. Otherwise, on a rollback,
+ we simply undo the changes locally and discard the modification list, resulting in zero network traffic and
+ overhead. For example, if a caller makes 100 modifications and then rolls back the transaction, nothing is
+ replicated, resulting in no network traffic.
+ </para>
+
+ <para>
+ If a caller has no transaction or batch associated with it, modifications are replicated immediately. E.g.
+ in the example used earlier, 100 messages would be broadcast for each modification. In this sense, running without
+ a batch or transaction can be thought of as analogous as running with auto-commit switched on in JDBC terminology,
+ where each operation is committed automatically and immediately.
+ </para>
+
+ <para>
+ JBoss Cache works out of the box with most popular transaction managers, and even provides an API where
+ custom transaction manager lookups can be written.
+ </para>
+
+ <para>
+ All of the above holds true for batches as well, which has similar behavior.
+ </para>
+ </section>
+
+
+ <section>
+ <title>Thread safety</title>
+ <para>
+ The cache is completely thread-safe. It employs multi-versioned concurrency control (MVCC) to ensure thread
+ safety between readers and writers, while maintaining a high degree of concurrency. The specific MVCC implementation
+ used in JBoss Cache allows for reader threads to be completely free of locks and synchronized blocks, ensuring a very high
+ degree of performance for read-heavy applications. It also uses custom, highly performant lock implementations
+ that employ modern compare-and-swap techniques for writer threads, which are tuned to multi-core CPU architectures.
+ </para>
+ <para>
+ Multi-versioned concurrency control (MVCC) is the default locking scheme since JBoss Cache 3.x.
+ Optimistic and pessimistic locking schemes from older versions of JBoss Cache are still available but are
+ deprecated in favor of MVCC, and will be removed in future releases. Use of these deprecated locking
+ schemes are strongly discouraged.
+ </para>
+ <para>
+ The JBoss Cache MVCC implementation only supports READ_COMMITTED and REPEATABLE_READ isolation levels, corresponding
+ to their database equivalents. See the section on <link linkend="transactions">transactions and concurrency</link> for details on MVCC.
+ </para>
+ </section>
+ </section>
+
+ <section>
+ <title>
+ Requirements
+ </title>
+ <para>
+ JBoss Cache requires a Java 5.0 (or newer) compatible virtual machine and set of libraries, and is developed
+ and tested on Sun's JDK 5.0 and JDK 6.
+ </para>
+ <para>
+ There is a way to build JBoss Cache as a Java 1.4.x compatible binary using
+ <ulink url="http://www.jboss.org/community/docs/DOC-10738">JBossRetro</ulink>
+ to retroweave the Java 5.0 binaries. However, Red Hat Inc. does not offer professional support around the
+ retroweaved
+ binary at this time and the Java 1.4.x compatible binary is not in the binary distribution. See
+ <ulink url="http://www.jboss.org/community/docs/DOC-10263">this wiki</ulink>
+ page for
+ details on building the retroweaved binary for yourself.
+ </para>
+ <para>
+ In addition to Java 5.0, at a minimum, JBoss Cache has dependencies on
+ <ulink url="http://www.jgroups.org">JGroups</ulink>, and Apache's
+ <ulink url="http://jakarta.apache.org/commons/logging/">commons-logging</ulink>. JBoss Cache ships with all
+ dependent libraries necessary to run out of the box, as well as several optional jars for optional features.
+ </para>
+ </section>
+
+ <section>
+ <title>License</title>
+ <para>
+ JBoss Cache is an open source project, using the business and OEM-friendly
+ <ulink url="http://www.opensource.org/">OSI-approved</ulink>
+ <ulink url="http://www.gnu.org/copyleft/lesser.html">LGPL license.</ulink>
+ Commercial development support, production support and training for JBoss Cache is available through
+ <ulink url="http://www.jboss.com">JBoss, a division of Red Hat Inc.</ulink>
+ </para>
+ </section>
+</chapter>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/jmx_reference.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/jmx_reference.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/jmx_reference.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,327 @@
+<chapter id="jmx_reference">
+ <title>JMX References</title>
+ <section id="jmx_reference.statistics">
+ <title>JBoss Cache Statistics</title>
+ <para>
+ There is a whole wealth of information being gathered and exposed on to JMX for monitoring the cache. Some
+ of these are detailed below:
+ </para>
+ <table>
+ <title>JBoss Cache JMX MBeans</title>
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>MBean</entry>
+ <entry>Attribute/Operation Name</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>DataContainerImpl</entry>
+ <entry>getNumberOfAttributes()</entry>
+ <entry>Returns the number of attributes in all nodes in the data container</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>getNumberOfNodes()</entry>
+ <entry>Returns the number of nodes in the data container</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>printDetails()</entry>
+ <entry>Prints details of the data container</entry>
+ </row>
+
+ <row>
+ <entry>RPCManagerImpl</entry>
+ <entry>localAddressString</entry>
+ <entry>String representation of the local address</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>membersString</entry>
+ <entry>String representation of the cluster view</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>statisticsEnabled</entry>
+ <entry>Whether RPC statistics are being gathered</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>replicationCount</entry>
+ <entry>Number of successful replications</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>replicationFailures</entry>
+ <entry>Number of failed replications</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>successRatio</entry>
+ <entry>RPC call success ratio</entry>
+ </row>
+
+ <row>
+ <entry>RegionManagerImpl</entry>
+ <entry>dumpRegions()</entry>
+ <entry>Dumps a String representation of all registered regions, including eviction regions depicting their event queue sizes</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>numRegions</entry>
+ <entry>Number of registered regions</entry>
+ </row>
+ <row>
+ <entry>BuddyManager</entry>
+ <entry>buddyGroup</entry>
+ <entry>A String representation of the cache's buddy group</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>buddyGroupsIParticipateIn</entry>
+ <entry>String representations of all buddy groups the cache participates in</entry>
+ </row>
+ <row>
+ <entry>TransactionTable</entry>
+ <entry>numberOfRegisteredTransactions</entry>
+ <entry>The number of registered, ongoing transactions</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>transactionMap</entry>
+ <entry>A String representation of all currently registered transactions mapped to internal GlobalTransaction instances</entry>
+ </row>
+
+ <row>
+ <entry>MVCCLockManager</entry>
+ <entry>concurrencyLevel</entry>
+ <entry>The configured concurrency level</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>numberOfLocksAvailable</entry>
+ <entry>Number of locks in the shared lock pool that are not used</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>numberOfLocksHeld</entry>
+ <entry>Number of locks in the shared lock pool that are in use</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>testHashing(String fqn)</entry>
+ <entry>Tests the spreading of locks across Fqns. For a given (String based) Fqn, this method returns the index in the lock array that it maps to.</entry>
+ </row>
+ <row>
+ <entry>ActivationInterceptor</entry>
+ <entry>Activations</entry>
+ <entry>Number of passivated nodes that have been activated.</entry>
+ </row>
+ <row>
+ <entry>CacheLoaderInterceptor</entry>
+ <entry>CacheLoaderLoads</entry>
+ <entry>Number of nodes loaded through a cache loader.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>CacheLoaderMisses</entry>
+ <entry>Number of unsuccessful attempts to load a node through a cache loader.</entry>
+ </row>
+ <row>
+ <entry>CacheMgmtInterceptor</entry>
+ <entry>Hits</entry>
+ <entry>Number of successful attribute retrievals.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>Misses</entry>
+ <entry>Number of unsuccessful attribute retrievals.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>Stores</entry>
+ <entry>Number of attribute store operations.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>Evictions</entry>
+ <entry>Number of node evictions.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>NumberOfAttributes</entry>
+ <entry>Number of attributes currently cached.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>NumberOfNodes</entry>
+ <entry>Number of nodes currently cached.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>ElapsedTime</entry>
+ <entry>Number of seconds that the cache has been running.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>TimeSinceReset</entry>
+ <entry>Number of seconds since the cache statistics have been reset.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>AverageReadTime</entry>
+ <entry>Average time in milliseconds to retrieve a cache attribute, including unsuccessful
+ attribute retrievals.
+ </entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>AverageWriteTime</entry>
+ <entry>Average time in milliseconds to write a cache attribute.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>HitMissRatio</entry>
+ <entry>Ratio of hits to hits and misses. A hit is a get attribute operation that results in an object
+ being
+ returned to the client. The retrieval may be from a cache loader if the entry isn't in the local
+ cache.
+ </entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>ReadWriteRatio</entry>
+ <entry>Ratio of read operations to write operations. This is the ratio of cache hits and misses to
+ cache stores.
+ </entry>
+ </row>
+ <row>
+ <entry>CacheStoreInterceptor</entry>
+ <entry>CacheLoaderStores</entry>
+ <entry>Number of nodes written to the cache loader.</entry>
+ </row>
+ <row>
+ <entry>InvalidationInterceptor</entry>
+ <entry>Invalidations</entry>
+ <entry>Number of cached nodes that have been invalidated.</entry>
+ </row>
+ <row>
+ <entry>PassivationInterceptor</entry>
+ <entry>Passivations</entry>
+ <entry>Number of cached nodes that have been passivated.</entry>
+ </row>
+ <row>
+ <entry>TxInterceptor</entry>
+ <entry>Prepares</entry>
+ <entry>Number of transaction prepare operations performed by this interceptor.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>Commits</entry>
+ <entry>Number of transaction commit operations performed by this interceptor.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>Rollbacks</entry>
+ <entry>Number of transaction rollbacks operations performed by this interceptor.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>numberOfSyncsRegistered</entry>
+ <entry>Number of synchronizations registered with the transaction manager pending completion and removal.</entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </table>
+ </section>
+
+ <section id="jmx_reference.notifications">
+ <title>JMX MBean Notifications</title>
+ <para>The following table depicts the JMX notifications available for JBoss Cache as well as the cache events to
+ which they correspond. These are the notifications that can be received through the
+ <literal>CacheJmxWrapper</literal>
+ MBean.
+ Each notification represents a single event published by JBoss Cache and provides user data corresponding to
+ the parameters of the event.
+ </para>
+ <table>
+ <title>JBoss Cache MBean Notifications</title>
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>Notification Type</entry>
+ <entry>Notification Data</entry>
+ <entry>CacheListener Event</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>org.jboss.cache.CacheStarted</entry>
+ <entry>String: cache service name</entry>
+ <entry>@CacheStarted</entry>
+ </row>
+ <row>
+ <entry>org.jboss.cache.CacheStopped</entry>
+ <entry>String: cache service name</entry>
+ <entry>@CacheStopped</entry>
+ </row>
+ <row>
+ <entry>org.jboss.cache.NodeCreated</entry>
+ <entry>String: fqn, boolean: isPre, boolean: isOriginLocal</entry>
+ <entry>@NodeCreated</entry>
+ </row>
+ <row>
+ <entry>org.jboss.cache.NodeEvicted</entry>
+ <entry>String: fqn, boolean: isPre, boolean: isOriginLocal</entry>
+ <entry>@NodeEvicted</entry>
+ </row>
+ <row>
+ <entry>org.jboss.cache.NodeLoaded</entry>
+ <entry>String: fqn, boolean: isPre</entry>
+ <entry>@NodeLoaded</entry>
+ </row>
+ <row>
+ <entry>org.jboss.cache.NodeModifed</entry>
+ <entry>String: fqn, boolean: isPre, boolean: isOriginLocal</entry>
+ <entry>@NodeModifed</entry>
+ </row>
+ <row>
+ <entry>org.jboss.cache.NodeRemoved</entry>
+ <entry>String: fqn, boolean: isPre, boolean: isOriginLocal</entry>
+ <entry>@NodeRemoved</entry>
+ </row>
+ <row>
+ <entry>org.jboss.cache.NodeVisited</entry>
+ <entry>String: fqn, boolean: isPre</entry>
+ <entry>@NodeVisited</entry>
+ </row>
+ <row>
+ <entry>org.jboss.cache.ViewChanged</entry>
+ <entry>String: view</entry>
+ <entry>@ViewChanged</entry>
+ </row>
+ <row>
+ <entry>org.jboss.cache.NodeActivated</entry>
+ <entry>String: fqn</entry>
+ <entry>@NodeActivated</entry>
+ </row>
+ <row>
+ <entry>org.jboss.cache.NodeMoved</entry>
+ <entry>String: fromFqn, String: toFqn, boolean: isPre</entry>
+ <entry>@NodeMoved</entry>
+ </row>
+ <row>
+ <entry>org.jboss.cache.NodePassivated</entry>
+ <entry>String: fqn</entry>
+ <entry>@NodePassivated</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </section>
+</chapter>
\ No newline at end of file
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/master.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/master.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/master.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
+ <!ENTITY preface SYSTEM "modules/preface.xml">
+ <!ENTITY introduction SYSTEM "modules/introduction.xml">
+ <!ENTITY architecture SYSTEM "modules/architecture.xml">
+ <!ENTITY basic_api SYSTEM "modules/basic_api.xml">
+ <!ENTITY replication SYSTEM "modules/replication.xml">
+ <!ENTITY transactions SYSTEM "modules/transactions.xml">
+ <!ENTITY eviction_policies SYSTEM "modules/eviction_policies.xml">
+ <!ENTITY cache_loaders SYSTEM "modules/cache_loaders.xml">
+ <!ENTITY compatibility SYSTEM "modules/compatibility.xml">
+ <!ENTITY configuration SYSTEM "modules/configuration.xml">
+ <!ENTITY deployment SYSTEM "modules/deployment.xml">
+ <!ENTITY configuration_reference SYSTEM "modules/configuration_reference.xml">
+ <!ENTITY jmx_reference SYSTEM "modules/jmx_reference.xml">
+ <!ENTITY batching SYSTEM "modules/batching.xml">
+ ]>
+<book lang="en">
+ <bookinfo>
+ <title>JBoss Cache Users' Guide</title>
+ <subtitle>A clustered, transactional cache</subtitle>
+
+ <!-- Release version and date -->
+ <releaseinfo>Release 3.1.0 Cascabel</releaseinfo>
+ <pubdate>April 2009</pubdate>
+
+ <!-- Authors/contributors -->
+ <author>
+ <firstname>Manik</firstname>
+ <surname>Surtani</surname>
+ <email>manik AT jboss DOT org</email>
+ </author>
+
+ <author>
+ <firstname>Brian</firstname>
+ <surname>Stansberry</surname>
+ <email>brian DOT stansberry AT jboss DOT com</email>
+ </author>
+
+ <author>
+ <firstname>Galder</firstname>
+ <surname>Zamarreño</surname>
+ <email>galder DOT zamarreno AT jboss DOT com</email>
+ </author>
+
+ <author>
+ <firstname>Mircea</firstname>
+ <surname>Markus</surname>
+ <email>mircea DOT markus AT jboss DOT com</email>
+ </author>
+
+ <!-- copyright info -->
+ <copyright>
+ <year>2004</year>
+ <year>2005</year>
+ <year>2006</year>
+ <year>2007</year>
+ <year>2008</year>
+ <year>2009</year>
+ <holder>JBoss, a division of Red Hat Inc., and all authors as named.</holder>
+ </copyright>
+
+ </bookinfo>
+
+ <!-- Adds a table of contents here -->
+ <toc/>
+
+ &preface;
+
+ <part label="I">
+ <title>Introduction to JBoss Cache</title>
+ <partintro>
+ <para>
+ This section covers what developers would need to quickly start using JBoss Cache in their projects. It
+ covers an overview of the concepts and API, configuration and deployment information.
+ </para>
+ </partintro>
+ &introduction;
+ &basic_api;
+ &configuration;
+ &batching;
+ &deployment;
+ &compatibility;
+ </part>
+
+ <part label="II">
+ <title>JBoss Cache Architecture</title>
+ <partintro>
+ <para>
+ This section digs deeper into the JBoss Cache architecture, and is meant for developers wishing to use the more
+ advanced cache features,extend or enhance the cache, write plugins, or are just looking for detailed knowledge
+ of how things work under the hood.
+ </para>
+ </partintro>
+ &architecture;
+ &replication;
+ &cache_loaders;
+ &eviction_policies;
+ &transactions;
+ </part>
+
+ <part label="III">
+ <title>JBoss Cache Configuration References</title>
+ <partintro>
+ <para>
+ This section contains technical references for easy looking up.
+ </para>
+ </partintro>
+
+ &configuration_reference;
+ &jmx_reference;
+ </part>
+</book>
\ No newline at end of file
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/preface.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/preface.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/preface.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,55 @@
+<preface id="preface">
+ <title>Preface</title>
+
+ <para>
+ This is the official JBoss Cache Users' Guide. Along with its accompanying documents (an FAQ, a tutorial and a
+ whole set of documents on POJO Cache), this is freely available on the JBoss Cache <ulink url="http://www.jboss.org/jbosscache">documentation website</ulink>.
+ </para>
+ <para>
+ When used, JBoss Cache refers to JBoss Cache Core, a tree-structured, clustered, transactional cache.
+ POJO Cache, also a part of the JBoss Cache distribution, is documented separately. (POJO Cache is a cache that
+ deals with Plain Old Java Objects, complete with object relationships, with the ability to cluster such POJOs
+ while maintaining their relationships. Please see the POJO Cache documentation for more information about this.)
+ </para>
+
+ <para>
+ This book is targeted at developers wishing to use JBoss Cache as either a standalone in-memory cache,
+ a distributed or replicated cache, a clustering library, or an in-memory database. It is targeted at application
+ developers who wish to use JBoss Cache in their code base, as well as "OEM" developers who wish to build on and
+ extend JBoss Cache features. As such, this book is split into two major sections - one detailing the "User" API
+ and the other going much deeper into specialist topics and the JBoss Cache architecture.
+ </para>
+
+ <para>
+ In general, a good knowledge of the Java programming language along with a strong appreciation and understanding
+ of transactions and concurrent programming is necessary. No prior knowledge of JBoss Application Server is expected
+ or required.
+ </para>
+
+ <para>
+ For further discussion, use the user forum available on the JBoss Cache
+ <ulink url="http://www.jboss.org/jbosscache">website.</ulink> We also provide a mechanism for
+ tracking bug reports and feature requests on the JBoss Cache <ulink url="http://jira.jboss.com/jira/browse/JBCACHE">JIRA issue tracker</ulink>.
+ </para>
+ <para>
+ If you are interested in the development of JBoss Cache or in translating this documentation into other languages,
+ we'd love to hear from you. Please post a message on the JBoss Cache
+ <ulink url="http://www.jboss.org/jbosscache">user forum</ulink>
+ or contact us by using the JBoss Cache <ulink url="https://lists.jboss.org/mailman/listinfo/jbosscache-dev">developer mailing list</ulink>.
+ </para>
+
+ <para>
+ This book is specifically targeted at the JBoss Cache release of the same version number. It may not apply to
+ older or newer releases of JBoss Cache. It is important that you use the documentation appropriate to the version
+ of JBoss Cache you intend to use.
+ </para>
+
+ <para>
+ I always appreciate feedback, suggestions and corrections, and these should be directed to the
+ <ulink url="https://lists.jboss.org/mailman/listinfo/jbosscache-dev">developer mailing list</ulink> rather than
+ direct emails to any of the authors. We hope you find this book useful, and wish you happy reading!
+ </para>
+ <para>
+ <emphasis role="bold">Manik Surtani</emphasis>, October 2008
+ </para>
+</preface>
\ No newline at end of file
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/replication.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/replication.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/replication.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,697 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="clustering">
+ <title>Cache Modes and Clustering</title>
+
+ <para>This chapter talks about aspects around clustering JBoss Cache.</para>
+
+ <section>
+ <title>Cache Replication Modes</title>
+
+ <para>JBoss Cache can be configured to be either local (standalone) or
+ clustered. If in a cluster, the cache can be configured to replicate
+ changes, or to invalidate changes. A detailed discussion on this
+ follows.
+ </para>
+
+ <section>
+ <title>Local Mode</title>
+
+ <para>Local caches don't join a cluster and don't communicate with other
+ caches in a cluster. The dependency on the
+ JGroups library is still there, although a JGroups channel is not
+ started.
+ </para>
+ </section>
+
+ <section>
+ <title>Replicated Caches</title>
+
+ <para>Replicated caches replicate all changes to some or all of the other cache
+ instances in the cluster. Replication can either happen after each
+ modification (no transactions or batches), or at the end of a transaction or batch.
+ </para>
+
+ <para>Replication can be synchronous or asynchronous. Use of either one
+ of the options is application dependent. Synchronous replication blocks
+ the caller (e.g. on a
+ <literal>put()</literal>
+ ) until the modifications
+ have been replicated successfully to all nodes in a cluster.
+ Asynchronous replication performs replication in the background (the
+ <literal>put()</literal>
+ returns immediately). JBoss Cache also offers a
+ replication queue, where modifications are replicated periodically (i.e.
+ interval-based), or when the queue size exceeds a number of elements, or
+ a combination thereof. A replication queue can therefore offer much higher performance as the actual
+ replication is performed by a background thread.
+ </para>
+
+ <para>Asynchronous replication is faster (no caller blocking), because
+ synchronous replication requires acknowledgments from all nodes in a
+ cluster that they received and applied the modification successfully
+ (round-trip time). However, when a synchronous replication returns
+ successfully, the caller knows for sure that all modifications have been
+ applied to all cache instances, whereas this is not be the case with asynchronous
+ replication. With asynchronous replication, errors are simply written to
+ a log. Even when using transactions, a transaction may succeed but
+ replication may not succeed on all cache instances.
+ </para>
+
+ <section id="replication.tx">
+ <title>Replicated Caches and Transactions</title>
+
+ <para>When using transactions, replication only occurs at the
+ transaction boundary - i.e., when a transaction commits. This results
+ in minimizing replication traffic since a single modification is
+ broadcast rather than a series of individual modifications, and can be
+ a lot more efficient than not using transactions. Another effect of
+ this is that if a transaction were to roll back, nothing is broadcast
+ across a cluster.
+ </para>
+
+ <para>Depending on whether you are running your cluster in
+ asynchronous or synchronous mode, JBoss Cache will use either a single
+ phase or
+ <ulink
+ url="http://en.wikipedia.org/wiki/Two-phase_commit_protocol">two phase
+ commit
+ </ulink>
+ protocol, respectively.
+ </para>
+
+ <section>
+ <title>One Phase Commits</title>
+
+ <para>Used when your cache mode is REPL_ASYNC. All modifications are
+ replicated in a single call, which instructs remote caches to apply
+ the changes to their local in-memory state and commit locally.
+ Remote errors/rollbacks are never fed back to the originator of the
+ transaction since the communication is asynchronous.
+ </para>
+ </section>
+
+ <section>
+ <title>Two Phase Commits</title>
+
+ <para>Used when your cache mode is REPL_SYNC. Upon committing your
+ transaction, JBoss Cache broadcasts a prepare call, which carries
+ all modifications relevant to the transaction. Remote caches then
+ acquire local locks on their in-memory state and apply the
+ modifications. Once all remote caches respond to the prepare call,
+ the originator of the transaction broadcasts a commit. This
+ instructs all remote caches to commit their data. If any of the
+ caches fail to respond to the prepare phase, the originator
+ broadcasts a rollback.
+ </para>
+
+ <para>Note that although the prepare phase is synchronous, the
+ commit and rollback phases are asynchronous. This is because
+ <ulink
+ url="http://java.sun.com/products/jta/">Sun's JTA
+ specification
+ </ulink>
+ does not specify how transactional resources
+ should deal with failures at this stage of a transaction; and other
+ resources participating in the transaction may have indeterminate
+ state anyway. As such, we do away with the overhead of synchronous
+ communication for this phase of the transaction. That said, they can
+ be forced to be synchronous using the
+ <literal>SyncCommitPhase</literal>
+ and
+ <literal>SyncRollbackPhase</literal>
+ configuration
+ attributes.
+ </para>
+ </section>
+ </section>
+
+ <section id="br">
+ <title>Buddy Replication</title>
+
+ <para>Buddy Replication allows you to suppress replicating your data
+ to all instances in a cluster. Instead, each instance picks one or
+ more 'buddies' in the cluster, and only replicates to these specific
+ buddies. This greatly helps scalability as there is no longer a memory
+ and network traffic impact every time another instance is added to a
+ cluster.
+ </para>
+
+ <para>One of the most common use cases of Buddy Replication is when a
+ replicated cache is used by a servlet container to store HTTP session
+ data. One of the pre-requisites to buddy replication working well and
+ being a real benefit is the use of
+ <emphasis>session
+ affinity
+ </emphasis>
+ , more casually known as
+ <emphasis>sticky
+ sessions
+ </emphasis>
+ in HTTP session replication speak. What this means
+ is that if certain data is frequently accessed, it is desirable that
+ this is always accessed on one instance rather than in a round-robin
+ fashion as this helps the cache cluster optimize how it chooses
+ buddies, where it stores data, and minimizes replication
+ traffic.
+ </para>
+
+ <para>If this is not possible, Buddy Replication may prove to be more
+ of an overhead than a benefit.
+ </para>
+
+ <section>
+ <title>Selecting Buddies</title>
+
+ <figure>
+ <title>BuddyLocator</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="BuddyReplication.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>Buddy Replication uses an instance of a
+ <literal>BuddyLocator</literal>
+ which contains the logic used to
+ select buddies in a network. JBoss Cache currently ships with a
+ single implementation,
+ <literal>NextMemberBuddyLocator</literal>
+ ,
+ which is used as a default if no implementation is provided. The
+ <literal>NextMemberBuddyLocator</literal>
+ selects the next member in
+ the cluster, as the name suggests, and guarantees an even spread of
+ buddies for each instance.
+ </para>
+
+ <para>The
+ <literal>NextMemberBuddyLocator</literal>
+ takes in 2
+ parameters, both optional.
+ <itemizedlist>
+ <listitem>
+
+
+ <literal>numBuddies</literal>
+
+ - specifies how many buddies each instance should pick to back its data onto. This defaults to
+ 1.
+ </listitem>
+
+ <listitem>
+
+
+ <literal>ignoreColocatedBuddies</literal>
+
+ - means that each instance will
+
+ <emphasis>try</emphasis>
+
+ to select a buddy on a different physical host. If not able to do so though, it will fall back
+ to co-located instances. This defaults to
+
+ <literal>true</literal>
+
+ .
+ </listitem>
+ </itemizedlist>
+ </para>
+ </section>
+
+ <section>
+ <title>BuddyPools</title>
+
+ <para>Also known as
+ <emphasis>replication groups</emphasis>
+ , a buddy
+ pool is an optional construct where each instance in a cluster may
+ be configured with a buddy pool name. Think of this as an 'exclusive
+ club membership' where when selecting buddies,
+ <literal>BuddyLocator</literal>
+ s that support buddy pools would try
+ and select buddies sharing the same buddy pool name. This allows
+ system administrators a degree of flexibility and control over how
+ buddies are selected. For example, a sysadmin may put two instances
+ on two separate physical servers that may be on two separate
+ physical racks in the same buddy pool. So rather than picking an
+ instance on a different host on the same rack,
+ <literal>BuddyLocator</literal>
+ s would rather pick the instance in
+ the same buddy pool, on a separate rack which may add a degree of
+ redundancy.
+ </para>
+ </section>
+
+ <section>
+ <title>Failover</title>
+
+ <para>In the unfortunate event of an instance crashing, it is
+ assumed that the client connecting to the cache (directly or
+ indirectly, via some other service such as HTTP session replication)
+ is able to redirect the request to any other random cache instance
+ in the cluster. This is where a concept of Data Gravitation comes
+ in.
+ </para>
+
+ <para>Data Gravitation is a concept where if a request is made on a
+ cache in the cluster and the cache does not contain this
+ information, it asks other instances in the cluster for the
+ data. In other words, data is lazily transferred, migrating
+ <emphasis>only</emphasis>
+ when other nodes ask for it. This strategy
+ prevents a network storm effect where lots of data is pushed around
+ healthy nodes because only one (or a few) of them die.
+ </para>
+
+ <para>If the data is not found in the primary section of some node,
+ it would (optionally) ask other instances to check in the backup
+ data they store for other caches.
+ This means that even if a cache containing your session dies, other
+ instances will still be able to access this data by asking the cluster
+ to search through their backups for this data.
+ </para>
+
+ <para>Once located, this data is transferred to the instance
+ which requested it and is added to this instance's data tree.
+ The data is then (optionally) removed from all other instances
+ (and backups) so that if session affinity is used, the affinity
+ should now be to this new cache instance which has just
+ <emphasis>taken
+ ownership
+ </emphasis>
+ of this data.
+ </para>
+
+ <para>Data Gravitation is implemented as an interceptor. The
+ following (all optional) configuration properties pertain to data
+ gravitation.
+ <itemizedlist>
+ <listitem>
+
+
+ <literal>dataGravitationRemoveOnFind</literal>
+
+ - forces all remote caches that own the data or hold backups for the data to remove that data,
+ thereby making the requesting cache the new data owner. This removal, of course, only happens
+ after the new owner finishes replicating data to its buddy. If set to
+
+ <literal>false</literal>
+
+ an evict is broadcast instead of a remove, so any state persisted in cache loaders will remain.
+ This is useful if you have a shared cache loader configured. Defaults to
+
+ <literal>true</literal>
+
+ .
+ </listitem>
+
+ <listitem>
+
+
+ <literal>dataGravitationSearchBackupTrees</literal>
+
+ - Asks remote instances to search through their backups as well as main data trees. Defaults to
+
+ <literal>true</literal>
+
+ . The resulting effect is that if this is
+
+ <literal>true</literal>
+
+ then backup nodes can respond to data gravitation requests in addition to data owners.
+ </listitem>
+
+ <listitem>
+
+
+ <literal>autoDataGravitation</literal>
+
+ - Whether data gravitation occurs for every cache miss. By default this is set to
+
+ <literal>false</literal>
+
+ to prevent unnecessary network calls. Most use cases will know when it may need to gravitate
+ data and will pass in an
+
+ <literal>Option</literal>
+
+ to enable data gravitation on a per-invocation basis. If
+
+ <literal>autoDataGravitation</literal>
+
+ is
+
+ <literal>true</literal>
+
+ this
+
+ <literal>Option</literal>
+
+ is unnecessary.
+ </listitem>
+ </itemizedlist>
+ </para>
+ </section>
+
+ <section>
+ <title>Configuration</title>
+
+ See the <link linkend="configuration_reference_chapter">configuration reference section</link> for details on configuring buddy replication.
+ </section>
+ </section>
+ </section>
+ </section>
+
+ <section>
+ <title>Invalidation</title>
+
+ <para>If a cache is configured for invalidation rather than replication,
+ every time data is changed in a cache other caches in the cluster receive
+ a message informing them that their data is now stale and should be
+ evicted from memory. Invalidation, when used with a shared cache loader
+ (see chapter on <link linkend="cache_loaders">cache loaders</link>) would cause remote caches to refer to the
+ shared cache loader to retrieve modified data. The benefit of this is
+ twofold: network traffic is minimized as invalidation messages are very
+ small compared to replicating updated data, and also that other caches in
+ the cluster look up modified data in a lazy manner, only when
+ needed.
+ </para>
+
+ <para>Invalidation messages are sent after each modification (no
+ transactions or batches), or at the end of a transaction or batch, upon successful commit.
+ This is usually more efficient as invalidation messages can be optimized
+ for the transaction as a whole rather than on a per-modification
+ basis.
+ </para>
+
+ <para>Invalidation too can be synchronous or asynchronous, and just as in
+ the case of replication, synchronous invalidation blocks until all caches
+ in the cluster receive invalidation messages and have evicted stale data
+ while asynchronous invalidation works in a 'fire-and-forget' mode, where
+ invalidation messages are broadcast but doesn't block and wait for
+ responses.
+ </para>
+ </section>
+
+ <section>
+ <title>State Transfer</title>
+
+ <para>
+ <emphasis>State Transfer</emphasis>
+ refers to the process by which a
+ JBoss Cache instance prepares itself to begin providing a service by
+ acquiring the current state from another cache instance and integrating
+ that state into its own state.
+ </para>
+
+ <section>
+ <title>State Transfer Types</title>
+
+ <para>There are three divisions of state transfer types depending on a
+ point of view related to state transfer. First, in the context of
+ particular state transfer implementation, the underlying plumbing, there
+ are two starkly different state transfer types: byte array and streaming
+ based state transfer. Second, state transfer can be full or partial
+ state transfer depending on a subtree being transferred. Entire cache
+ tree transfer represents full transfer while transfer of a particular
+ subtree represents partial state transfer. And finally state transfer
+ can be "in-memory" and "persistent" transfer depending on a particular
+ use of cache.
+ </para>
+ </section>
+
+ <section>
+ <title>Byte array and streaming based state transfer</title>
+
+ <para>Byte array based transfer was a default and only transfer
+ methodology for cache in all previous releases up to 2.0. Byte array
+ based transfer loads entire state transferred into a byte array and
+ sends it to a state receiving member. Major limitation of this approach
+ is that the state transfer that is very large (>1GB) would likely
+ result in OutOfMemoryException. Streaming state transfer provides an
+ InputStream to a state reader and an OutputStream to a state writer.
+ OutputStream and InputStream abstractions enable state transfer in byte
+ chunks thus resulting in smaller memory requirements. For example, if
+ application state is represented as a tree whose aggregate size is 1GB,
+ rather than having to provide a 1GB byte array streaming state transfer
+ transfers the state in chunks of N bytes where N is user
+ configurable.
+ </para>
+
+ <para>Byte array and streaming based state transfer are completely API
+ transparent, interchangeable, and statically configured through a
+ standard cache configuration XML file. Refer to JGroups documentation on
+ how to change from one type of transfer to another.
+ </para>
+ </section>
+
+ <section>
+ <title>Full and partial state transfer</title>
+
+ <para>If either in-memory or persistent state transfer is enabled, a
+ full or partial state transfer will be done at various times, depending
+ on how the cache is used. "Full" state transfer refers to the transfer
+ of the state related to the entire tree -- i.e. the root node and all
+ nodes below it. A "partial" state transfer is one where just a portion
+ of the tree is transferred -- i.e. a node at a given Fqn and all nodes
+ below it.
+ </para>
+
+ <para>If either in-memory or persistent state transfer is enabled, state
+ transfer will occur at the following times:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>Initial state transfer. This occurs when the cache is first
+ started (as part of the processing of the
+ <literal>start()</literal>
+ method). This is a full state transfer. The state is retrieved from
+ the cache instance that has been operational the longest.
+ <footnote>
+ <para>The longest operating cache instance is always, in JGroups
+ terms, the coordinator.
+ </para>
+ </footnote>
+ If there is any problem receiving or integrating the state, the cache
+ will not start.
+ </para>
+
+ <para>Initial state transfer will occur unless:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>The cache's
+ <literal>InactiveOnStartup</literal>
+ property
+ is
+ <literal>true</literal>
+ . This property is used in
+ conjunction with region-based marshalling.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Buddy replication is used. See below for more on state
+ transfer with buddy replication.
+ </para>
+ </listitem>
+ </orderedlist>
+ </listitem>
+
+ <listitem>
+ <para>Partial state transfer following region activation. When
+ region-based marshalling is used, the application needs to register
+ a specific class loader with the cache. This class loader is used
+ to unmarshall the state for a specific region (subtree) of the cache.
+ </para>
+
+ <para>After registration, the application calls
+ <literal>cache.getRegion(fqn, true).activate()</literal>
+ ,
+ which initiates a partial state transfer of the relevant subtree's
+ state. The request is first made to the oldest cache instance in the
+ cluster. However, if that instance responds with no state, it is then
+ requested from each instance in turn until one either provides state
+ or all instances have been queried.
+ </para>
+
+ <para>Typically when region-based marshalling is used, the cache's
+ <literal>InactiveOnStartup</literal>
+ property is set to
+ <literal>true</literal>
+ . This suppresses initial state transfer,
+ which would fail due to the inability to deserialize the transferred
+ state.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Buddy replication. When buddy replication is used, initial
+ state transfer is disabled. Instead, when a cache instance joins the
+ cluster, it becomes the buddy of one or more other instances, and
+ one or more other instances become its buddy. Each time an instance
+ determines it has a new buddy providing backup for it, it pushes
+ its current state to the new buddy. This "pushing" of state to the
+ new buddy is slightly different from other forms of state transfer,
+ which are based on a "pull" approach (i.e. recipient asks for and
+ receives state). However, the process of preparing and integrating
+ the state is the same.
+ </para>
+
+ <para>This "push" of state upon buddy group formation only occurs if
+ the
+ <literal>InactiveOnStartup</literal>
+ property is set to
+ <literal>false</literal>
+ . If it is
+ <literal>true</literal>
+ , state
+ transfer amongst the buddies only occurs when the application
+ activates the region on the various members of the group.
+ </para>
+
+ <para>Partial state transfer following a region activation call is
+ slightly different in the buddy replication case as well. Instead of
+ requesting the partial state from one cache instance, and trying all
+ instances until one responds, with buddy replication the instance
+ that is activating a region will request partial state from each
+ instance for which it is serving as a backup.
+ </para>
+ </listitem>
+ </orderedlist>
+ </section>
+
+ <section>
+ <title>Transient ("in-memory") and persistent state transfer</title>
+
+ <para>The state that is acquired and integrated can consist of two basic
+ types:
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>"Transient" or "in-memory" state. This consists of the actual
+ in-memory state of another cache instance - the contents of the
+ various in-memory nodes in the cache that is providing state are
+ serialized and transferred; the recipient deserializes the data,
+ creates corresponding nodes in its own in-memory tree, and populates
+ them with the transferred data.
+ </para>
+
+ <para>"In-memory" state transfer is enabled by setting the cache's
+ <literal>FetchInMemoryState</literal>
+ configuration attribute to
+ <literal>true</literal>
+ .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>"Persistent" state. Only applicable if a non-shared cache
+ loader is used. The state stored in the state-provider cache's
+ persistent store is deserialized and transferred; the recipient
+ passes the data to its own cache loader, which persists it to the
+ recipient's persistent store.
+ </para>
+
+ <para>"Persistent" state transfer is enabled by setting a cache
+ loader's
+ <literal>fetchPersistentState</literal>
+ attribute to
+ <literal>true</literal>
+ . If multiple cache loaders are configured
+ in a chain, only one can have this property set to true; otherwise
+ you will get an exception at startup.
+ </para>
+
+ <para>Persistent state transfer with a shared cache loader does not
+ make sense, as the same persistent store that provides the data will
+ just end up receiving it. Therefore, if a shared cache loader is
+ used, the cache will not allow a persistent state transfer even if a
+ cache loader has
+ <literal>fetchPersistentState</literal>
+ set to
+ <literal>true</literal>
+ .
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>Which of these types of state transfer is appropriate depends on
+ the usage of the cache.
+ </para>
+
+ <orderedlist>
+ <listitem>
+ <para>If a write-through cache loader is used, the current cache
+ state is fully represented by the persistent state. Data may have
+ been evicted from the in-memory state, but it will still be in the
+ persistent store. In this case, if the cache loader is not shared,
+ persistent state transfer is used to ensure the new cache has the
+ correct state. In-memory state can be transferred as well if the
+ desire is to have a "hot" cache -- one that has all relevant data in
+ memory when the cache begins providing service. (Note that the
+ <literal><![CDATA[<preload>]]></literal>
+ element in the
+ <literal><![CDATA[<loaders>]]></literal>
+ configuration element can be used as well to
+ provide a "warm" or "hot" cache without requiring an in-memory state
+ transfer. This approach somewhat reduces the burden on the cache
+ instance providing state, but increases the load on the persistent
+ store on the recipient side.)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>If a cache loader is used with passivation, the full
+ representation of the state can only be obtained by combining the
+ in-memory (i.e. non-passivated) and persistent (i.e. passivated)
+ states. Therefore an in-memory state transfer is necessary. A
+ persistent state transfer is necessary if the cache loader is not
+ shared.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>If no cache loader is used and the cache is solely a
+ write-aside cache (i.e. one that is used to cache data that can also
+ be found in a persistent store, e.g. a database), whether or not
+ in-memory state should be transferred depends on whether or not a
+ "hot" cache is desired.
+ </para>
+ </listitem>
+ </orderedlist>
+ </section>
+
+ <section>
+ <title>Non-Blocking State Transfer</title>
+ <para>
+ New in JBoss Cache 3.1.0, Non-Blocking State Transfer (NBST) allows senders to generate and stream state while
+ not stopping handling their "work as usual" transactions. This is particularly important if there is a large
+ volume of state, where generation and streaming of the state can take some time and can cause ongoing
+ transactions on the sender to time out and fail.
+ </para>
+ <para>
+ To achieve this, NBST should be enabled (see
+ configuration reference), and you need to be using MVCC as a node locking scheme. In addition, you need to
+ use JGroups' STREAMING_STATE_TRANSFER protocol in your cluster properties.
+ </para>
+ </section>
+
+ <section>
+ <title>Configuring State Transfer</title>
+ <para>
+ To ensure state transfer behaves as expected, it is important that all nodes in the cluster are configured
+ with
+ the same settings for persistent and transient state. This is because byte array based transfers, when
+ requested,
+ rely only on the requester's configuration while stream based transfers rely on both the requester and
+ sender's
+ configuration, and this is expected to be identical.
+ </para>
+ </section>
+ </section>
+</chapter>
Added: enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/transactions.xml
===================================================================
--- enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/transactions.xml (rev 0)
+++ enterprise-docs/tags/JBoss_EAP_5_0_0/Cache_User_Guide/en-US/transactions.xml 2009-08-03 23:55:06 UTC (rev 8146)
@@ -0,0 +1,234 @@
+<chapter id="transactions">
+ <title>Transactions and Concurrency</title>
+ <section id="transactions.concurrent">
+ <title>Concurrent Access</title>
+
+ <para>JBoss Cache is a thread safe caching API, and uses its own efficient mechanisms of controlling concurrent
+ access. It uses an innovative implementation of multi-versioned concurrency control
+ (<ulink url="http://en.wikipedia.org/wiki/Multiversion_concurrency_control">MVCC</ulink>) as the default
+ locking scheme. Versions of JBoss Cache prior to 3.x offered Optimistic and Pessimistic Locking schemes,
+ both of which are now deprecated in favor of MVCC.
+ </para>
+
+ <section id="transactions.locks.mvcc">
+ <title>Multi-Version Concurrency Control (MVCC)</title>
+ <para>
+ <ulink url="http://en.wikipedia.org/wiki/Multiversion_concurrency_control">MVCC</ulink> is a locking scheme
+ commonly used by modern database implementations to control fast, safe concurrent access to shared data.
+ </para>
+ <section id="mvcc.concepts">
+ <title>MVCC Concepts</title>
+ <para>
+ MVCC is designed to provide the following features for concurrent access:
+ <itemizedlist>
+ <listitem>Readers that don't block writers</listitem>
+ <listitem>Writers that fail fast</listitem>
+ </itemizedlist>
+ and achieves this by using data versioning and copying for concurrent writers. The theory is that readers
+ continue reading shared state, while writers copy the shared state, increment a version id, and write that
+ shared state back after verifying that the version is still valid (i.e., another concurrent writer has not
+ changed this state first).
+ </para>
+ <para>
+ This allows readers to continue reading while not preventing writers from writing, and repeatable read
+ semantics are maintained by allowing readers to read off the old version of the state.
+ </para>
+ </section>
+ <section id="mvcc.impl">
+ <title>MVCC Implementation</title>
+ <para>
+ JBoss Cache's implementation of MVCC is based on a few features:
+ <itemizedlist>
+ <listitem>Readers don't acquire any locks</listitem>
+ <listitem>Only one additional version is maintained for shared state, for a single writer</listitem>
+ <listitem>All writes happen sequentially, to provide fail-fast semantics</listitem>
+ </itemizedlist>
+ The extremely high performance of JBoss Cache's MVCC implementation for reading threads is achieved by
+ not requiring any synchronization or locking for readers. For each reader thread, the
+ <literal>MVCCLockingInterceptor</literal> wraps state in a lightweight container object, which is placed
+ in the thread's <literal>InvocationContext</literal> (or <literal>TransactionContext</literal> if running
+ in a transaction). All subsequent operations on the state happens via the container object. This use of
+ Java references allows for repeatable read semantics even if the actual state changes simultaneously.
+ </para>
+ <para>
+ Writer threads, on the other hand, need to acquire a lock before any writing can commence. Currently,
+ we use lock striping to improve the memory performance of the cache, and the size of the shared lock pool
+ can be tuned using the <literal>concurrencyLevel</literal> attribute of the <literal>locking</literal>
+ element. See the <link linkend="configuration_reference_chapter">configuration reference</link>
+ for details. After acquiring an exclusive lock on an Fqn, the writer thread then wraps the state to be
+ modified in a container as well, just like with reader threads, and then copies this state for writing.
+ When copying, a reference to the original version is still maintained in the container (for rollbacks).
+ Changes are then made to the copy and the copy is finally written to the data structure when the write
+ completes.
+ </para>
+ <para>
+ This way, subsequent readers see the new version while existing readers still hold a reference to the
+ original version in their context.
+ </para>
+ <para>
+ If a writer is unable to acquire the write lock after some time, a <literal>TimeoutException</literal> is
+ thrown. This lock acquisition timeout defaults to 10000 millis and can be configured using the
+ <literal>lockAcquisitionTimeout</literal> attribute of the <literal>locking</literal> element. See the
+ <link linkend="configuration_reference_chapter">configuration reference</link> for details.
+ </para>
+ <section id="mvcc.iso">
+ <title>Isolation Levels</title>
+ <para>
+ JBoss Cache 3.x supports two isolation levels: REPEATABLE_READ and READ_COMMITTED, which correspond
+ in semantic to <ulink url="http://en.wikipedia.org/wiki/Isolation_level">database-style isolation levels</ulink>.
+ Previous versions of JBoss Cache supported all 5 database isolation levels, and if an unsupported
+ isolation level is configured, it is either upgraded or downgraded to the closest supported level.
+ </para>
+ <para>
+ REPEATABLE_READ is the default isolation level, to maintain compatibility with previous versions of
+ JBoss Cache. READ_COMMITTED, while providing a slightly weaker isolation, has a significant
+ performance benefit over REPEATABLE_READ.
+ </para>
+ </section>
+ <section id="mvcc.writeskew">
+ <title>Concurrent Writers and Write-Skews</title>
+ <para>
+ Although MVCC forces writers to obtain a write lock, a phenomenon known as write skews may occur when
+ using REPEATABLE_READ:
+ </para>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="writeskew.png" format="PNG"/>
+ </imageobject>
+ </mediaobject>
+ <para>
+ This happens when concurrent transactions performing a read and then a write, based on the value that
+ was read. Since reads involve holding on to the reference to the state in the
+ transaction context, a subsequent write would work off that original state read, which may now be stale.
+ </para>
+ <para>
+ The default behavior with dealing with a write skew is to throw a <literal>DataVersioningException</literal>,
+ when it is detected when copying state for writing. However, in most applications, a write skew may not
+ be an issue (for example, if the state written has no relationship to the state originally read) and
+ should be allowed. If your application does not care about write skews, you can allow them to happen
+ by setting the <literal>writeSkewCheck</literal> configuration attribute to <literal>false</literal>.
+ See the <link linkend="configuration_reference_chapter">configuration reference</link> for details.
+ </para>
+ <para>
+ Note that write skews cannot happen when using READ_COMMITTED since threads always work off committed
+ state.
+ </para>
+ </section>
+ </section>
+ <section id="mvcc.cfg">
+ <title>Configuring Locking</title>
+ <para>
+ Configuring MVCC involves using the <literal><![CDATA[<locking /> ]]></literal> configuration tag, as follows:
+ </para>
+ <programlisting role="XML"><![CDATA[
+ <locking
+ isolationLevel="REPEATABLE_READ"
+ lockAcquisitionTimeout="10234"
+ nodeLockingScheme="mvcc"
+ writeSkewCheck="false"
+ concurrencyLevel="1000" />
+ ]]></programlisting>
+
+ <para>
+ <itemizedlist>
+ <listitem><literal>nodeLockingScheme</literal> - the node locking scheme used. Defaults to MVCC if
+ not provided, deprecated schemes such as <literal>pessimistic</literal> or <literal>optimistic</literal>
+ may be used but is not encouraged.</listitem>
+ <listitem><literal>isolationLevel</literal> - transaction isolation level. Defaults to REPEATABLE_READ if not provided.</listitem>
+ <listitem><literal>writeSkewCheck</literal> - defaults to <literal>true</literal> if not provided.</listitem>
+ <listitem><literal>concurrencyLevel</literal> - defaults to 500 if not provided.</listitem>
+ <listitem><literal>lockAcquisitionTimeout</literal> - only applies to writers when using MVCC. Defaults to 10000 if not provided.</listitem>
+ </itemizedlist>
+ </para>
+ </section>
+ </section>
+
+ <section id="transactions.locks.dep">
+ <title>Pessimistic and Optimistic Locking Schemes</title>
+ <para>
+ From JBoss Cache 3.x onwards, pessimistic and optimistic locking schemes are deprecated in favor of
+ <link linkend="transactions.locks.mvcc">MVCC</link>. It is recommended that existing applications
+ move off these legacy locking schemes as support for them will eventually be dropped altogether in future
+ releases.
+ </para>
+ <para>
+ Documentation for legacy locking schemes are not included in this user guide, and if necessary, can be
+ referenced in previous versions of this document, which can be found on
+ <ulink url="http://www.jboss.org/jbosscache">the JBoss Cache website</ulink>.
+ </para>
+ </section>
+ </section>
+
+
+ <section id="transactions.jta">
+ <title>JTA Support</title>
+
+ <para>JBoss Cache can be configured to use and participate in
+ <ulink url="http://java.sun.com/javaee/technologies/jta/">JTA</ulink> compliant transactions. Alternatively, if
+ transaction support is disabled, it is equivalent to using autocommit in JDBC calls, where
+ modifications are potentially replicated after every change (if replication is enabled).
+ </para>
+
+ <para>What JBoss Cache does on every incoming call is:</para>
+ <orderedlist>
+ <listitem>
+ <para>Retrieve the current
+ <literal>javax.transaction.Transaction</literal> associated with the thread
+ </para>
+ </listitem>
+ <listitem>
+ <para>If not already done, register a
+ <literal>javax.transaction.Synchronization</literal>
+ with the transaction manager to be notified when a transaction commits
+ or is rolled back.
+ </para>
+ </listitem>
+ </orderedlist>
+ <para>
+ In order to do this, the cache has to be provided with a reference to environment's
+ <literal>javax.transaction.TransactionManager</literal>. This is usually done by configuring the cache
+ with the class name of an implementation of the <literal>TransactionManagerLookup</literal>
+ interface. When the cache starts, it will create an instance of this class and invoke its
+ <literal>getTransactionManager()</literal> method, which returns a reference to the
+ <literal>TransactionManager</literal>.
+ </para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="TransactionLookup.png" format="PNG"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>JBoss Cache ships with
+ <literal>JBossTransactionManagerLookup</literal> and <literal>GenericTransactionManagerLookup</literal>. The
+ <literal>JBossTransactionManagerLookup</literal> is able to bind to a running JBoss AS instance and retrieve a
+ <literal>TransactionManager</literal> while the <literal>GenericTransactionManagerLookup</literal>
+ is able to bind to most popular Java EE application servers and provide the same functionality. A dummy
+ implementation - <literal>DummyTransactionManagerLookup</literal> - is also provided for unit tests. Being a
+ dummy, this is not recommended for production use a it has some severe limitations to do with concurrent
+ transactions and recovery.
+ </para>
+
+ <para>
+ An alternative to configuring a <literal>TransactionManagerLookup</literal> is to programatically inject a
+ reference to the <literal>TransactionManager</literal> into the <literal>Configuration</literal> object's
+ <literal>RuntimeConfig</literal> element:
+ </para>
+
+ <programlisting role="JAVA"><![CDATA[
+ TransactionManager tm = getTransactionManager(); // magic method
+ cache.getConfiguration().getRuntimeConfig().setTransactionManager(tm);
+ ]]></programlisting>
+
+ <para>
+ Injecting the <literal>TransactionManager</literal> is the recommended approach when the
+ <literal>Configuration</literal> is built by some sort of IOC container that already has a reference to the
+ <literal>TransactionManager</literal>.
+ </para>
+
+ <para>When the transaction commits, we initiate either a one- two-phase commit
+ protocol. See <link linkend="replication.tx">replicated caches and transactions</link> for details.
+ </para>
+
+ </section>
+</chapter>
15 years, 4 months