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">pro... 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&quo... 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-6...
+ 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.sl...
+ </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/j...
+ 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&q...
+
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"&g...
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&q...
+
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">... 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/a...
+ 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"&...
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</...;.
+ 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</...;.
+ 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&q...
+
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