[jboss-svn-commits] JBL Code SVN: r36939 - in labs/jbosstm/trunk: ArjunaJTA and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Apr 15 09:31:46 EDT 2011
Author: tomjenkinson
Date: 2011-04-15 09:31:46 -0400 (Fri, 15 Apr 2011)
New Revision: 36939
Added:
labs/jbosstm/trunk/docs/txbridge_guide/
labs/jbosstm/trunk/docs/txbridge_guide/en-US/About_This_Guide.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Design_Notes.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Introduction.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Known_Limitations.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Transaction_Bridge_Architecture.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Transaction_Bridging_Guide.ent
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Transaction_Bridging_Guide.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Using_the_Transaction_Bridge.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/inboundbridging.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/outboundbridging.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/txbridgelogging.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/verboselogging.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/architecture.png
labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/bridgeinterposition.png
labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/interposition.gif
Removed:
labs/jbosstm/trunk/docs/txbridge_guide/en-US/About_This_Guide.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Architecture_of_the_recovery_manager.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Configuration_options.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Failure_Recovery_Guide.ent
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Failure_Recovery_Guide.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/How_JBossTS_manages_the_OTS_recovery_protocol.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/XAResourceRecoveryHelper.java
labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/XAResourceRecoveryInterface.java
labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/jndiDatasource.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/recoveryModuleInterface.java
labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/recoveryScanInterface.java
labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/xmlDatasource.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/icons/
labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/fig1-crashrecoveryarchitecture.gif
labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/fig2-resourceinitiatedrecovery.gif
labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/fig3-resource-recoverycoordinator.gif
labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/fig4-overview-of-poa.gif
labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/fig5-recoverymanager.gif
labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/fig6-resourceregistration.gif
labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/icon.svg
labs/jbosstm/trunk/txbridge/docs/
Modified:
labs/jbosstm/trunk/ArjunaJTA/build.xml
labs/jbosstm/trunk/build-release-pkgs.xml
labs/jbosstm/trunk/docs/build.xml
labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/About_This_Guide.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Author_Group.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Book_Info.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Preface.xml
labs/jbosstm/trunk/docs/txbridge_guide/en-US/Revision_History.xml
Log:
JBTM-836 converted the transaction bridging guide to docbook
Modified: labs/jbosstm/trunk/ArjunaJTA/build.xml
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/build.xml 2011-04-15 09:30:18 UTC (rev 36938)
+++ labs/jbosstm/trunk/ArjunaJTA/build.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -87,7 +87,9 @@
<fileset dir="../ArjunaCore" includes="**/*.pdf"/>
</copy>
- <ant dir="../docs" target="install.common.docs"/>
+ <ant dir="../docs" target="install.common.docs">
+ <property name="dest.dir" value="build"/>
+ </ant>
<copy todir="${build.dir}/install/${dest.dir}" overwrite="true" flatten="true">
<fileset dir="../docs" includes="**/*.pdf"/>
</copy>
Modified: labs/jbosstm/trunk/build-release-pkgs.xml
===================================================================
--- labs/jbosstm/trunk/build-release-pkgs.xml 2011-04-15 09:30:18 UTC (rev 36938)
+++ labs/jbosstm/trunk/build-release-pkgs.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -80,11 +80,11 @@
<!-- a working directory for the process. Can contain output from previous releases if you like to keep them archived locally. -->
<property name="workdir" location="/tmp/packaged_builds"/>
<!-- where to get the source -->
- <property name="svnbase" value="https://svn.jboss.org/repos/labs/labs/jbosstm/tags"/>
+ <property name="svnbase" value="https://svn.jboss.org/repos/labs/labs/jbosstm"/>
<!-- The tag as it appears under svnbase -->
- <property name="tag" value="JBOSSTS_4_14_0_Final"/>
+ <property name="tag" value="trunk"/>
<!-- The file name base for the user downloadable files. Derive it from the tag -->
- <property name="filename" value="4.14.0.Final"/>
+ <property name="filename" value="4.15.0.Final.SNAPSHOT"/>
<!-- the location the JBossTS web site content is copied to -->
<property name="downloads.dir" value="/home/jhalli/IdeaProjects/jboss/filemgmt.jboss.org/downloads_htdocs/jbosstm/"/>
<!-- the mvn repo to upload to -->
Modified: labs/jbosstm/trunk/docs/build.xml
===================================================================
--- labs/jbosstm/trunk/docs/build.xml 2011-04-15 09:30:18 UTC (rev 36938)
+++ labs/jbosstm/trunk/docs/build.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -63,6 +63,11 @@
<arg value="--langs=en-US"/>
<arg value="--formats=pdf,html"/>
</exec>
+ <exec dir="txbridge_guide" executable="publican" failonerror="true">
+ <arg value="build"/>
+ <arg value="--langs=en-US"/>
+ <arg value="--formats=pdf,html"/>
+ </exec>
<copy todir="${dest.dir}" overwrite="true" flatten="true">
<fileset dir="." includes="**/*.pdf" excludes="**/*Release*.pdf"/>
</copy>
Modified: labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/About_This_Guide.xml
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/About_This_Guide.xml 2011-04-15 09:30:18 UTC (rev 36938)
+++ labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/About_This_Guide.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "Failure_Recovery_Guide.ent">
%BOOK_ENTITIES;
]>
<chapter>
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/About_This_Guide.xml
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/About_This_Guide.xml 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/About_This_Guide.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % BOOK_ENTITIES SYSTEM "Failure_Recovery_Guide.ent">
-<!ENTITY PRODUCT "JBoss Transactions">
-<!ENTITY BOOKID "Failure_Recovery_Guide">
-<!ENTITY VERSION "4.15">
-<!ENTITY YEAR "2011">
-<!ENTITY HOLDER "JBoss.org">
-<!ENTITY APPSERVER "JBoss Application Server">
-<!-- <!ENTITY APPSERVER "Enterprise Application Platform Server"> -->]>
-<chapter>
- <title>About This Guide</title>
- <para>
- The Failure Recovery Guide contains information on how to use JBossTS.
- </para>
- <section>
- <title>Audience</title>
- <para>
- This guide is most relevant to engineers who are responsible for administering JBoss Transactions installations.
- </para>
- </section>
- <section>
- <title>Prerequisites</title>
- <para>
- You should have installed JBossTS.
- </para>
- </section>
-</chapter>
Copied: labs/jbosstm/trunk/docs/txbridge_guide/en-US/About_This_Guide.xml (from rev 36934, labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/About_This_Guide.xml)
===================================================================
--- labs/jbosstm/trunk/docs/txbridge_guide/en-US/About_This_Guide.xml (rev 0)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/About_This_Guide.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "Transaction_Bridging_Guide.ent">
+%BOOK_ENTITIES;
+]>
+<chapter>
+ <title>About This Guide</title>
+ <para>
+ The Transaction Bridging Guide contains information on how to use &PRODUCT;.
+ This guide provides information on how to integrate JTA (XA) and XTS (WS-AT) transactions using
+ the transaction bridge.
+ </para>
+ <section>
+ <title>Audience</title>
+ <para>
+ This guide is most relevant for application developers working in environments that
+ integrate traditional JavaEE transactions usage and transactional Web Services.
+ </para>
+ </section>
+ <section>
+ <title>Prerequisites</title>
+ <para>
+ JBossTS uses the Java programming language and this manual assumes that you are familiar
+ with programming in Java. In addition, a familiarity with the JTA and XTS components of
+ JBossTS is assumed. You should read the relevant Programmer's Guides before tackling this
+ document.
+ </para>
+ </section>
+</chapter>
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Architecture_of_the_recovery_manager.xml
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/Architecture_of_the_recovery_manager.xml 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Architecture_of_the_recovery_manager.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,882 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % BOOK_ENTITIES SYSTEM "Failure_Recovery_Guide.ent">
-]>
-<chapter>
- <title>Architecture of the Recovery Manager</title>
- <section>
- <title>Crash Recovery Overview</title>
- <para>The main architectural components within Crash Recovery are
- illustrated in the diagram below:</para>
- <figure>
- <title>Recovery Manager Architecture</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/fig1-crashrecoveryarchitecture.gif"
- format="GIF" />
- </imageobject>
- </mediaobject>
- </figure>
- <para>The Recovery Manager is a daemon process1 responsible for
- performing crash recovery. Only one Recovery Manager runs per
- node. The Object Store provides persistent data storage for
- transactions to log data. During normal transaction processing
- each transaction will log persistent data needed for the commit
- phase to the Object Store. On successfully committing a
- transaction this data is removed, however if the transaction fails
- then this data remains within the Object Store.</para>
- <para>The Recovery Manager functions by:</para>
- <itemizedlist>
- <listitem>
- <para>Periodically scanning the Object Store for transactions
- that may have failed. Failed transactions are indicated by the
- presence of log data after a period of time that the
- transaction would have normally been expected to finish.
- </para>
- </listitem>
- <listitem>
- <para>Checking with the application process which originated the
- transaction whether the transaction is still in progress or
- not.</para>
- </listitem>
- <listitem>
- <para>Recovering the transaction by re-activating the
- transaction and then replaying phase two of the commit
- protocol.</para>
- </listitem>
- </itemizedlist>
- <para>
- The following sections describe the architectural components
- in more
- detail.
- </para>
- </section>
- <section>
- <title>Recovery Manager</title>
- <para>
- On initialization the Recovery Manager first loads in
- configuration information via a properties file. This
- configuration includes a number of recovery activators and
- recovery modules, which are then dynamically loaded.
- </para>
- <para>
- The Recovery Manager is not specifically tied to an Object
- Request
- Broker or ORB. Hence, the OTS recovery protocol is not
- implicitly
- enabled. To enable such protocol, we use the concept of
- recovery
- activator, defined with the interface RecoveryActivator,
- which is
- used to instantiate a recovery class related to the
- underlying
- communication protocol. For instance, when used with
- OTS, the
- RecoveryActivitor has the responsibility to create a
- RecoveryCoordinator object able to respond to the
- replay_completion operation.
- </para>
- <para>
- All RecoveryActivator instances inherit the same interface.
- They are
- loaded via the following recovery extension property:
- </para>
- <para>
- <programlisting><entry key="RecoveryEnvironmentBean.recoveryActivators">
- list_of_class_names
-<entry></programlisting>
- </para>
- <para>
- For instance the RecoveryActivator provided in the
- distribution of
- JTS/OTS, which shall not be commented, is as
- follow:
- </para>
- <para><programlisting><entry key="RecoveryEnvironmentBean.recoveryActivators">
- com.arjuna.ats.internal.jts.orbspecific.recovery.RecoveryEnablement
-<entry></programlisting>
- </para>
- <para>
- When loaded all RecoveryActivator instances provide the method
- startRCservice invoked by the Recovery Manager and used to create
- the appropriate Recovery Component able to receive recovery
- requests according to a particular transaction protocol. For
- instance the RecoveryCoordinator defined by the OTS protocol.
- </para>
- <para>
- Each recovery module is used to recover a different type of
- transaction/resource, however each recovery module inherits the
- same basic behavior.
- </para>
- <para>
- Recovery consists of two separate passes/phases separated by
- two timeout
- periods. The first pass examines the object store for
- potentially
- failed transactions; the second pass performs crash
- recovery on
- failed transactions. The timeout between the first and
- second pass
- is known as the backoff period. The timeout between the
- end of the
- second pass and the start of the first pass is the
- recovery
- period. The recovery period is larger than the backoff
- period.
- </para>
- <para>
- The Recovery Manager invokes the first pass upon each recovery
- module,
- applies the backoff period timeout, invokes the second pass
- upon
- each recovery module and finally applies the recovery period
- timeout before restarting the first pass again.
- </para>
- <para>
- The recovery modules are loaded via the following recovery
- extension
- property:
- </para>
- <para>
- <programlisting><entry key="RecoveryEnvironmentBean.recoveryExtenstions">
- list_of_class_names
-<entry></programlisting>
- </para>
- <para>
- The backoff period and recovery period are set using the
- following
- properties:
- </para>
- <para>
- <programlisting><entry key="RecoveryEnvironmentBean.recoveryBackoffPeriod"></programlisting>
- </para>
- <para>
- <programlisting><entry key="RecoveryEnvironmentBean.periodicRecoveryPeriod"></programlisting>
- </para>
- <para>
- The following java classes are used to implement the Recovery
- Manager:
- </para>
- <itemizedlist>
- <listitem>
- <para>package com.arjuna.ats.arjuna.recovery :</para>
- <para>RecoveryManager – The daemon process that starts up by
- instantiating an instance of the RecoveryManagerImple class.
- </para>
- <para>RecoveryEnvironment - Properties used by the recovery
- manager.</para>
- <para>RecoveryConfiguration - Specifies the name of the Recovery
- Manager property file.(ie RecoveryManager-properties.xml)
- </para>
- </listitem>
- <listitem>
- <para>package com.arjuna.ats.internal.ts.arjuna.recovery :
- </para>
- <para>RecoveryManagerImple - Creates and starts instances of the
- RecActivatorLoader, the PeriodicRecovery thread and the
- ExpiryEntryMonitor thread.</para>
- <para>RecActivatorLoader - Dynamically loads in the
- RecoveryActivator specified in the Recovery Manager property
- file. Each RecoveryActicator is specified as a recovery
- extension in the properties file </para>
- <para>PeriodicRecovery - Thread which loads each recovery
- module, then calls the first pass method for each module,
- applies the backoff period timeout, calls the second pass
- method for each module and applies the recovery period
- timeout. </para>
- <para>RecoveryClassLoader - Dynamically loads in the recovery
- modules specified in the Recovery Manager property file. Each
- module is specified as a recovery extension in the properties
- file (e.g., com.arjuna.ats.arjuna.recovery.recoveryExtension1=
- com.arjuna.ats.internal.ts.arjuna.recovery.AtomicActionRecoveryModule).
- </para>
- </listitem>
- </itemizedlist>
- <note>
- <para>By default, the recovery manager listens on the first
- available port on a given machine. If you wish to control the
- port number that it uses, you can specify this using the
- com.arjuna.ats.arjuna.recovery.recoveryPort attribute.</para>
- </note>
- <section>
- <title>Managing recovery directly</title>
- <para>As already mentioned, recovery typically happens at periodic
- intervals. If you require to drive recovery directly, then there
- are two options, depending upon how the RecoveryManager has been
- created.</para>
- </section>
- <section>
- <title>Separate Recovery Manager</title>
- <para>You can either use the
- com.arjuna.ats.arjuna.tools.RecoveryMonitor program to send a
- message to the Recovery Manager instructing it to perform
- recovery, or you can create an instance of the
- com.arjuna.ats.arjuna.recovery.RecoveryDriver class to do
- likewise. There are two types of recovery scan available:</para>
- <itemizedlist>
- <listitem>
- <para>i. ASYNC_SCAN: here a message is sent to the
- RecoveryManager to instruct it to perform recovery, but the
- response returns before recovery has completed.</para>
- </listitem>
- <listitem>
- <para>ii. SYNC: here a message is sent to the RecoveryManager
- to instruct it to perform recovery, and the response occurs
- only when recovery has completed.</para>
- </listitem>
- </itemizedlist>
- </section>
- <section>
- <title>In process Recovery Manager</title>
- <para>You can invoke the scan operation on the RecoveryManager.
- This operation returns only when recovery has completed.
- However, if you wish to have an asynchronous interaction
- pattern, then the RecoveryScan interface is provided:</para>
-
- <example>
- <title>RecoveryScan interface</title>
- <programlisting role="JAVA" language="Java">
- <xi:include href="extras/recoveryScanInterface.java"
- xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" />
- </programlisting>
- </example>
-
- <para>An instance of an object supporting this interface can be
- passed to the scan operation and its completed method will be
- called when recovery finishes. The scan operation returns
- immediately, however.</para>
- </section>
- <section>
- <title>Recovering For Multiple Transaction Coordinators</title>
- <para>Sometimes a single Recovery Manager can be made responsible
- for recovering transactions executing on behalf of multiple
- transaction coordinators. Conversely, due to specific
- configurations it may be that multiple Recovery Managers share
- the same Object Store and in which case should not conflict with
- each other, e.g., roll back transactions that they do not
- understand. Therefore, when running recovery it is necessary to
- tell JBossTS which types of transactions it can recover and
- which transaction identifiers it should ignore.</para>
- <para>When necessary each transaction identifier that JBossTS
- creates may have a unique node identifier encoded within it and
- JBossTS will only recover transactions and states that match a
- specified node identifier. The node identifier for each JBossTS
- instance should be set via the
- com.arjuna.ats.arjuna.nodeIdentifier property. This value must
- be unique across JBossTS instances. The contents of this should
- be alphanumeric and not exceed 10 bytes in length. If you do not
- provide a value, then JBossTS will fabricate one and report the
- value via the logging infrastructure.</para>
- <para>How this value is used will depend upon the type of
- resources being recovered and will be discussed within the
- relevant sections for the Recovery Modules.</para>
- </section>
- </section>
- <section>
- <title>Recovery Modules</title>
- <para>As stated before each recovery module is used to recover a
- different type of transaction/resource, but each recovery module
- must implement the following RecoveryModule interface, which
- defines two methods: periodicWorkFirstPass and
- periodicWorkSecondPass invoked by the Recovery Manager. </para>
-
- <example>
- <title>RecoveryModule interface</title>
- <programlisting role="JAVA" language="Java">
- <xi:include href="extras/recoveryModuleInterface.java"
- xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" />
- </programlisting>
- </example>
- <section>
- <title>JBossTS Recovery Module Classes</title>
- <para>JBossTS provides a set of recovery modules that are
- responsible to manage recovery according to the nature of the
- participant and its position in a transactional tree. The
- provided classes (that all implements the RecoveryModule
- interface) are:</para>
- <itemizedlist>
- <listitem>
- <para>com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule
- </para>
- <para>Recovers AtomicAction transactions. </para>
- </listitem>
- <listitem>
- <para>com.arjuna.ats.internal.jts.recovery.transactions.TransactionRecoveryModule
- </para>
- <para>Recovers JTS Transactions. This is a generic class from
- which TopLevel and Server transaction recovery modules
- inherit, respectively </para>
- </listitem>
- <listitem>
- <para>com.arjuna.ats.internal.jts.recovery.transactions.TopLevelTransactionRecoveryModule
- </para>
- </listitem>
- <listitem>
- <para>com.arjuna.ats.internal.jts.recovery.transactions.ServerTransactionRecoveryModule
- </para>
- </listitem>
- </itemizedlist>
- </section>
- </section>
- <section>
- <title>A Recovery Module for XA Resources</title>
- <para>During recovery, the Transaction Manager needs to be able to
- communicate to all resource managers that are in use by the
- applications in the system. For each resource manager, the
- Transaction Manager uses the XAResource.recover method to retrieve
- the list of transactions that are currently in a prepared or
- heuristically completed state. Typically, the system administrator
- configures all transactional resource factories that are used by
- the applications deployed on the system. An example of such a
- resource factory is the JDBC XADataSource object, which is a
- factory for the JDBC XAConnection objects.</para>
- <para>Because XAResource objects are not persistent across system
- failures, the Transaction Manager needs to have some way to
- acquire the XAResource objects that represent the resource
- managers which might have participated in the transactions prior
- to the system failure. For example, a Transaction Manager might,
- through the use of JNDI lookup mechanism, acquire a connection
- from each of the transactional resource factories, and then obtain
- the corresponding XAResource object for each connection. The
- Transaction Manager then invokes the XAResource.recover method to
- ask each resource manager to return the transactions that are
- currently in a prepared or heuristically completed state.</para>
- <note>
- <para>When running XA recovery it is necessary to tell JBossTS
- which types of Xid it can recover. Each Xid that JBossTS creates
- has a unique node identifier encoded within it and JBossTS will
- only recover transactions and states that match a specified node
- identifier. The node identifier to use should be provided to
- JBossTS via the property JTAEnvironmentBean.xaRecoveryNodes;
- multiple values may be provided in a list. A value of ‘*’ will
- force JBossTS to recover (and possibly rollback) all
- transactions irrespective of their node identifier and should be
- used with caution. The contents of
- com.arjuna.ats.jta.xaRecoveryNode should be alphanumeric and
- match the values of com.arjuna.ats.arjuna.nodeIdentifier.</para>
- </note>
- <para>One of the following recovery mechanisms will be used:</para>
- <itemizedlist>
- <listitem>
- <para>If the XAResource is serializable, then the serialized
- form will be saved during transaction commitment, and used
- during recovery. It is assumed that the recreated XAResource
- is valid and can be used to drive recovery on the associated
- database.
- </para>
- </listitem>
- <listitem>
- <para>The com.arjuna.ats.jta.recovery.XAResourceRecovery,
- com.arjuna.ats.jta.recovery.XARecoveryResourceManager and
- com.arjuna.ats.jta.recovery.XARecoveryResource interfaces are
- used. These are described in detail later in this document.
- </para>
- </listitem>
- </itemizedlist>
- <para>To manage recovery, we have seen in the previous chapter that
- the Recovery Manager triggers a recovery process by calling a set
- of recovery modules that implements the two methods defined by the
- RecoveryModule interface. To enable recovery of participants
- controlled via the XA interface, a specific recovery module named
- XARecoveryModule is provided. The XARecoveryModule, defined in the
- packages com.arjuna.ats.internal.jta.recovery.arjunacore and
- com.arjuna.ats.internal.jta.recovery.jts, handles recovery of XA
- resources (databases etc.) used in JTA.</para>
- <note>
- <para>JBossTS supports two JTA implementations: a purely local
- version (no distributed transactions) and a version layered on
- the JTS. Recovery for the former is straightforward. In the
- following discussion we shall implicitly consider on the JTS
- implementation.</para>
- </note>
- <para>Its behavior consists of two aspects: “transaction-initiated”
- and “resource-initiated” recovery. Transaction-initiated recovery
- is possible where the particular transaction branch had progressed
- far enough for a JTA Resource Record to be written in the
- ObjectStore.</para>
- <para>A JTA Resource record contains the information needed to link
- the transaction, as known to the rest of JBossTS, to the database.
- Resource-initiated recovery is necessary for branches where a
- failure occurred after the database had made a persistent record
- of the transaction, but before the JTA ResourceRecord was
- persisted. Resource-initiated recovery is also necessary for
- datasources for which it is not possible to hold information in
- the JTA Resource record that allows the recreation in the
- RecoveryManager of the XAConnection/XAResource that was used in
- the original application.</para>
- <para>Transaction-initiated recovery is automatic. The
- XARecoveryModule finds the JTA Resource Record that need recovery,
- then uses the normal recovery mechanisms to find the status of the
- transaction it was involved in (i.e., it calls replay_completion
- on the RecoveryCoordinator for the transaction branch),
- (re)creates the appropriate XAResource and issues commit or
- rollback on it as appropriate. The XAResource creation will use
- the same information, database name, username, password etc., as
- the original application.</para>
- <para>Resource-initiated recovery has to be specifically configured,
- by supplying the Recovery Manager with the appropriate information
- for it to interrogate all the databases (XADataSources) that have
- been accessed by any JBossTS application. The access to each
- XADataSource is handled by a class that implements the
- com.arjuna.ats.jta.recovery.XAResourceRecovery interface, as
- illustrated in Figure 4. Instances of classes that implements the
- XAResourceRecovery interface are dynamically loaded, as controlled
- by properties with names beginning
- “com.arjuna.ats.jta.recovery.XAResourceRecovery”.</para>
- <figure>
- <title>Resource-initiated recovery and XA Recovery</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/fig2-resourceinitiatedrecovery.gif"
- format="GIF" />
- </imageobject>
- </mediaobject>
- </figure>
- <para>The XARecoveryModule will use the XAResourceRecovery
- implementation to get a XAResource to the target datasource. On
- each invocation of periodicWorkSecondPass, the recovery module
- will issue an XAResource.recover request – this will (as described
- in the XA specification) return a list of the transaction
- identifiers (Xid’s) that are known to the datasource and are in an
- indeterminate (in-doubt) state. The list of these in-doubt Xid’s
- received on successive passes (i.e. periodicWorkSecondPass-es) is
- compared. Any Xid that appears in both lists, and for which no JTA
- ResourceRecord was found by the intervening transaction-initiated
- recovery is assumed to belong to a transaction that was involved
- in a crash before any JTA ResourceRecord was written, and a
- rollback is issued for that transaction on the XAResource.</para>
- <para>This double-scan mechanism is used because it is possible the
- Xid was obtained from the datasource just as the original
- application process was about to create the corresponding
- JTA_ResourceRecord. The interval between the scans should allow
- time for the record to be written unless the application crashes
- (and if it does, rollback is the right answer).</para>
- <para>An XAResourceRecovery implementation class can be written to
- contain all the information needed to perform recovery to some
- datasource. Alternatively, a single class can handle multiple
- datasources. The constructor of the implementation class must have
- an empty parameter list (because it is loaded dynamically), but
- the interface includes an initialise method which passes in
- further information as a string. The content of the string is
- taken from the property value that provides the class name:
- everything after the first semi-colon is passed as the value of
- the string. The use made of this string is determined by the
- XAResourceRecovery implementation class.</para>
- <para>For further details on the way to implement a class that
- implements the interface XAResourceRecovery, read the JDBC chapter
- of the JTA Programming Guide. An implementation class is provided
- that supports resource-initiated recovery for any XADataSource.
- This class could be used as a template to build your own
- implementation class. </para>
- <section>
- <title>Assumed complete</title>
- <para>If a failure occurs in the transaction environment after the
- transaction coordinator had told the XAResource to commit but
- before the transaction log has been updated to remove the
- participant, then recovery will attempt to replay the commit. In
- the case of a Serialized XAResource, the response from the
- XAResource will enable the participant to be removed from the
- log, which will eventually be deleted when all participants have
- been committed. However, if the XAResource is not recoverable
- then it is extremely unlikely that any XAResourceRecovery
- instance will be able to provide the recovery sub-system with a
- fresh XAResource to use in order to attempt recovery; in which
- case recovery will continually fail and the log entry will never
- be removed.</para>
- <para>There are two possible solutions to this problem:</para>
- <itemizedlist>
- <listitem>
- <para>Rely on the relevant ExpiryScanner to eventually move
- the log elsewhere. Manual intervention will then be needed
- to ensure the log can be safely deleted. If a log entry is
- moved, suitable warning messages will be output.
- </para>
- </listitem>
- <listitem>
- <para>Set the com.arjuna.ats.jta.xaAssumeRecoveryComplete to
- true. This option is checked whenever a new XAResource
- instance cannot be located from any registered
- XAResourceRecovery instance. If false (the default),
- recovery assumes that there is a transient problem with the
- XAResourceRecovery instances (e.g., not all have been
- registered with the sub-system) and will attempt recovery
- periodically. If true then recovery assumes that a previous
- commit attempt succeeded and this instance can be removed
- from the log with no further recovery attempts. This option
- is global, so needs to be used with care since if used
- incorrectly XAResource instances may remain in an
- uncommitted state.
- </para>
- </listitem>
- </itemizedlist>
- </section>
- </section>
- <section>
- <title>Recovering XAConnections</title>
- <para>When recovering from failures, JBossTS requires the ability to
- reconnect to databases that were in use prior to the failures in
- order to resolve any outstanding transactions. Most connection
- information will be saved by the transaction service during its
- normal execution, and can be used during recovery to recreate the
- connection. However, it is possible that not all such information
- will have been saved prior to a failure (for example, a failure
- occurs before such information can be saved, but after the
- database connection is used). In order to recreate those
- connections it is necessary to provide implementations of the
- following JBossTS interface
- com.arjuna.ats.jta.recovery.XAResourceRecovery, one for each
- database that may be used by an application.</para>
- <note>
- <para>if using the transactional JDBC driver provided with
- JBossTS, then no additional work is necessary in order to ensure
- that recovery occurs.</para>
- </note>
- <para>To inform the recovery system about each of the
- XAResourceRecovery instances, it is necessary to specify their
- class names through the
- JTAEnvironmentBean.xaResourceRecoveryInstances property variable,
- whose values is a list of space separated strings, each being a
- classname followed by optional configuration information.</para>
- <para>JTAEnvironmentBean.xaResourceRecoveryInstances=com.foo.barRecovery
- </para>
- <para>Additional information that will be passed to the instance
- when it is created may be specified after a semicolon:</para>
- <para>JTAEnvironmentBean.xaResourceRecoveryInstances=com.foo.barRecovery;myData=hello
- </para>
- <note>
- <para>These properties need to go into the JTA section of the
- property file.</para>
- </note>
- <para>Any errors will be reported during recovery.</para>
- <example>
- <title>XAResourceRecovery interface</title>
- <programlisting role="JAVA" language="Java">
- <xi:include href="extras/XAResourceRecoveryInterface.java"
- xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" />
- </programlisting>
- </example>
- <para>Each method should return the following information:</para>
- <itemizedlist>
- <listitem>
- <para>initialise: once the instance has been created, any
- additional information which occurred on the property value
- (anything found after the first semi-colon) will be passed to
- the object. The object can then use this information in an
- implementation specific manner to initialise itself, for
- example.
- </para>
- </listitem>
- <listitem>
- <para>hasMoreResources: each XAResourceRecovery implementation
- may provide multiple XAResource instances. Before any call to
- getXAResource is made, hasMoreResources is called to determine
- whether there are any further connections to be obtained. If
- this returns false, getXAResource will not be called again
- during this recovery sweep and the instance will not be used
- further until the next recovery scan. It is up to the
- implementation to maintain the internal state backing this
- method and to reset the iteration as required. Failure to do
- so will mean that the second and subsequent recovery sweeps in
- the lifetime of the JVM do not attempt recovery.
- </para>
- </listitem>
- <listitem>
- <para>
- getXAResource: returns an instance of the XAResource
- object. How this is created
- (and how the parameters to its
- constructors are obtained) is
- up to the XAResourceRecovery
- implementation. The parameters to
- the constructors of this
- class should be similar to those used
- when creating the initial
- driver or data source, and should
- obviously be sufficient to
- create new XAResources that can be
- used to drive recovery.
- </para>
- </listitem>
- </itemizedlist>
- <note>
- <para>If you want your XAResourceRecovery instance to be called
- during each sweep of the recovery manager then you should ensure
- that once hasMoreResources returns false to indicate the end of
- work for the current scan it then returns true for the next
- recovery scan.</para>
- </note>
- </section>
- <section>
- <title>Alternative to XAResourceRecovery</title>
- <para>The iterator based approach used by XAResourceRecovery leads
- to a requirement for implementations to manage state, which makes
- them more complex than necessary.</para>
- <para>As an alternative, starting with JBossTS 4.4, users may
- provide an implementation of the public interface
- </para>
- <example>
- <title>XAResourceRecoveryHelper</title>
- <programlisting role="JAVA" language="Java">
- <xi:include href="extras/XAResourceRecoveryHelper.java"
- xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" />
- </programlisting>
- </example>
- <para>During each recovery sweep the getXAResources method will be
- called and recovery attempted on each element of the array. For
- the majority of resource managers it will be necessary to have
- only one XAResource in the array, as the recover() call on it can
- return multiple Xids.</para>
- <para>Unlike XAResourceRecovery instances, which are configured via
- the xml properties file and instantiated by JBossTS, instances of
- XAResourceRecoveryHelper and constructed by the application code
- and registered with JBossTS by calling</para>
- <para>
- <programlisting language="Java" role="JAVA">XARecoveryModule.addXAResourceRecoveryHelper(...)</programlisting>
- </para>
- <para>The initialize method is not called by JBossTS in the current
- implementation, but is provided to allow for the addition of
- further configuration options in later releases.</para>
- <para>XAResourceRecoveryHelper instances may be deregistered, after
- which they will no longer be called by the recovery manager.
- Deregistration may block for a time if a recovery scan is in
- progress.</para>
- <para>
- <programlisting language="Java" role="JAVA">XARecoveryModule.removeXAResourceRecoveryHelper(...)</programlisting>
- </para>
- <para>The ability to dynamically add and remove instances of
- XAResourceRecoveryHelper whilst the system is running makes this
- approach an attractive option for environments in which e.g.
- datasources may be deployed or undeployed, such as application
- servers. Care should be taken with classloading behaviour in such
- cases.</para>
- </section>
- <section>
- <title>Shipped XAResourceRecovery implementations</title>
- <para>Recovery of XA datasources can sometimes be implementation
- dependant, requiring developers to provide their own
- XAResourceRecovery instances. However, JBossTS ships with several
- out-of-the-box implementations that may be useful.</para>
- <note>
- <para>These XAResourceRecovery instances are primarily intended
- for when running JBossTS outside of a container such as JBossAS,
- since they rely upon XADataSources as the primary handle to
- drive recovery. If you are not running JBossTS stand-alone then
- you should consult the relevant integration documentation to
- ensure that the right recovery modules are being used.</para>
- </note>
- <itemizedlist>
- <listitem>
- <para>
- <programlisting>com.arjuna.ats.internal.jdbc.recovery.BasicXARecovery</programlisting>
- : this expects an XML property file to be specified upon
- creation
- and from which it will read the configuration
- properties for the
- datasource. For example:
- </para>
-
- <example>
- <title>XML datasource</title>
- <programlisting language="XML" role="XML">
- <xi:include href="extras/xmlDatasource.xml"
- xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" />
- </programlisting>
- </example>
- </listitem>
- <listitem>
- <para>
- <programlisting>com.arjuna.ats.internal.jdbc.recovery.JDBCXARecovery</programlisting>
- : this recovery implementation should work on any datasource
- that is exposed via JNDI. It expects an XML property file to
- be specified upon creation and from which it will read the
- database JNDI name, username and password. For example:
- </para>
- <example>
- <title>JNDI datasource</title>
- <programlisting language="XML" role="XML">
- <xi:include href="extras/jndiDatasource.xml"
- xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" />
- </programlisting>
- </example>
- </listitem>
- </itemizedlist>
- <para>Because these classes are XAResourceRecovery instances they
- are passed any necessary initialization information via the
- initialise operation. In the case of BasicXARecovery and
- JDBCXARecovery this should be the location of a property file
- and
- is specified in the JBossTS configuration file. For example:
- </para>
- <para>
- <programlisting>com.arjuna.ats.jta.recovery.XAResourceRecoveryJDBC=com.arjuna.ats.internal.jdbc.recovery.JDBCXAResourceRecovery;thePropertyFile</programlisting>
- </para>
- </section>
- <section>
- <title>TransactionStatusConnectionManager</title>
- <para>The TransactionStatusConnectionManager object is used by the
- recovery modules to retrieve the status of transactions and acts
- like a proxy for TransactionStatusManager objects. It maintains a
- table of TransactionStatusConnector obects each of which connects
- to a TransactionStatusManager object in an Application Process.
- </para>
- <para>The transactions status is retrieved using the
- getTransactionStatus methods which take a transaction Uid and if
- available a transaction type as parameters. The process Uid field
- in the transactions Uid parameter is used to lookup the target
- TransactionStatusManagerItem host/port pair in the Object Store.
- The host/port pair are used to make a TCP connection to the target
- TransactionStatusManager object by a TransactionStatusConnector
- object. The TransactionStatusConnector passes the transaction
- Uid/transaction type to the TransactionStatusManager in order to
- retrieve the transactions status.</para>
- </section>
- <section>
- <title>Expired Scanner Thread</title>
- <para>When the Recovery Manager initialises an expiry scanner thread
- ExpiryEntryMonitor is created which is used to remove long dead
- items from the ObjectStore. A number of scanner modules are
- dynamically loaded which remove long dead items for a particular
- type. </para>
- <para>Scanner modules are loaded at initialisation and are specified
- as properties beginning with</para>
- <para>
- <programlisting><entry key="RecoveryEnvironmentBean.expiryScanners">
- list of class names
-</entry></programlisting>
- </para>
- <para>All the scanner modules are called periodically to scan for
- dead items by the ExpiryEntryMonitor thread. This period is set
- with the property:</para>
- <para>
- <programlisting><entry key="RecoveryEnvironmentBean.expiryScanInterval">
- number_of_hours
-</entry></programlisting>
- </para>
- <para>All scanners inherit the same behaviour from the java
- interface ExpiryScanner. A scan method is provided by this
- interface and implemented by all scanner modules, this is the
- method that gets called by the scanner thread.</para>
- <para>The ExpiredTransactionStatusManagerScanner removes long dead
- TransactionStatusManagerItems from the Object Store. These items
- will remain in the Object Store for a period of time before they
- are deleted. This time is set by the property:</para>
- <para>
- <programlisting><entry key="RecoveryEnvironmentBean.transactionStatusManagerExpiryTime">
- number_of_hours
-</entry> (default 12 hours)</programlisting>
- </para>
- <para>The AtomicActionExpiryScanner moves transaction logs for
- AtomicActions that are assumed to have completed. For instance, if
- a failure occurs after a participant has been told to commit but
- before the transaction system can update the log, then upon
- recovery JBossTS recovery will attempt to replay the commit
- request, which will obviously fail, thus preventing the log from
- being removed. This is also used when logs cannot be recovered
- automatically for other reasons, such as being corrupt or zero
- length. All logs are moved to a location based on the old location
- appended with /Expired.</para>
- <note>
- <para>AtomicActionExpiryScanner is disabled by default. To enable
- it simply add it to the JBossTS properties file. You do not need
- to enable it in order to cope with (move) corrupt logs.</para>
- </note>
- </section>
- <section>
- <title>Application Process</title>
- <para>This represents the user transactional program. A Local
- transaction (hash) table, maintained within the running
- application process keeps trace of the current status of all
- transactions created by that application process, The Recovery
- Manager needs access to the transaction tables so that it can
- determine whether a transaction is still in progress, if so then
- recovery does not happen.</para>
- <para>The transaction tables are accessed via the
- TransactionStatusManager object. On application program
- initialisation the host/port pair that represents the
- TransactionStatusManager is written to the Object Store in
- ‘../Recovery/TransactionStatusManager’ part of the Object Store
- file hierarchy and identified by the process Uid of the
- application process.</para>
- <para>The Recovery Manager uses the
- TransactionStatusConnectionManager object to retrieve the status
- of a transaction and a TransactionStatusConnector object is used
- to make a TCP connection to the TransactionStatusManager.</para>
- </section>
- <section>
- <title>TransactionStatusManager</title>
- <para>This object acts as an interface for the Recovery Manager to
- obtain the status of transactions from running JBossTS application
- processes. One TransactionStatusManager is created per application
- process by the class com.arjuna.ats.arjuna.coordinator.TxControl.
- Currently a tcp connection is used for communication between the
- RecoveryManager and TransactionStatusManager. Any free port is
- used by the TransactionStatusManager by default, however the port
- can be fixed with the property:</para>
- <para>
- <programlisting><entry key="RecoveryEnvironmentBean.transactionStatusManagerPort">
- port
-</entry></programlisting>
- </para>
- <para>On creation the TransactionStatusManager obtains a port which
- it stores with the host in the Object Store as a
- TransactionStatusManagerItem. A Listener thread is started which
- waits for a connection request from a TransactionStatusConnector.
- When a connection is established a Connection thread is created
- which runs a Service (AtomicActionStatusService) which accepts a
- transaction Uid and a transaction type (if available) from a
- TransactionStatusConnector, the transaction status is obtained
- from the local thransaction table and returned back to the
- TransactionStatusConnector</para>
- </section>
- <section>
- <title>Object Store</title>
- <para>All objects are identified by a unique identifier Uid. One of
- the values of which is a process id in which the object was
- created. The Recovery Manager uses the process id to locate
- transaction status manager items when contacting the originator
- application process for the transaction status. Therefore, exactly
- one recovery manager per ObjectStore must run on each nodes and
- ObjectStores must not be shared by multiple nodes.</para>
- </section>
- <section>
- <title>Socket free operation</title>
- <para>The use of TCP/IP sockets for TransactionStatusManager and
- RecoveryManager provides for maximum flexibility in the deployment
- architecture. It is often desirable to run the RecoveryManager in
- a separate JVM from the Transaction manager(s) for increased
- reliability. In such deployments, TCP/IP provides for
- communication between the RecoveryManager and transaction
- manager(s), as detailed in the preceding sections. Specifically,
- each JVM hosting a TransactionManager will run a
- TransactionStatusManager listener, through which the
- RecoveryManager can contact it to determine if a transaction is
- still live or not. The RecoveryManager likewise listens on a
- socket, through which it can be contacted to perform recovery
- scans on demand. The presence of a recovery listener is also used
- as a safety check when starting a RecoveryManager, since at most
- one should be running for a given ObjectStore.</para>
- <para>There are some deployment scenarios in which there is only a
- single TransactionManager accessing the ObjectStore and the
- RecoveryManager is co-located in the same JVM. For such cases the
- use of TCP/IP sockets for communication introduces unnecessary
- runtime overhead. Additionally, if several such distinct processes
- are needed for e.g. replication or clustering, management of the
- TCP/IP port allocation can become unwieldy. Therefore it may be
- desirable to configure for socketless recovery operation.</para>
- <para>The property
- CoordinatorEnvironmentBean.transactionStatusManagerEnable can be
- set to a value of NO to disable the TransactionStatusManager for
- any given TransactionManager. Note that this must not be done if
- recovery runs in a separate process, as it may lead to incorrect
- recovery behavior in such cases. For an in-process recovery
- manager, the system will use direct access to the
- ActionStatusService instead.</para>
- <para>The property RecoveryEnvironmentBean.recoveryListener can
- likewise be used to disable the TCP/IP socket listener used by the
- recovery manager. Care must be taken not to inadvertently start
- multiple recovery managers for the same ObjectStore, as this
- error, which may lead to significant crash recovery problems,
- cannot be automatically detected and prevented without the benefit
- of the socket listener.</para>
- </section>
-</chapter>
\ No newline at end of file
Modified: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Author_Group.xml
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/Author_Group.xml 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Author_Group.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % BOOK_ENTITIES SYSTEM "Failure_Recovery_Guide.ent">
+<!ENTITY % BOOK_ENTITIES SYSTEM "Transaction_Bridging_Guide.ent">
]>
<authorgroup>
<author>
- <firstname>Mark</firstname>
- <surname>Little</surname>
+ <firstname>Jonathan</firstname>
+ <surname>Halliday</surname>
<affiliation>
<orgname>Red Hat</orgname>
</affiliation>
- <email>mlittle at redhat.com</email>
+ <email>jhalliday at redhat.com</email>
</author>
</authorgroup>
Modified: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Book_Info.xml
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/Book_Info.xml 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Book_Info.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,20 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % BOOK_ENTITIES SYSTEM "Failure_Recovery_Guide.ent">
+<!ENTITY % BOOK_ENTITIES SYSTEM "Transaction_Bridging_Guide.ent">
%BOOK_ENTITIES;
]>
-<bookinfo id="book-Failure_Recovery_Guide">
- <title>Failure Recovery Guide</title>
+<bookinfo id="book-Transaction_Bridging_Guide">
+ <title>Transaction Bridging Guide</title>
<productname>JBoss Transactions</productname>
<productnumber>4.15.0</productnumber>
<edition>0</edition>
<pubsnumber>0</pubsnumber>
- <abstract>
- <para>
- The Failure Recovery Guide contains information on how to use JBoss Transaction Service to develop
- applications that use transaction technology to manage business processes.
- </para>
- </abstract>
<corpauthor>
<inlinemediaobject>
<imageobject>
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Configuration_options.xml
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/Configuration_options.xml 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Configuration_options.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % BOOK_ENTITIES SYSTEM "Failure_Recovery_Guide.ent">
-]>
-<chapter>
- <title>Configuration Options</title>
- <section>
- <title>Recovery Protocol in OTS - Overview</title>
- <para>JBossTS is highly configurable. For full details of the configuration mechanism used, see the Programmer's Guide.</para>
- <para>The following table shows the configuration features, with default values shown in italics. More details about each option can be found in the relevant sections of this document.</para>
- <note>
- <para>You need to prefix each property in this table with the string com.arjuna.ats.arjuna.recovery. The
-prefix has been removed for formatting reasons, and has been replaced by ...</para>
- </note>
- <informaltable>
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Configuration Name</entry>
- <entry>Possible Values</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <para>...periodicRecoveryPeriod</para>
- </entry>
- <entry>
- <para>120/any positive integer</para>
- </entry>
- <entry>
- <para>
- Interval between recovery attempts, in seconds.
- </para>
- </entry>
- </row>
- <row>
- <entry>
- <para>...recoveryBackoffPeriod</para>
- </entry>
- <entry>
- <para>10/any positive integer</para>
- </entry>
- <entry>
- <para>
- Interval between first and second recovery passes, in seconds.
- </para>
- </entry>
- </row>
- <row>
- <entry>
- <para>...expiryScanInterval</para>
- </entry>
- <entry>
- <para>12/any integer</para>
- </entry>
- <entry>
- <para>
- Interval between expiry scans, in hours. 0 disables scanning. Negative values postpone the first run.
- </para>
- </entry>
- </row>
- <row>
- <entry>
- <para>...transactionStatusManagerExpiryTime</para>
- </entry>
- <entry>
- <para>12/any positive integer</para>
- </entry>
- <entry>
- <para>
- Interval after which a non-contactable process is considered dead. 0 = never.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </section>
-</chapter>
Added: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Design_Notes.xml
===================================================================
--- labs/jbosstm/trunk/docs/txbridge_guide/en-US/Design_Notes.xml (rev 0)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Design_Notes.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "Transaction_Bridging_Guide.ent">
+]>
+<chapter>
+ <title>Design Notes</title>
+ <section>
+ <title>General Points</title>
+ <para>This section records key design points relating to the bridge implementation. The target
+ audience for this section is software engineers maintaining or extending the transaction
+ bridge implementation. It is unlikely to contain material useful to users, except in so far as
+ they wish to contribute to the project. An in-depth knowledge of JBossTS internals may be
+ required to make sense of some parts of this appendix.</para>
+ <para>The txbridge is written as far as possible as a user application layered on top of the JTA
+ and XTS implementations. It accesses these underlying components through standard or supported
+ APIs as far as possible. For example, XAResource is favored over AbstractRecord, the JCA
+ standard XATerminator is used for driving subordinates and so on. This facilitates modularity
+ and portability.</para>
+ <para>It follows that functionality required by the bridge should first be evaluated for
+ inclusion in one of the underlying modules, as experience has shown it is often also useful
+ for other user applications. For example, improvements to allows subordinate termination code
+ portability between JTA and JTS, and support for subordinate crash recovery have benefited
+ from this approach. The txbridge remains a thin layer on top of this functionality, containing
+ only purpose specific code.</para>
+ <para>The 'loops and diamonds' problem boils down to providing deterministic, bi-directional 1:1
+ mapping between an Xid (which is fixed length) and a WS-AT context (which is unbounded length
+ in the spec, although bounded for instances created by the XTS). Consistent hashing techniques
+ get you so far with independent operation, but the only 100% solution is to have a shared
+ service on the network providing the mapping lookup. Naturally this then becomes a single
+ point of failure as well as a scalability issue. For some scenarios it may be possible to use
+ interceptors to propagate the Xid on the web services call as extra data, instead of trying to
+ reproduce the mapping at the other end. Unfortunately XA does not provide for this kind of
+ extensibility, although CORBA does, leading to the possibility of solving the issue without a
+ centralized approach in mixed JTS+WS-AT environments.</para>
+ <para>Requiring a tx context on all calls is a bit limiting, but JBossWS native lacks a
+ WS-Policy implementation. Things may change with the move to CXF. This is really a wider issue
+ with XTS, not just the bridge.</para>
+ </section>
+ <section>
+ <title>Crash Recovery Considerations</title>
+ <para>As usual with transactions, it's the crash recovery that provides for the most complexity.
+ Recovery for the inbound and outbound sides is handled independently. Because of event
+ ordering between recovery modules (JTA, XTS), it requires two complete cycles to resolve some
+ of these crash recovery situations.</para>
+ <section>
+ <title>Inbound Crash Recovery</title>
+ <para>An inbound transaction involves at least
+ four log writes. Top down (i.e. in reverse order
+ of log creation) these are: The WS-AT coordinator
+ log
+ (assumed here to be XTS, but may be 3rd
+ party), the XTS Participant log in the receiving server, the
+ JCA Subordinate transaction log
+ and at least one XA Resource Manager log (which are 3rd party e.g.
+ Oracle).
+ </para>
+ <para>There is no separate log created by the txbridge. The XTS Participant log inlines the
+ Serializable
+ BridgeDurableParticipant via its writeObject method. Recorded state includes its
+ identity (the Xid) and
+ the identity of the separately logged JTA subordinate tx (a Uid).
+ </para>
+ <para>XTS is responsible for
+ the top level coordinator log. JBossTS is responsible for the JTA
+ subordinate tx log and 3rd party
+ RMs
+ are each responsible for their own.</para>
+ <para>The following situations may exist at recovery time,
+ according to the point in time at
+ which the crash occurred:</para>
+ <para>RM log only: In this case, the
+ InboundBridgeRecoveryManager's XAResourceOrphanFilter
+ implementation will be invoked via JBossTS XARecoveryModule,
+ will recognize the orphaned Xids
+ by their formatId (which they inherit from the JCA subordinate,
+ which
+ the txbridge previously
+ created with a specially constructed inflowed Xid) and will vote to have
+ the
+ XARecoveryModule
+ roll them back as no corresponding JCA subordinate log exists, so presumed abort applies.
+ </para>
+ <para>RM log and JTA subordinate tx log: The InboundBridgeRecoverytManager's scan of indoubt
+ subordinate JTA transactions identifies the JTA subordinate as being orphaned and rolls it
+ back, which
+ in turn causes the rollback of the RM's XAResource.</para>
+ <para>RM log, JTA subordinate log and XTS
+ Participant log: XTS is responsible for detecting
+ that the Participant is orphaned (by re-sending Prepared
+ to the Coordinator and receiving
+ 'unknown tx' back) and initiating rollback under the
+ presumed abort
+ convention.</para>
+ <para>WS-AT coordinator log and all downstream logs: The coordinator re-sends Commit
+ to the
+ Participant and the transaction completes.</para>
+ </section>
+ <section>
+ <title>Outbound Crash Recovery</title>
+ <para>An outbound transaction involves log writes for the JTA parent transaction and the XTS
+ BridgeWrapper coordinator. There is not a separate log created by the txbridge. The JTA tx
+ log inlines the Serializable BridgeXAResource via its writeObject method. Recorded state
+ includes the JTA tx id and bridgeWrapper id String. In addition a Web Service participating
+ in the subordinate transaction will create a log. Assuming it's XTS, the participant side
+ log will inline any Serializable Durable2PCParticipant, effectively forming the RM log.
+ </para>
+ <para>The following situations may exist at recovery time, according to the point in time at
+ which the crash occurred:</para>
+ <para>RM log (i.e. XTS Participant log, inlining Serializable Durable2PCParticipant) only: XTS
+ is responsible for detecting that the Participant is orphaned (its direct parent, the
+ subordinate coordinator, is missing) and rolling it back. The bridge recovery code is not
+ involved – XTS recovery deserializes and drives any app DurableParticipants directly.</para>
+ <para>RM log and XTS subordinate log: The DurableParticipant(s) (i.e. client side) and XTS
+ subordinate coordinator / BridgeWrapper (i.e. server side) and reinstantiated by XTS. The
+ BridgeWrapper, being subordinate to a missing parent, must be identified and explicitly
+ rolledback by the bridge recovery code. The bridge recovery manager is itself a
+ RecoveryModule, thus invoked periodically to perform this task. It identified its own
+ BridgeWrapper instance from amongst all those awaiting recovery by means of an id prefix
+ specific to the txbridge code. See JBTM-725 for further details.</para>
+ <para>RM log, XTS subordinate log and JTA parent log (with inlined BridgeXAResource): Top down
+ recovery by the JTA recovery module drives tx to completion, taking the normal JTA
+ parent->BridgeXAResource->XTS subordinate->DurableParticipant path. Note that if the bridge
+ is the only XAResource in the parent, the JTA must have 1PC commit optimization disabled or
+ it won't write a log for recovery.</para>
+ </section>
+ </section>
+ <section>
+ <title>Test framework</title>
+ <para>The test suite for the txbridge is split along two axis. Firstly, the inbound and outbound
+ sides of the bridge have their own test suites in a parallel code package hierarchy. These are
+ largely mirrors, containing tests which have matching intent but different implementation
+ details. Secondly, the tests are split between those for normal execution and those for crash
+ recovery.</para>
+ <para>The tests use a framework consisting of a basic servlet acting as client (the code
+ pre-dates the availability of XTS lightweight client), a basic web service as server and a set
+ of utility classes implementing the appropriate interfaces
+ (Participant/Synchronization/XAResource). These classes contain the bare minimum of test
+ logic. In order to make the tests as easy to understand and modify as possible, an attempt is
+ made to capture the entirety of the test logic within the junit test function instead of
+ splitting it over the framework classes. To facilitate this, extensive use is made of byteman
+ and its associated dtest library, which provides basic distributed mock-like execution tracing
+ and configuration. You probably need to take a detour and read the dtest docs before
+ proceeding further.</para>
+ <para>The basic tests all follow the same pattern: make a call through the bridge, following
+ different logic paths in each test, and verify that the test resources see the expected method
+ calls. For example, in a test that runs a transaction successfully, expect to see commit
+ called on enlisted resources and rollback not called. For a test that configures the prepare
+ to fail, expect to see rollback called and commit not called. The tests verify behavior in the
+ presence of 'expected' errors e.g. prepare failures, but generally don't cover unexpected
+ failures e.g. exceptions thrown from commit.</para>
+ <para>Test normal execution targets in the tests/build.xml assume the server is started manually
+ with byteman installed and has XTS, txbridge and the test artifacts deployed. Note that it
+ also contains targets that may be called to achieve the last of these steps.</para>
+ <para>The crash rec tests start (and subsequently restart) the server automatically, but assume
+ the that XTS, txbridge and the test artifacts are deployed. To manage the server they need to
+ be provided with JBOSS_HOME and JAVA_HOME values in the build.xml.</para>
+ </section>
+</chapter>
\ No newline at end of file
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Failure_Recovery_Guide.ent
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/Failure_Recovery_Guide.ent 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Failure_Recovery_Guide.ent 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,7 +0,0 @@
-<!ENTITY PRODUCT "JBoss Transactions">
-<!ENTITY BOOKID "Failure_Recovery_Guide">
-<!ENTITY VERSION "4.15">
-<!ENTITY YEAR "2011">
-<!ENTITY HOLDER "JBoss.org">
-<!ENTITY APPSERVER "JBoss Application Server">
-<!-- <!ENTITY APPSERVER "Enterprise Application Platform Server"> -->
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Failure_Recovery_Guide.xml
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/Failure_Recovery_Guide.xml 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Failure_Recovery_Guide.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % BOOK_ENTITIES SYSTEM "Failure_Recovery_Guide.ent">
-<!ENTITY PRODUCT "JBoss Transactions">
-<!ENTITY BOOKID "Failure_Recovery_Guide">
-<!ENTITY VERSION "4.15">
-<!ENTITY YEAR "2011">
-<!ENTITY HOLDER "JBoss.org">
-<!ENTITY APPSERVER "JBoss Application Server">
-<!-- <!ENTITY APPSERVER "Enterprise Application Platform Server"> -->]>
-<book>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Book_Info.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Preface.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Architecture_of_the_recovery_manager.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="How_JBossTS_manages_the_OTS_recovery_protocol.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Configuration_options.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Revision_History.xml"/>
- <index/>
-</book>
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/How_JBossTS_manages_the_OTS_recovery_protocol.xml
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/How_JBossTS_manages_the_OTS_recovery_protocol.xml 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/How_JBossTS_manages_the_OTS_recovery_protocol.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,273 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % BOOK_ENTITIES SYSTEM "Failure_Recovery_Guide.ent">
-]>
-<chapter>
- <title>How JBossTS manages the OTS Recovery Protocol</title>
- <section>
- <title>Recovery Protocol in OTS - Overview</title>
- <para>To manage recovery in case of failure, the OTS specification has defined a recovery protocol. Transaction’s participants in a doubt status
- could use the RecoveryCoordinator to determine the status of the transaction. According to that transaction status, those participants can take
- appropriate decision either by roll backing or committing.</para>
- <figure>
- <title>Resource and RecoveryCoordinator relationship</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/fig3-resource-recoverycoordinator.gif" format="GIF" />
- </imageobject>
- </mediaobject>
- </figure>
- <para>A reference to a RecoveryCoordinator is returned as a result of successfully calling register_resource on the transaction Coordinator. This
- object, which is implicitly associated with a single Resource, can be used to drive the Resource through recovery procedures in the event of a
- failure occurring during the transaction.</para>
- </section>
- <section>
- <title>RecoveryCoordinator in JBossTS</title>
- <para>On each resource registration a RecoveryCoordinator Object is expected to be created and returned to the application that invoked the
- register_resource operation. Behind each CORBA object there should be an object implementation or Servant object, in POA terms, which performs
- operations made on a RecoveryCoordinator object. Rather than to create a RecoveryCoordinator object with its associated servant on each
- register_resource, JBossTS enhances performance by avoiding the creation of servants but it relies on a default RecoveryCoordinator object with
- it’s associated default servant to manage all replay_completion invocations.</para>
- <para>In the next sections we first give an overview of the Portable Object Adapter architecture, then we describe how this architecture is used
- to provide RecoveryCoordinator creation with optimization as explained above.</para>
- <section>
- <title>Understanding POA</title>
- <para>Basically, the Portable Object Adapter, or POA is an object that intercepts a client request and identifies the object that satisfies the
- client request. The Object is then invoked and the response is returned to the client.</para>
- <figure>
- <title>Overview of the POA</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/fig4-overview-of-poa.gif" format="GIF" />
- </imageobject>
- </mediaobject>
- </figure>
- <para>The object that performs the client request is referred as a servant, which provides the implementation of the CORBA object requested by
- the client. A servant provides the implementation for one or more CORBA object references. To retreive a servant, each POA maintains an Active
- Object Map that maps all objects that have been activated in the POA to a servant. For each incoming request, the POA looks up the object
- reference in the Active Object Map and tries to find the responsible servant. If none is found, the request is either delegated to a default
- servant, or a servant manager is invoked to activate or locate an appropriate servant. In addition to the name space for the objects, which
- are identified by Object Ids, a POA also provides a name space for POAs. A POA is created as a child of an existing POA, which forms a
- hierarchy starting with the root POA.</para>
- <para>Each POA has a set of policies that define its characteristics. When creating a new POA, the default set of policies can be used or
- different values can be assigned that suit the application requirements. The POA specification defines:</para>
- <itemizedlist>
- <listitem>
- <para>Thread policy – Specifies the threading model to be used by the POA. Possible values are:</para>
- <itemizedlist>
- <listitem>
- <para>ORB_CTRL_MODEL – (default) The POA is responsible for assigning requests to threads.</para>
- </listitem>
- <listitem>
- <para>SINGLE_THREAD_MODEL – the POA processes requests sequentially</para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Lifespan policy - specifies the lifespan of the objects implemented in the POA. The lifespan policy can have the following values:</para>
- <itemizedlist>
- <listitem>
- <para>
- TRANSIENT (Default) Objects implemented in the POA cannot outlive the process in which they are first created. Once the POA is
- deactivated, an
- OBJECT_NOT_EXIST exception occurs when attempting to use any object references generated by the POA.
- </para>
- </listitem>
- <listitem>
- <para>
- PERSISTENT Objects implemented in the POA can outlive the process in which they are first created.
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>
- Object ID Uniqueness policy - allows a single servant to be shared by many abstract objects. The Object ID Uniqueness policy can have
- the following
- values:</para>
- <itemizedlist>
- <listitem>
- <para>
- UNIQUE_ID (Default) Activated servants support only one Object ID.
- </para>
- </listitem>
- <listitem>
- <para>
- MULTIPLE_ID Activated servants can have one or more Object IDs. The Object ID must be determined within the method being invoked
- at run time.
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>
- ID Assignment policy - specifies whether object IDs are generated by server applications or by the POA. The ID Assignment policy can
- have the
- following values:</para>
- <itemizedlist>
- <listitem>
- <para>
- USER_ID is for persistent objects, and
- </para>
- </listitem>
- <listitem>
- <para>
- SYSTEM_ID is for transient objects
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>
- Servant Retention policy - specifies whether the POA retains active servants in the Active Object Map. The Servant Retention policy
- can have the
- following values:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- RETAIN (Default) The POA tracks object activations in the Active Object Map. RETAIN is usually used with ServantActivators or
- explicit activation
- methods on POA.
- </para>
- </listitem>
- <listitem>
- <para>
- NON_RETAIN The POA does not retain active servants in the Active Object Map. NON_RETAIN is typically used with ServantLocators.
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>
- Request Processing policy - specifies how requests are processed by the POA.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- USE_ACTIVE_OBJECT_MAP (Default) If the Object ID is not listed in the Active Object Map, an OBJECT_NOT _EXIST exception is
- returned. The POA must also use the
- RETAIN policy with this value.
- </para>
- </listitem>
- <listitem>
- <para>
- USE_DEFAULT_SERVANT If the Object ID is not listed in the Active Object Map or the NON_RETAIN policy is set, the request is
- dispatched to the default servant. If
- no default servant has been registered, an OBJ_ADAPTER exception is returned. The POA must also
- use the MULTIPLE_ID policy with this
- value.
- </para>
- </listitem>
- <listitem>
- <para>
- USE_SERVANT_MANAGER If the Object ID is not listed in the Active Object Map or the NON_RETAIN policy is set, the servant manager
- is used to obtain a servant.
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>
- Implicit Activation policy - specifies whether the POA supports implicit activation of servants. The Implicit Activation policy can
- have the following
- values:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- IMPLICIT_ACTIVATION The POA supports implicit activation of servants. Servants can be activated by converting them to an object
- reference with
- org.omg.PortableServer.POA.servant_to_reference() or by invoking _this()on the servant. The POA must also use the
- SYSTEM_ID and RETAIN
- policies with this value.
- </para>
- </listitem>
- <listitem>
- <para>
- NO_IMPLICIT_ACTIVATION (Default) The POA does not support implicit activation of servants.
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- </itemizedlist>
- <para>
- It appears that to redirect replay_completion invocations to a default servant we need to create a POA with the Request Processing policy
- assigned
- with the value set to USE_DEFAULT_SERVANT. However to reach that default Servant we should first reach the POA that forward the
- request to the
- default servant. Indeed, the ORB uses a set of information to retrieve a POA; these information are contained in the object
- reference used by
- the client. Among these information there are the IP address and the port number where resides the server and also the POA
- name. To perform
- replay_completion invocations, the solution adopted by JBossTS is to provide one Servant, per machine, and located in the
- RecoveryManager
- process, a separate process from client or server applications. The next section explains how the indirection to a default
- Servant located on
- a separate process is provided for JacORB.
- </para>
- </section>
- </section>
- <section>
- <title>The default RecoveryCoordinator in JacOrb</title>
- <para>
- JacORB does not define additional policies to redirect any request on a RecoveryCoordinator object to a default servant located in the
- Recovery Manager process. However it provides a set of APIs that allows building object references with specific IP address, port number and POA
- name in order to reach the appropriate default servant.
- </para>
- <section>
- <title>How Does it work</title>
- <para>
- When the Recovery Manager is launched it seeks in the configuration the RecoveryActivator that need be loaded. Once done it invokes the
- startRCservice
- method of each loaded instances. As seen in in the previous chapter (Recovery Manager ) the class to load that implements the
- RecoveryActivator interface is the class RecoveryEnablement. This generic class, located in the package
- com.arjuna.ats.internal.jts.orbspecific.recovery, hides the nature of the ORB being used by the application (JacORB). The following figure
- illustrates the behavior of the RecoveryActivator that leads to the creation of the default servant that performs replay_completion
- invocations requests.
- </para>
- <para>
- In addition to the creation of the default servant, an object reference to a RecoveryCoordinator object is created and stored in the
- ObjectStore. As
- we will see this object reference will be used to obtain its IP address, port number and POA name and assign them to any
- RecoveryCoordinator
- object reference created on register_resource.
- </para>
- <figure>
- <title>Recovery Manager</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/fig5-recoverymanager.gif" format="GIF" />
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- When an application registers a resource with a transaction, a RecoveryCoordinator object reference is expected to be returned. To build
- that object
- reference, the Transaction Service uses the RecoveryCoordinator object reference created within the Recovery Manager as a template.
- The new
- object reference contains practically the same information to retrieve the default servant (IP address, port number, POA name, etc.),
- but the
- Object ID is changed; now, it contains the Transaction ID of the transaction in progress and also the Process ID of the process that is
- creating the new RecoveryCoordinator object reference, as illustrated in Figure 11.
-</para>
- <figure>
- <title>Resource registration and returned RecoveryCoordinator Object reference build from a reference stored in the ObjectStore. </title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/fig6-resourceregistration.gif" format="GIF" />
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- Since a RecoveryCoordintaor object reference returned to an application contains all information to retrieve the POA then the default
- servant located
- in the Recovery Manager, all replay_completion invocation, per machine, are forwarded to the same default RecoveryCoordinator
- that is able to
- retreive the Object ID from the incoming request to extract the transaction identifier and the process identifier needed to
- determine the
- status of the requested transaction.
-</para>
- </section>
- </section>
-</chapter>
Copied: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Introduction.xml (from rev 36927, labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/Architecture_of_the_recovery_manager.xml)
===================================================================
--- labs/jbosstm/trunk/docs/txbridge_guide/en-US/Introduction.xml (rev 0)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Introduction.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "Transaction_Bridging_Guide.ent">
+]>
+<chapter>
+ <title>Introduction</title>
+ <section>
+ <title>Contextual Overview</title>
+ <para>Transactions provide a structuring mechanism for business logic. Use of transactions
+ allows for grouping of data manipulations into constructs with certain properties. Traditional
+ ACID transactions provide for properties of Atomicity, Consistency, Isolation and Durability.
+ </para>
+ <para>In JavaEE applications, transaction support is provided via the Java Transaction API
+ (JTA). The classes and interfaces in the javax.transaction and javax.transaction.xa packages
+ provide a means by which the programmer may manage transaction demarcation (begin, commit,
+ rollback) and, where necessary, interact with the transaction management system (e.g.
+ enlistResource). In many JavaEE applications, further abstractions are provided on top of the
+ JTA. For example, EJB3 @TransactionAttribute annotations may be used for transaction boundary
+ demarcation in preference to explicit calls to the JTA's UserTransaction interface.</para>
+ <para>In distributed applications, the JTA implementation may provide propagation of transaction
+ context and transaction control calls between containers (JVMs) using either a propriety
+ transport or JTS, the Java mapping of the CORBA OTS standard on an RMI/IIOP transport. In
+ JBossTS, both local and distributed (JTS) implementations of the JTA are available.</para>
+ <para>In Web Services applications, ACID transaction management and interoperable context
+ propagation is provided for by the WS-AT standard. JBossTS XTS provides an implementation of
+ both the 1.0 and 1.2 versions of this standard. Bridging is provided only on the more recent
+ version. At the time of writing the standard covers only the web services API and protocol,
+ not the Java API through which the protocol may be driven. Therefore, XTS provides a custom
+ Java API to users, with characteristics broadly similar to the JTA.</para>
+ <para>For applications that combine traditional JavaEE transaction management and Web Service
+ transaction management, it is often desirable to have some mechanism for linking these
+ transaction types, such that a single transaction may span business logic written for either
+ transaction type. Examples include exposing existing JavaEE transactional business logic (e.g.
+ EJBs) as transactional Web Services, or allowing JavaEE transactional components to utilize
+ transactional Web Services.</para>
+ </section>
+ <section>
+ <title>Transaction Bridging</title>
+ <para>We use the term Transaction Bridging to describe the process of linking the JavaEE and Web
+ Services transaction domains. The transaction bridge component (txbridge) of JBossTS provides
+ bi-directional linkage, such that either type of transaction may encompass business logic
+ designed for use with the other type.</para>
+ <para>The technique used by the bridge is a combination of interposition and protocol mapping.
+ </para>
+ <para>Interposition is used in transaction systems to allow a tree of transaction coordinators
+ to be constructed, usually for performance reasons. Interposed coordinators function as
+ transaction managers for nodes below them in the tree, whilst appearing as resources
+ (participants in WS-AT terminology) to the node above them.</para>
+ <para>Within a single transaction domain, interposition may be used to allow remote nodes to
+ minimize the number of network calls necessary at transaction termination. The top level node
+ is known as the root coordinator, whilst interposed coordinators are termed subordinate. This
+ name indicates that they are not autonomously responsible for determining the transaction
+ outcome, but rather are driven by their parent coordinator. Therefore, whilst a top level
+ coordinator exposes only the commit and rollback methods for transaction termination and
+ handles the 2PC internally, the subordinates additionally expose the prepare method to their
+ parent, behaving much like resources during the termination protocol.</para>
+ <figure>
+ <title>Transaction interposition in a distributed JTA environment</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/interposition.gif" format="GIF" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+ <para>In the transaction bridge, an interposed coordinator is registered into the existing
+ transaction and performs the additional task of protocol mapping. That is, it appears to its
+ parent coordinator to be a resource of its native transaction type, whilst appearing to its
+ children to be a coordinator of their native transaction type, even though these transaction
+ types differ.</para>
+ <figure>
+ <title>Transactional bridging interposition</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/bridgeinterposition.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+ <para>The interposed coordinator is responsible for performing mapping between the transaction
+ protocols. There is a strong correspondence between the API and protocol used by the JTA and
+ WS-AT transaction types, which is unsurprising given their common heritage and shared problem
+ domain. However, method signatures, exception types and such do differ. The bridge provides a
+ abstraction layer to mask these distinctions as far as possible.</para>
+ <para>The net result of this is that existing business logic perceives its expected transaction
+ environment, even though the transaction in which it is executing may be subordinate to one of
+ a different type. No changes are necessary to existing transactional applications to allow
+ them to operate in the scope of foreign transactions. This facilitates reuse of existing
+ business logic components in new environments and increases the possibilities for new
+ architectures and interoperability.</para>
+ <para>The Recovery Manager functions by:</para>
+ </section>
+</chapter>
\ No newline at end of file
Added: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Known_Limitations.xml
===================================================================
--- labs/jbosstm/trunk/docs/txbridge_guide/en-US/Known_Limitations.xml (rev 0)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Known_Limitations.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "Transaction_Bridging_Guide.ent">
+]>
+<chapter>
+ <title>Known Limitations</title>
+ <para>The current transaction bridge release has the following limitations:</para>
+ <itemizedlist>
+ <listitem>
+ <para>The bridge operates only on WS-AT 1.2, not 1.0, although XTS includes implementations of
+ both versions of WS-AT. Care must therefore be taken to deploy and configure the system
+ correctly.</para>
+ </listitem>
+ <listitem>
+ <para>The bridge provides JAX-WS handlers only, not JAX-RPC, although it is possible to create
+ such if required.</para>
+ </listitem>
+ <listitem>
+ <para>Long running activities that occur during the transaction termination process may cause
+ timeouts in the transaction system, which can in turn cause inconsistent transaction
+ outcomes or incomplete transaction termination. To minimize this problem, it is advised to
+ manually flush data that would otherwise be flushed by Synchronizations during termination,
+ such as hibernate session state.</para>
+ </listitem>
+ <listitem>
+ <para>A transaction context must always be present on the Thread in order for the context
+ processors to operate correctly, as detailed previously in 'Using the Transaction Bridge'.
+ </para>
+ </listitem>
+ <listitem>
+ <para>A subordinate transaction context will be created and registered into the parent
+ transaction unconditionally, which can cause unnecessary overhead in situations where no
+ transactional activity takes place in the scope of the subordinate. Care should be taken to
+ register the bridge handlers only on methods that do require them. In future releases this
+ may be addressed by the use of WS-Policy or lazy initialization techniques.</para>
+ </listitem>
+ <listitem>
+ <para>Transaction mappings are local to BridgeManagers, which are singletons. This means
+ mappings are classloader scoped and not shared across JVMs. This gives rise to issues where
+ transactional resources are accessed indirectly though multiple bridges or transaction
+ context transports, as described in 'Loops and Diamonds'.</para>
+ </listitem>
+ <listitem>
+ <para>Crash recovery is subject to certain timing issues, due to the interaction between
+ recovery of the JTA/XA and XTS sides of the transaction. It may take more than one crash
+ recovery cycle for a bridged transaction to recover fully. Note that recovery of subordinate
+ transactions is dependent on the recovery of their parent, so care must be taken to ensure
+ the correct recovery of any external transaction manager used in that role. The transaction
+ bridge does not currently provide dedicated tooling for the manual resolution of orphaned
+ subordinates, instead relying on the general purpose objectstore maintenance tooling
+ provided by JbossTS.</para>
+ </listitem>
+ <listitem>
+ <para>Note that crash recovery will not behave correctly for outbound bridged transactions if
+ 1PC commit optimization is used in the parent JTA transaction. This is not specific to the
+ bridge, but rather is a generic issue with any transaction in which a single resource is an
+ interposed subordinate coordinator. Inbound bridges transactions are unaffected as XTS
+ (WS-AT) does not utilize a 1PC optimization.</para>
+ </listitem>
+ </itemizedlist>
+</chapter>
\ No newline at end of file
Modified: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Preface.xml
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/Preface.xml 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Preface.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % BOOK_ENTITIES SYSTEM "Failure_Recovery_Guide.ent">
+<!ENTITY % BOOK_ENTITIES SYSTEM "Transaction_Bridging_Guide.ent">
]>
-<preface id="pref-Failure_Recovery_Guide-Preface">
+<preface id="pref-Transaction_Bridging_Guide-Preface">
<title>Preface</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Common_Content/Conventions.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Feedback.xml">
Modified: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Revision_History.xml
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/Revision_History.xml 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Revision_History.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,14 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % BOOK_ENTITIES SYSTEM "Failure_Recovery_Guide.ent">
-<!ENTITY PRODUCT "JBoss Transactions">
-<!ENTITY BOOKID "Failure_Recovery_Guide">
-<!ENTITY VERSION "4.15">
-<!ENTITY YEAR "2011">
-<!ENTITY HOLDER "JBoss.org">
-<!ENTITY APPSERVER "JBoss Application Server">
-<!-- <!ENTITY APPSERVER "Enterprise Application Platform Server"> -->]>
-<appendix id="appe-Failure_Recovery_Guide-Revision_History">
+<!ENTITY % BOOK_ENTITIES SYSTEM "Transaction_Bridging_Guide.ent">
+%BOOK_ENTITIES;
+]>
+<appendix id="appe-Transaction_Bridging_Guide-Revision_History">
<title>Revision History</title>
<simpara>
<revhistory>
Added: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Transaction_Bridge_Architecture.xml
===================================================================
--- labs/jbosstm/trunk/docs/txbridge_guide/en-US/Transaction_Bridge_Architecture.xml (rev 0)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Transaction_Bridge_Architecture.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "Transaction_Bridging_Guide.ent">
+]>
+<chapter>
+ <title>Transaction Bridge Architecture</title>
+ <section>
+ <title>Overview</title>
+ <para>The transaction bridge resides in the package org.jboss.jbossts.txbridge and its
+ subpackages.. It consists of two distinct sets of classes, one for bridging in each direction.
+ </para>
+ <para>The process of inflowing a WS-AT transaction context on a Web Service call into the
+ container and converting it to a local JTA transaction context such that existing
+ transactional
+ JavaEE code (e.g. EJBs) may be called within its scope, is termed Inbound
+ Transaction Bridging.
+ When using inbound bridging, a parent WS-AT transaction coordinator has a
+ subordinate JTA
+ coordinator interposed into it via the transaction bridge.</para>
+ <para>The process of outflowing a WS-AT transaction context on a call to a transactional Web
+ Service from a business logic method operating in a JavaEE transaction scope, is termed
+ Outbound
+ Transaction Bridging. When using outbound bridging, a parent JTA transaction
+ coordinator has a
+ subordinate WS-AT coordinator interposed into it via the transaction bridge.
+ </para>
+ <para>For the purpose of understanding this naming convention, it is simplest to view the JTA as
+ being local to the container in which it operates, whilst the Web Service protocol provides
+ for
+ transaction context propagation between servers. This is an accurate representation of the
+ situation that exists where the local JTA version of JBossTS is being used alongside JBossTS
+ XTS
+ in an application server. However, it is an oversimplification of the situation where the
+ JTS
+ option is used. We will return to this case later.</para>
+ <figure>
+ <title>Simplified Bridge Architecture</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/architecture.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+ </section>
+ <section>
+ <title>Shared Design Elements</title>
+ <para>The design of the inbound and outbound bridges is conceptually very similar. Each provides
+ the following:</para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ A
+ <emphasis>BridgeManager</emphasis>
+ , essentially a factory singleton, providing a means of managing Bridge and
+ resource/participant instances. The chief role of the BridgeManager is to ensure a
+ distinct mapping of a parent transaction context to a single Bridge and
+ resource/participant instance.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ A
+ <emphasis>Bridge</emphasis>
+ , which provides Thread to transaction context association and disassociation functions
+ for the subordinate transaction. The Bridge is usually called from the Handler, but may
+ optionally be driven directly.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ A
+ <emphasis>Handler</emphasis>
+ , which is registered into the JAX-WS processing pipeline to provide minimally invasive
+ management of Thread to transaction context bindings via the Bridge, an appropriate
+ instance of which it obtains from the BridgeManager. Whilst the bridge provides handlers
+ only for JAX-WS, it's possible to use these as a model for the implementation of JAX-RPC
+ versions if desired.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ A
+ <emphasis>VolatileParticipant</emphasis>
+ and
+ <emphasis>DurableParticipant</emphasis>
+ (in the case of the InboundBridge) or
+ <emphasis>Synchronization</emphasis>
+ and
+ <emphasis>XAResource</emphasis>
+ (in the case of the OutboundBridge) which are enlisted into the parent transaction and
+ wrap the Subordinate transaction coordinator, providing mapping of the transaction
+ termination protocol operations.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ A
+ <emphasis>RecoveryManager</emphasis>
+ , which is responsible for automatically restoring the state of crashed transactions and
+ allowing them to complete correctly.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Inbound Bridging</title>
+ <para>The process flow when using the inbound bridge is as follows:</para>
+ <orderedlist>
+ <listitem>
+ <para>A remote client starts a WS-AT transaction and invokes a transactional Web Service in
+ the scope of that transaction. The inbound WS invocation therefore has SOAP headers
+ containing the WS-AT transaction context. The coordinator used for this transaction is the
+ root coordinator. It may be remote from either or both of the client and the service it is
+ invoking. The client needs access to a WS-AT implementation, but not a JTA or the
+ transaction bridge deployed.</para>
+ </listitem>
+ <listitem>
+ <para>The call arrives at a web service container, which must have JBossTS JTA or JTS, XTS
+ and the transaction bridge deployed. The JAX-WS handler chain for the web service should
+ have both the XTS WS-AT transaction header processor and the inbound bridge handler
+ registered, such that they are invoked in that order.</para>
+ </listitem>
+ <listitem>
+ <para>The transaction header processor takes the WS-AT transaction context from XML, creates
+ a corresponding WS-AT TxContext and associates it to the Thread. The bridge handler calls
+ the InboundBridgeManager to obtain an InboundBridge instance corresponding to the
+ TxContext.</para>
+ </listitem>
+ <listitem>
+ <para>As the BridgeManager is seeing the TxContext for the first time, it creates a new
+ Bridge instance. It also creates a new Bridge VolatileParticipant and DurableParticipant
+ and registers them with the WS-AT transaction coordinator. These Participants wrap a
+ subordinate JTA transaction.</para>
+ </listitem>
+ <listitem>
+ <para>The bridge header processor starts the bridge, which associates the JTA subordinate
+ transaction context to the Thread. At this point the Thread has transaction contexts for
+ both WS-AT and JTA.</para>
+ </listitem>
+ <listitem>
+ <para>The JAX-WS pipeline processing continues, eventually calling whatever business logic
+ is exposed. This may be e.g. an EJB using JSR-181 annotations. The business logic may use
+ the JTA transaction in the normal manner e.g. enlisting Synchronizations and XAResources
+ or performing other transactional activity either directly or though the usual JavaEE
+ abstractions.</para>
+ </listitem>
+ <listitem>
+ <para>On the return path, the bridge header processor disassociates the JTA transaction
+ context from the Thread via the Bridge. The XTS context processor then does likewise for
+ the WS-AT TxContext.</para>
+ </listitem>
+ <listitem>
+ <para>On subsequent web services calls to the same or other web services from the same
+ client, the process is repeated. However, the BridgeManager will, upon seeing the same
+ WS-AT transaction context again, return the existing Bridge instance and not register
+ further Participant instances. This allows substantially better performance than
+ registering one Participant per web service invocation.</para>
+ </listitem>
+ <listitem>
+ <para>Upon transaction termination by the client, the WS-AT transaction coordinator will
+ drive the enlisted bridge Participants through the transaction termination protocol. The
+ Participants maps these calls down to the JTA subtransaction coordinator, which in turn
+ passes them on to any Synchronizations or XAResources enlisted in the transaction. This
+ process is not visible to the business logic, except in so far as it may have registered
+ its own Synchronizations, XAResources or Participants with the transaction.</para>
+ </listitem>
+ </orderedlist>
+ </section>
+ <section>
+ <title>Outbound Bridging</title>
+ <para>The process flow when using the outbound bridge is as follows:</para>
+ <orderedlist>
+ <listitem>
+ <para>A client starts a JTA transaction and invokes a remote transactional Web Service in
+ the scope of that transaction. The client must have JBossTS JTA (or JTS) and XTS deployed,
+ as well as the transaction bridge. The coordinator used for the JTA transaction is the
+ root coordinator. The server hosting the target web service needs a WS-AT transaction
+ implementation but not a JTA or the transaction bridge.</para>
+ </listitem>
+ <listitem>
+ <para>The outbound WS invocation flows though a handler chain that has the outbound
+ transaction bridge handler and XTS header context processor registered, such that they are
+ invoked in that order.</para>
+ </listitem>
+ <listitem>
+ <para>The bridge handler calls the outbound bridge manager to obtain an outbound bridge
+ instance corresponding to the JTA transaction context. As the BridgeManager is seeing the
+ context for the first time, it creates a new Bridge instance. It also creates a
+ Synchronization and XAResource instance to wrap the subordinate WS-AT transaction and
+ registers these with the JTA transaction.</para>
+ </listitem>
+ <listitem>
+ <para>The bridge handler starts the bridge, which associates the subordinate WS-AT
+ transaction context to the Thread. The WS-AT header context processor then serializes this
+ into XML in the headers of the outbound Web Services call.</para>
+ </listitem>
+ <listitem>
+ <para>The receiving Web Service sees a WS-AT context and can work with it in the normal
+ manner, without knowing it is a subordinate context.</para>
+ </listitem>
+ <listitem>
+ <para>On the return path, the bridge handler disassociates the WS-AT TxContext from the
+ Thread via the Bridge.</para>
+ </listitem>
+ <listitem>
+ <para>On subsequent calls to the same or other transactional Web Services in the scope of
+ the same JTA transaction, the process is repeated. However, the BridgeManager will, upon
+ seeing the same JTA transaction context again, return the existing Bridge and not register
+ another Synchronization or XAResource with the parent JTA transaction. This allows
+ substantially better performance than registering once per web service invocation.</para>
+ </listitem>
+ <listitem>
+ <para>Upon transaction termination by the client, the JTA transaction coordinator will drive
+ the enlisted bridge Synchronization and XAResource through the transaction termination
+ protocol. The XAResource maps these calls down to the WS-AT subtransaction coordinator,
+ which in turn passes them on to any Volatile or Durable Participants enlisted in the
+ transaction. This process is not visible to the business logic, except in so far as it may
+ have registered its own Participants, XAResources or Synchronizatons with the transaction.
+ </para>
+ </listitem>
+ </orderedlist>
+ </section>
+ <section>
+ <title>Crash Recovery</title>
+ <para>The bridge includes independent crash recovery systems for the inbound and outbound sides.
+ These are automatically installed and activated as part of the bridge deployment. They rely
+ upon the recovery mechanisms in the JTA and XTS components, which are likewise deployed and
+ activated by default as part of their respective components.</para>
+ <para>It is the responsibility of the application(s) to use suitable XAResources (inbound) or
+ DurableParticipants (outbound). In general the former will be from XA datasources or messaging
+ systems, whilst the latter will be custom implementations. In either case it is important to
+ ensure recovery is correctly configured for the resource manager(s) before using them in
+ production, via the bridge or otherwise. The JBossTS documentation set details crash recovery
+ configuration, as does the application server administration guide. For resource manager
+ specific information e.g. Oracle db permissions settings for recovery connections, please
+ consult the vendor's documentation.</para>
+ <para>A bridged transaction will involve several distinct log writes, potentially on multiple
+ hosts. Resolving the transaction may require more than one crash recovery cycle, due to
+ ordering constrains on the events taking place during recovery. If a transaction fails to
+ recover after all servers have been restored to service for more than two recovery cycles
+ duration, the JBossTS objectstore browser and server logs may be useful for diagnosing the
+ issue. Where a transaction involves multiple bridges the number of recovery cycles required to
+ resolve it may further increase. For systems requiring maximum availability it is therefore
+ not recommended to span a transaction through more than one bridge.</para>
+ <para>
+ Note that the 1PC commit optimization should not be used with outbound bridged
+ transactions in
+ which the subordinate may contain more than one Participant. Even where only
+ one Participant
+ is used, crash recovery logs may not correctly reflect the actual transaction
+ outcome. The 1PC
+ optimization is on be default and may be disabled by setting
+ <property
+ name="commitOnePhase">false </property> on CoordinatorEnvironmentBean.
+ </para>
+ <para>See the 'Design Notes' appendix for detailed information on potential crash recovery
+ scenarios and how each is handled.</para>
+ </section>
+</chapter>
\ No newline at end of file
Copied: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Transaction_Bridging_Guide.ent (from rev 36927, labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/Failure_Recovery_Guide.ent)
===================================================================
--- labs/jbosstm/trunk/docs/txbridge_guide/en-US/Transaction_Bridging_Guide.ent (rev 0)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Transaction_Bridging_Guide.ent 2011-04-15 13:31:46 UTC (rev 36939)
@@ -0,0 +1,7 @@
+<!ENTITY PRODUCT "JBoss Transactions">
+<!ENTITY BOOKID "Transaction_Bridging_Guide">
+<!ENTITY VERSION "4.15">
+<!ENTITY YEAR "2011">
+<!ENTITY HOLDER "JBoss.org">
+<!ENTITY APPSERVER "JBoss Application Server">
+<!-- <!ENTITY APPSERVER "Enterprise Application Platform Server"> -->
Copied: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Transaction_Bridging_Guide.xml (from rev 36927, labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/Failure_Recovery_Guide.xml)
===================================================================
--- labs/jbosstm/trunk/docs/txbridge_guide/en-US/Transaction_Bridging_Guide.xml (rev 0)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Transaction_Bridging_Guide.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "Transaction_Bridging_Guide.ent">
+%BOOK_ENTITIES;
+]>
+<book>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Book_Info.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Preface.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="About_This_Guide.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Introduction.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Transaction_Bridge_Architecture.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Using_the_Transaction_Bridge.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Known_Limitations.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Design_Notes.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Revision_History.xml"/>
+ <!-- <index /> -->
+</book>
Added: labs/jbosstm/trunk/docs/txbridge_guide/en-US/Using_the_Transaction_Bridge.xml
===================================================================
--- labs/jbosstm/trunk/docs/txbridge_guide/en-US/Using_the_Transaction_Bridge.xml (rev 0)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/Using_the_Transaction_Bridge.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "Transaction_Bridging_Guide.ent">
+]>
+<chapter>
+ <title>Using the Transaction Bridge</title>
+ <section>
+ <title>Introduction</title>
+ <para>This section describes how to use the transaction bridge in your applications. It is
+ recommended you first read the preceding chapters for a theoretical background in the way the
+ bridge functions.</para>
+ </section>
+ <section>
+ <title>Deployment</title>
+ <para>
+ The txbridge.jar file should be placed in JBossAS server/lt;config>/deploy directory.
+ The server must also be running JBossTS JTA (the default transaction manager) or JTS, and also
+ JBossTS XTS. The versions of all these components must be consistent.
+ </para>
+ </section>
+ <section>
+ <title>Inbound Bridging</title>
+ <para>To use the inbound bridge, register the JAX-WS handler into the handler chain of any Web
+ Service as follows:</para>
+ <example>
+ <title>
+ Registering the
+ <literal>handler</literal>
+ for Inbound Bridging
+ </title>
+ <programlisting role="XML" language="XML">
+ <xi:include href="extras/inboundbridging.xml" xmlns:xi="http://www.w3.org/2001/XInclude"
+ parse="text" />
+ </programlisting>
+ </example>
+ <para>The web service may then operate as though running in the scope of a JTA transaction, as
+ indeed it is. For example, it can call (or indeed simply be) an EJB3 business logic method
+ annotated with @TansactionAttribute(TransactionAttributeType.MANDATORY).</para>
+ <para>Note that the handlers expect a WS-AT transaction context to be present on all inbound
+ invocations. If you wish deploy your service in such a way as to make transactional invocation
+ optional, you must expose it though two different endpoints, one transactional and one not,
+ with the handlers registered only on the former. This limitation may be addressed in future
+ versions.</para>
+ </section>
+ <section>
+ <title>Outbound Bridging</title>
+ <para>To use the outbound bridge, register the JAX-WS handler into the handler chain of any Web
+ Service client application as follows:</para>
+ <example>
+ <title>
+ Registering the
+ <literal>handler</literal>
+ for Outbound Bridging
+ </title>
+ <programlisting role="XML" language="XML">
+ <xi:include href="extras/outboundbridging.xml" xmlns:xi="http://www.w3.org/2001/XInclude"
+ parse="text" />
+ </programlisting>
+ </example>
+ <para>The web service client may then make calls to web service implementations that expect to
+ be invoked in the scope of a WS-AT transaction.</para>
+ <para>Note that the handlers expect a JTA transaction context to be present on the client thread
+ used to make the outbound web service invocation. If the context is not always present,
+ different stubs must be used for the transactional and non-transactional cases and the handler
+ chain registered only on the former. This limitation may be addressed in future versions.
+ </para>
+ </section>
+ <section>
+ <title>Demonstration Application</title>
+ <para>A simple demonstration application is available to show usage of the bridge. It is modeled
+ to some extent on the XTS 'Night Out' demonstrator application, with which readers are assumed
+ to be familiar.</para>
+ <para>Since transactions mostly run without visible effect, the demo is useful mainly as an
+ example of how to utilize the bridge. The bridge implementation does however contain trace
+ level
+ logging for most functions. Used in conjunction with verbose logging from XTS, the
+ transaction
+ manager, the Web Service stack and the EJB container, this can be used to gain a
+ detailed
+ understanding of the flow of events in the system. Alternatively, stepping though the
+ demo using
+ a source debugger can be instructive.</para>
+ <para>
+ To deploy and run the demo application, edit demo/build.xml to ensure the jbossas.home and
+ jbossas.server properties are set correctly, then execute 'ant dist' to build the application
+ artifacts. Start the application server, then deploy the service side of the demo using 'ant
+ deploy-service' Once it has deployed, the client app can be similarly installed using 'ant
+ deploy-client'. Depending on your server configuration, the client will then be accessible
+ from
+ e.g.
+ <ulink url="http://localhost:8080/txbridge-demo-client/">http://localhost:8080/txbridge-demo-client/</ulink>
+ </para>
+ <section>
+ <title>Inbound Bridge</title>
+ <para>The demonstrator exposes a EJB3 SLSB as a transactional web service ('Bistro') via the
+ inbound bridge. Note that the code implementing this service is standard EJB with JSR-181
+ annotations and has no compile time dependency on XTS or the txbridge. The only point of
+ linkage is the usage of the @HandlerChain(file = "jaxws-handlers-server.xml") annotation to
+ reference a xml file containing the XTS and txbridge handlers, as detailed above. Other than
+ this the service side of the application uses only standard JavaEE elements and has no
+ direct knowledge of WS-AT transactions.</para>
+ <para>A client starts a WS-AT transaction and makes an invocation on the web service. The
+ client does not use JTA (XA) transactions. It uses @HandlerChain(file =
+ "jaxws-handlers-client.xml") to register the XTS header context processor, but is otherwise
+ similar to the XTS demo client.</para>
+ <para>
+ In this demo, the inbound bridge converts the WS-AT context to a JTA one and invokes the
+ EJB
+ in that scope. By default the EJB is backed by the hsqldb embedded in JBossAS, for ease
+ of
+ deployment. This database does not support XA, so the resource registered for it uses
+ LRCO.
+ However, this point is not significant to the demo. Curious uses can readily use a true
+ XA
+ database by deploying it into JBossAS via the usual <xa-datasource> in a -ds.xml
+ file, then alter the demo's dd/persistence.xml to reference it.
+ </para>
+ </section>
+ <section>
+ <title>Outbound Bridge</title>
+ <para>The demonstrator client application can also be used to invoke the XTS Night Out demo
+ Restaurant Service via the outbound bridge. Deploy the XTS demo application services, then
+ select the 'JTA' transaction type in the client. In this scenario the client uses a JTA
+ transaction only, whilst the service understands WS-AT type transactions only. Note that the
+ client has its own copy of the service API, annotated with @HandlerChain(file =
+ "jaxws-handlers-client.xml"), which is the only point of linkage with the transaction
+ bridge. Once again neither the client nor server have any compile time dependency on the
+ bridge.</para>
+ </section>
+ </section>
+ <section>
+ <title>Loops and Diamonds</title>
+ <para>In distributed environments that utilize transaction bridging, it is possible to construct
+ arrangements of servers such that a transaction context passes though more than one
+ interposition. These can give rise to some undesirable issues, including locking and
+ performance problems.</para>
+ <para>A simple case would be a loop in which a JTA transaction context is bridged outbound to a
+ WS-AT context, passed though one or more remote servers and inflowed back to the original
+ server through an inbound bridge. This may result in a new subordinate JTA context, rather
+ than reuse of the existing parent context in the original server.</para>
+ <para>This situation has two main observable effects. Firstly, the parent JTA transaction and
+ indirectly subordinate JTA transaction are considered distinct and XAResources may not be
+ shared between them. In most cases this will cause isolation between the transactions, such
+ that they do not share locks or see eachother's changes. This may cause deadlocks in the
+ application. Secondly, performance will be poor relative to reuse of the original context,
+ particularly if the interposition chain becomes long.</para>
+ <para>A similar problem exists where a transaction context is propagated from a single source to
+ a single destination server via two or more separate routes, the abstract paths forming a
+ diamond shape. In such case the intermediate nodes operate independently and will bridge the
+ original context to two separate interposed contexts. To the destination server these will
+ appear unrelated, rather than as representations of the same transaction. Thus instead of
+ recombining into a single shared transaction context at the destination, they will behave as
+ different transactions, giving rise once again to potential deadlock and performance issues.
+ </para>
+ <para>These problems may be partially addressed by having a shared context mapping service
+ available on the network, which each bridge consults when working with a previously unseen
+ transaction context for the first time. Using such a mechanism, bridge instances may identify
+ transactions for which an established mapping already exists and reuse that relationship
+ rather than creating a new one.</para>
+ <para>This shared service model does however cause some issues of its own with regard to
+ performance and availability. It is not currently implemented. Therefore, users are urged to
+ be cautious when constructing distributed applications. Whilst location abstraction is
+ sometimes desirable, is is important to maintain a clear understanding of the deployment
+ relationships between transactional components in the system.</para>
+ </section>
+ <section>
+ <title>Distributed JTA and the JTS</title>
+ <para>The JavaEE transaction engine in JBossTS comes in two varieties. These are the local only
+ JTA, which does not support propagation of transaction context or transaction control calls
+ between JVMs and the JTAX, which provides the JTA API implemented by a JTS engine that does
+ support distributed usage.</para>
+ <para>JBossAS uses the local JTA implementation by default, but can be reconfigured to use the
+ JTS via the JTA API, such that it supports distributed transactions without requiring any
+ changes to business applications.</para>
+ <para>In environments requiring transaction propagation of JTA transactions, it is feasible to
+ use either the JTS or an outbound and inbound bridge pair to achieve this. In the former case
+ the transport is RMI/IIOP for the transaction control and RMI/IIOP or JRMP for the
+ transactional business logic calls. In the latter case the transport is Web Services for both
+ transaction control and business logic.</para>
+ <para>From a transaction management perspective the JTS solution is preferred, due to simplicity
+ (no protocol mapping is needed), maturity (JBossTS JTS was the world's first JTS
+ implementation and has been extensively used and tested in production environments) and
+ performance (binary vs. xml).</para>
+ <para>It is possible to use transactions that propagate context on some calls via JTS and on
+ others via Web Services, such as a client invoking both EJBs via RMI/IIOP and Web services
+ with WS-AT context. In such cases it's possible for a transaction to have multiple
+ representations that the infrastructure cannot determine are related, even if they actually
+ represent different contexts in the same interposition hierarchy. Care must therefore be taken
+ to avoid the problems described previously in 'Loops and Diamonds'.</para>
+ </section>
+ <section>
+ <title>Logging</title>
+ <para>The transaction bridge uses the jboss-logging system. When running inside JBossAS 6,
+ logging is configured via the server's deploy/jboss-logging.xml file. To enable full logging
+ for the transaction bridge, which may be useful for debug purposes, the following should be
+ used:</para>
+ <example>
+ <title>Configuring Transaction Bridge Logging</title>
+ <programlisting role="XML" language="XML">
+ <xi:include href="extras/txbridgelogging.xml" xmlns:xi="http://www.w3.org/2001/XInclude"
+ parse="text" />
+ </programlisting>
+ </example>
+ <para>Note that the transaction bridge is a thin layer on top of the XTS and JTA/JTS components
+ of
+ JBossTS, and that it also interacts with other parts of the application server. To gain a
+ comprehensive understanding of the system's operation, it may be necessary to enable verbose
+ logging for some of these other components also. The JBossTS logging system is discussed in
+ detail in the accompanying documentation set, but for ease of reference the following may be
+ used to enable verbose logging:</para>
+ <example>
+ <title>Configuring verbose logging</title>
+ <programlisting role="XML" language="XML">
+ <xi:include href="extras/verboselogging.xml" xmlns:xi="http://www.w3.org/2001/XInclude"
+ parse="text" />
+ </programlisting>
+ </example>
+ <para>Note also that deployment ordering issues can result in JBossTS components, including the
+ transaction bridge, becoming active before the logging system is fully configured. In such
+ cases a default logging level may apply during startup, resulting in some more detailed debug
+ messages being missed.</para>
+ </section>
+</chapter>
\ No newline at end of file
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/XAResourceRecoveryHelper.java
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/extras/XAResourceRecoveryHelper.java 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/XAResourceRecoveryHelper.java 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,4 +0,0 @@
-public interface com.arjuna.ats.jta.recovery.XAResourceRecoveryHelper {
- public boolean initialise(String p) throws Exception;
- public XAResource[] getXAResources() throws Exception;
-}
\ No newline at end of file
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/XAResourceRecoveryInterface.java
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/extras/XAResourceRecoveryInterface.java 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/XAResourceRecoveryInterface.java 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,7 +0,0 @@
-public interface XAResourceRecovery {
- public XAResource getXAResource() throws SQLException;
-
- public boolean initialise(String p);
-
- public boolean hasMoreResources();
-};
\ No newline at end of file
Added: labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/inboundbridging.xml
===================================================================
--- labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/inboundbridging.xml (rev 0)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/inboundbridging.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -0,0 +1,12 @@
+<handler-chain>
+ <protocol-bindings>##SOAP11_HTTP</protocol-bindings>
+ <handler>
+ <handler-name>TransactionBridgeHandler</handler-name>
+ <handler-class>org.jboss.jbossts.txbridge.inbound.JaxWSTxInboundBridgeHandler</handler-class>
+ </handler>
+
+ <handler>
+ <handler-name>WebServicesTxContextHandler</handler-name>
+ <handler-class>com.arjuna.mw.wst11.service.JaxWSHeaderContextProcessor</handler-class>
+ </handler>
+</handler-chain>
\ No newline at end of file
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/jndiDatasource.xml
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/extras/jndiDatasource.xml 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/jndiDatasource.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><
-<properties>
- <entry key="DatabaseJNDIName">java:ExampleDS</entry>
- <entry key="UserName">username</entry>
- <entry key="Password">password</entry>
-</properties>
\ No newline at end of file
Added: labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/outboundbridging.xml
===================================================================
--- labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/outboundbridging.xml (rev 0)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/outboundbridging.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -0,0 +1,12 @@
+<handler-chain>
+ <protocol-bindings>##SOAP11_HTTP</protocol-bindings>
+ <handler>
+ <handler-name>TransactionBridgeHandler</handler-name>
+ <handler-class>org.jboss.jbossts.txbridge.outbound.JaxWSTxOutboundBridgeHandler</handler-class>
+ </handler>
+
+ <handler>
+ <handler-name>WebServicesTxContextHandler</handler-name>
+ <handler-class>com.arjuna.mw.wst11.client.JaxWSHeaderContextProcessor</handler-class>
+ </handler>
+</handler-chain>
\ No newline at end of file
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/recoveryModuleInterface.java
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/extras/recoveryModuleInterface.java 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/recoveryModuleInterface.java 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,14 +0,0 @@
-public interface RecoveryModule {
- /**
- * Called by the RecoveryManager at start up, and then
- * PERIODIC_RECOVERY_PERIOD seconds after the completion, for all
- * RecoveryModules of the second pass
- */
- public void periodicWorkFirstPass();
-
- /**
- * Called by the RecoveryManager RECOVERY_BACKOFF_PERIOD seconds after the
- * completion of the first pass
- */
- public void periodicWorkSecondPass();
-}
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/recoveryScanInterface.java
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/extras/recoveryScanInterface.java 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/recoveryScanInterface.java 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,3 +0,0 @@
-public interface RecoveryScan {
- public void completed();
-}
Added: labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/txbridgelogging.xml
===================================================================
--- labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/txbridgelogging.xml (rev 0)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/txbridgelogging.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -0,0 +1,3 @@
+<logger category="org.jboss.jbossts.txbridge">
+ <level name="ALL" />
+</logger>
\ No newline at end of file
Added: labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/verboselogging.xml
===================================================================
--- labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/verboselogging.xml (rev 0)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/verboselogging.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -0,0 +1,3 @@
+<logger category="com.arjuna">
+ <level name="ALL" />
+</logger>
\ No newline at end of file
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/xmlDatasource.xml
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/extras/xmlDatasource.xml 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/extras/xmlDatasource.xml 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><
-<properties>
- <entry key="DB_X_DatabaseUser">username</entry>
- <entry key="DB_X_DatabasePassword">password"</entry>
- <entry key="DB_X_DatabaseDynamicClass">DynamicClass</entry>
- <entry key="DB_X_DatabaseURL">theURL</entry>
-</properties>
\ No newline at end of file
Added: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/architecture.png
===================================================================
(Binary files differ)
Property changes on: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/architecture.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/bridgeinterposition.png
===================================================================
(Binary files differ)
Property changes on: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/bridgeinterposition.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/fig1-crashrecoveryarchitecture.gif
===================================================================
(Binary files differ)
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/fig2-resourceinitiatedrecovery.gif
===================================================================
(Binary files differ)
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/fig3-resource-recoverycoordinator.gif
===================================================================
(Binary files differ)
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/fig4-overview-of-poa.gif
===================================================================
(Binary files differ)
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/fig5-recoverymanager.gif
===================================================================
(Binary files differ)
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/fig6-resourceregistration.gif
===================================================================
(Binary files differ)
Deleted: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/icon.svg
===================================================================
--- labs/jbosstm/trunk/docs/failure_recovery_guide/en-US/images/icon.svg 2011-04-14 09:26:18 UTC (rev 36927)
+++ labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/icon.svg 2011-04-15 13:31:46 UTC (rev 36939)
@@ -1,3936 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:ns="http://ns.adobe.com/AdobeSVGViewerExtensions/3/"
- xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.0"
- width="32"
- height="32"
- id="svg3017"
- sodipodi:version="0.32"
- inkscape:version="0.44+devel"
- sodipodi:docname="book.svg"
- sodipodi:docbase="/home/andy/Desktop">
- <metadata
- id="metadata489">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <sodipodi:namedview
- inkscape:window-height="480"
- inkscape:window-width="858"
- inkscape:pageshadow="0"
- inkscape:pageopacity="0.0"
- guidetolerance="10.0"
- gridtolerance="10.0"
- objecttolerance="10.0"
- borderopacity="1.0"
- bordercolor="#666666"
- pagecolor="#ffffff"
- id="base"
- inkscape:zoom="1"
- inkscape:cx="16"
- inkscape:cy="15.944056"
- inkscape:window-x="0"
- inkscape:window-y="33"
- inkscape:current-layer="svg3017" />
- <defs
- id="defs3019">
- <linearGradient
- id="linearGradient2381">
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0"
- id="stop2383" />
- <stop
- style="stop-color:white;stop-opacity:0"
- offset="1"
- id="stop2385" />
- </linearGradient>
- <linearGradient
- x1="415.73831"
- y1="11.854"
- x2="418.13361"
- y2="18.8104"
- id="XMLID_1758_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.8362,0.5206,-1.1904,0.992,147.62,-30.9374)">
- <stop
- style="stop-color:#ccc;stop-opacity:1"
- offset="0"
- id="stop3903" />
- <stop
- style="stop-color:#f2f2f2;stop-opacity:1"
- offset="1"
- id="stop3905" />
- <a:midPointStop
- style="stop-color:#CCCCCC"
- offset="0" />
- <a:midPointStop
- style="stop-color:#CCCCCC"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#F2F2F2"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="500.70749"
- y1="-13.2441"
- x2="513.46442"
- y2="-2.1547"
- id="XMLID_1757_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
- <stop
- style="stop-color:#5387ba;stop-opacity:1"
- offset="0"
- id="stop3890" />
- <stop
- style="stop-color:#96bad6;stop-opacity:1"
- offset="1"
- id="stop3892" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#96BAD6"
- offset="1" />
- </linearGradient>
- <clipPath
- id="XMLID_1755_">
- <use
- id="use3874"
- x="0"
- y="0"
- width="744.09448"
- height="600"
- xlink:href="#XMLID_343_" />
- </clipPath>
- <linearGradient
- x1="505.62939"
- y1="-14.9526"
- x2="527.49402"
- y2="-0.7536"
- id="XMLID_1756_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="0"
- id="stop3877" />
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="0.51120001"
- id="stop3879" />
- <stop
- style="stop-color:#5387ba;stop-opacity:1"
- offset="0.64609998"
- id="stop3881" />
- <stop
- style="stop-color:#16336e;stop-opacity:1"
- offset="1"
- id="stop3883" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5112" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.6461" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#16336E"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="471.0806"
- y1="201.07761"
- x2="481.91711"
- y2="210.4977"
- id="XMLID_1754_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#6498c1;stop-opacity:1"
- offset="0.005618"
- id="stop3863" />
- <stop
- style="stop-color:#79a9cc;stop-opacity:1"
- offset="0.2332"
- id="stop3865" />
- <stop
- style="stop-color:#a4cde2;stop-opacity:1"
- offset="0.74049997"
- id="stop3867" />
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="1"
- id="stop3869" />
- <a:midPointStop
- style="stop-color:#6498C1"
- offset="5.618000e-003" />
- <a:midPointStop
- style="stop-color:#6498C1"
- offset="0.4438" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="516.57672"
- y1="-15.769"
- x2="516.57672"
- y2="0.84280002"
- id="XMLID_1753_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
- <stop
- style="stop-color:#b2b2b2;stop-opacity:1"
- offset="0"
- id="stop3851" />
- <stop
- style="stop-color:#f2f2f2;stop-opacity:1"
- offset="1"
- id="stop3853" />
- <a:midPointStop
- style="stop-color:#B2B2B2"
- offset="0" />
- <a:midPointStop
- style="stop-color:#B2B2B2"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#F2F2F2"
- offset="1" />
- </linearGradient>
- <clipPath
- id="XMLID_1751_">
- <use
- id="use3837"
- x="0"
- y="0"
- width="744.09448"
- height="600"
- xlink:href="#XMLID_338_" />
- </clipPath>
- <linearGradient
- x1="506.09909"
- y1="-11.5137"
- x2="527.99609"
- y2="2.7063999"
- id="XMLID_1752_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="0"
- id="stop3840" />
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="0.51120001"
- id="stop3842" />
- <stop
- style="stop-color:#5387ba;stop-opacity:1"
- offset="0.64609998"
- id="stop3844" />
- <stop
- style="stop-color:#16336e;stop-opacity:1"
- offset="1"
- id="stop3846" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5112" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.6461" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#16336E"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="468.2915"
- y1="204.7612"
- x2="479.39871"
- y2="214.4166"
- id="XMLID_1750_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#5387ba;stop-opacity:1"
- offset="0"
- id="stop3830" />
- <stop
- style="stop-color:#96bad6;stop-opacity:1"
- offset="1"
- id="stop3832" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#96BAD6"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="502.70749"
- y1="115.3013"
- x2="516.39001"
- y2="127.1953"
- id="XMLID_1749_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)">
- <stop
- style="stop-color:#5387ba;stop-opacity:1"
- offset="0"
- id="stop3818" />
- <stop
- style="stop-color:#96bad6;stop-opacity:1"
- offset="1"
- id="stop3820" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#96BAD6"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="501.0903"
- y1="-19.2544"
- x2="531.85413"
- y2="0.72390002"
- id="XMLID_1748_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="0"
- id="stop3803" />
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="0.51120001"
- id="stop3805" />
- <stop
- style="stop-color:#5387ba;stop-opacity:1"
- offset="0.64609998"
- id="stop3807" />
- <stop
- style="stop-color:#16336e;stop-opacity:1"
- offset="1"
- id="stop3809" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5112" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.6461" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#16336E"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="481.23969"
- y1="212.5742"
- x2="472.92981"
- y2="207.4967"
- id="XMLID_2275_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#f3403f;stop-opacity:1"
- offset="0"
- id="stop9947" />
- <stop
- style="stop-color:#d02a28;stop-opacity:1"
- offset="0.37889999"
- id="stop9949" />
- <stop
- style="stop-color:#b21714;stop-opacity:1"
- offset="0.77649999"
- id="stop9951" />
- <stop
- style="stop-color:#a6100c;stop-opacity:1"
- offset="1"
- id="stop9953" />
- <a:midPointStop
- style="stop-color:#F3403F"
- offset="0" />
- <a:midPointStop
- style="stop-color:#F3403F"
- offset="0.4213" />
- <a:midPointStop
- style="stop-color:#A6100C"
- offset="1" />
- </linearGradient>
- <clipPath
- id="XMLID_2273_">
- <use
- id="use9933"
- x="0"
- y="0"
- width="744.09448"
- height="600"
- xlink:href="#XMLID_960_" />
- </clipPath>
- <linearGradient
- x1="473.7681"
- y1="209.17529"
- x2="486.98099"
- y2="213.2001"
- id="XMLID_2274_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#f3403f;stop-opacity:1"
- offset="0"
- id="stop9936" />
- <stop
- style="stop-color:#d02a28;stop-opacity:1"
- offset="0.37889999"
- id="stop9938" />
- <stop
- style="stop-color:#b21714;stop-opacity:1"
- offset="0.77649999"
- id="stop9940" />
- <stop
- style="stop-color:#a6100c;stop-opacity:1"
- offset="1"
- id="stop9942" />
- <a:midPointStop
- style="stop-color:#F3403F"
- offset="0" />
- <a:midPointStop
- style="stop-color:#F3403F"
- offset="0.4213" />
- <a:midPointStop
- style="stop-color:#A6100C"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="478.21341"
- y1="-131.9297"
- x2="469.85818"
- y2="-140.28481"
- id="XMLID_2272_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.5592,0.829,-0.829,0.5592,101.3357,-104.791)">
- <stop
- style="stop-color:#f3403f;stop-opacity:1"
- offset="0"
- id="stop9917" />
- <stop
- style="stop-color:#d02a28;stop-opacity:1"
- offset="0.37889999"
- id="stop9919" />
- <stop
- style="stop-color:#b21714;stop-opacity:1"
- offset="0.77649999"
- id="stop9921" />
- <stop
- style="stop-color:#a6100c;stop-opacity:1"
- offset="1"
- id="stop9923" />
- <a:midPointStop
- style="stop-color:#F3403F"
- offset="0" />
- <a:midPointStop
- style="stop-color:#F3403F"
- offset="0.4213" />
- <a:midPointStop
- style="stop-color:#A6100C"
- offset="1" />
- </linearGradient>
- <marker
- refX="0"
- refY="0"
- orient="auto"
- style="overflow:visible"
- id="TriangleInM">
- <path
- d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
- transform="scale(-0.4,-0.4)"
- style="fill:#5c5c4f"
- id="path3197" />
- </marker>
- <linearGradient
- x1="200.7363"
- y1="100.4028"
- x2="211.99519"
- y2="89.143997"
- id="XMLID_3298_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#bfbfbf;stop-opacity:1"
- offset="0"
- id="stop20103" />
- <stop
- style="stop-color:#f2f2f2;stop-opacity:1"
- offset="1"
- id="stop20105" />
- <a:midPointStop
- offset="0"
- style="stop-color:#BFBFBF" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#BFBFBF" />
- <a:midPointStop
- offset="1"
- style="stop-color:#F2F2F2" />
- </linearGradient>
- <linearGradient
- x1="200.7363"
- y1="100.4028"
- x2="211.99519"
- y2="89.143997"
- id="linearGradient36592"
- xlink:href="#XMLID_3298_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
- <linearGradient
- x1="181.2925"
- y1="110.8481"
- x2="192.6369"
- y2="99.5037"
- id="XMLID_3297_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#e5e5e5;stop-opacity:1"
- offset="0"
- id="stop20096" />
- <stop
- style="stop-color:#ccc;stop-opacity:1"
- offset="1"
- id="stop20098" />
- <a:midPointStop
- offset="0"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="1"
- style="stop-color:#CCCCCC" />
- </linearGradient>
- <linearGradient
- x1="181.2925"
- y1="110.8481"
- x2="192.6369"
- y2="99.5037"
- id="linearGradient36595"
- xlink:href="#XMLID_3297_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
- <linearGradient
- x1="211.77589"
- y1="105.7749"
- x2="212.6619"
- y2="108.2092"
- id="XMLID_3296_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#0f6124;stop-opacity:1"
- offset="0"
- id="stop20087" />
- <stop
- style="stop-color:#219630;stop-opacity:1"
- offset="1"
- id="stop20089" />
- <a:midPointStop
- offset="0"
- style="stop-color:#0F6124" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#0F6124" />
- <a:midPointStop
- offset="1"
- style="stop-color:#219630" />
- </linearGradient>
- <linearGradient
- x1="211.77589"
- y1="105.7749"
- x2="212.6619"
- y2="108.2092"
- id="linearGradient36677"
- xlink:href="#XMLID_3296_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
- <linearGradient
- x1="208.9834"
- y1="116.8296"
- x2="200.0811"
- y2="96.834602"
- id="XMLID_3295_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#b2b2b2;stop-opacity:1"
- offset="0"
- id="stop20076" />
- <stop
- style="stop-color:#e5e5e5;stop-opacity:1"
- offset="0.5"
- id="stop20078" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="1"
- id="stop20080" />
- <a:midPointStop
- offset="0"
- style="stop-color:#B2B2B2" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#B2B2B2" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="1"
- style="stop-color:#FFFFFF" />
- </linearGradient>
- <linearGradient
- x1="208.9834"
- y1="116.8296"
- x2="200.0811"
- y2="96.834602"
- id="linearGradient36604"
- xlink:href="#XMLID_3295_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
- <linearGradient
- x1="195.5264"
- y1="97.911102"
- x2="213.5213"
- y2="115.9061"
- id="XMLID_3294_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#ccc;stop-opacity:1"
- offset="0"
- id="stop20069" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="1"
- id="stop20071" />
- <a:midPointStop
- offset="0"
- style="stop-color:#CCCCCC" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#CCCCCC" />
- <a:midPointStop
- offset="1"
- style="stop-color:#FFFFFF" />
- </linearGradient>
- <linearGradient
- x1="195.5264"
- y1="97.911102"
- x2="213.5213"
- y2="115.9061"
- id="linearGradient36607"
- xlink:href="#XMLID_3294_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
- <linearGradient
- x1="186.1938"
- y1="109.1343"
- x2="206.6881"
- y2="88.639999"
- id="XMLID_3293_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#b2b2b2;stop-opacity:1"
- offset="0"
- id="stop20056" />
- <stop
- style="stop-color:#e5e5e5;stop-opacity:1"
- offset="0.16850001"
- id="stop20058" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0.23029999"
- id="stop20060" />
- <stop
- style="stop-color:#e5e5e5;stop-opacity:1"
- offset="0.2809"
- id="stop20062" />
- <stop
- style="stop-color:#c2c2c2;stop-opacity:1"
- offset="0.5"
- id="stop20064" />
- <a:midPointStop
- offset="0"
- style="stop-color:#B2B2B2" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#B2B2B2" />
- <a:midPointStop
- offset="0.1685"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="0.2303"
- style="stop-color:#FFFFFF" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#FFFFFF" />
- <a:midPointStop
- offset="0.2809"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#C2C2C2" />
- </linearGradient>
- <linearGradient
- x1="186.1938"
- y1="109.1343"
- x2="206.6881"
- y2="88.639999"
- id="linearGradient36610"
- xlink:href="#XMLID_3293_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
- <linearGradient
- x1="184.8569"
- y1="112.2676"
- x2="211.94099"
- y2="89.541397"
- id="XMLID_3292_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#b2b2b2;stop-opacity:1"
- offset="0"
- id="stop20043" />
- <stop
- style="stop-color:#e5e5e5;stop-opacity:1"
- offset="0.16850001"
- id="stop20045" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0.23029999"
- id="stop20047" />
- <stop
- style="stop-color:#e5e5e5;stop-opacity:1"
- offset="0.2809"
- id="stop20049" />
- <stop
- style="stop-color:#ccc;stop-opacity:1"
- offset="1"
- id="stop20051" />
- <a:midPointStop
- offset="0"
- style="stop-color:#B2B2B2" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#B2B2B2" />
- <a:midPointStop
- offset="0.1685"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="0.2303"
- style="stop-color:#FFFFFF" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#FFFFFF" />
- <a:midPointStop
- offset="0.2809"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="1"
- style="stop-color:#CCCCCC" />
- </linearGradient>
- <linearGradient
- x1="184.8569"
- y1="112.2676"
- x2="211.94099"
- y2="89.541397"
- id="linearGradient36613"
- xlink:href="#XMLID_3292_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
- <marker
- refX="0"
- refY="0"
- orient="auto"
- style="overflow:visible"
- id="TriangleOutM">
- <path
- d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
- transform="scale(0.4,0.4)"
- style="fill:#5c5c4f;fill-rule:evenodd;stroke-width:1pt;marker-start:none"
- id="path3238" />
- </marker>
- <linearGradient
- x1="165.3"
- y1="99.5"
- x2="165.3"
- y2="115.9"
- id="XMLID_3457_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#999;stop-opacity:1"
- offset="0"
- id="stop8309" />
- <stop
- style="stop-color:#b2b2b2;stop-opacity:1"
- offset="0.30000001"
- id="stop8311" />
- <stop
- style="stop-color:#b2b2b2;stop-opacity:1"
- offset="1"
- id="stop8313" />
- <a:midPointstop
- offset="0"
- style="stop-color:#999999" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#999999" />
- <a:midPointstop
- offset="0.3"
- style="stop-color:#B2B2B2" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#B2B2B2" />
- <a:midPointstop
- offset="1"
- style="stop-color:#B2B2B2" />
- </linearGradient>
- <linearGradient
- x1="165.3"
- y1="99.5"
- x2="165.3"
- y2="115.9"
- id="lg1997"
- xlink:href="#XMLID_3457_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
- <linearGradient
- x1="175"
- y1="99.800003"
- x2="175"
- y2="112.5"
- id="XMLID_3456_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#737373;stop-opacity:1"
- offset="0"
- id="stop8300" />
- <stop
- style="stop-color:#191919;stop-opacity:1"
- offset="0.60000002"
- id="stop8302" />
- <stop
- style="stop-color:#191919;stop-opacity:1"
- offset="1"
- id="stop8304" />
- <a:midPointstop
- offset="0"
- style="stop-color:#737373" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#737373" />
- <a:midPointstop
- offset="0.6"
- style="stop-color:#191919" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#191919" />
- <a:midPointstop
- offset="1"
- style="stop-color:#191919" />
- </linearGradient>
- <linearGradient
- x1="175"
- y1="99.800003"
- x2="175"
- y2="112.5"
- id="lg2000"
- xlink:href="#XMLID_3456_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
- <linearGradient
- x1="168.8"
- y1="107.1"
- x2="164.5"
- y2="110"
- id="XMLID_3455_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#666;stop-opacity:1"
- offset="0"
- id="stop8291" />
- <stop
- style="stop-color:#191919;stop-opacity:1"
- offset="0.69999999"
- id="stop8293" />
- <stop
- style="stop-color:#191919;stop-opacity:1"
- offset="1"
- id="stop8295" />
- <a:midPointstop
- offset="0"
- style="stop-color:#666666" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#666666" />
- <a:midPointstop
- offset="0.7"
- style="stop-color:#191919" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#191919" />
- <a:midPointstop
- offset="1"
- style="stop-color:#191919" />
- </linearGradient>
- <linearGradient
- x1="168.8"
- y1="107.1"
- x2="164.5"
- y2="110"
- id="lg2003"
- xlink:href="#XMLID_3455_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
- <linearGradient
- id="lg63694">
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0"
- id="stop63696" />
- <stop
- style="stop-color:white;stop-opacity:0"
- offset="1"
- id="stop63698" />
- </linearGradient>
- <linearGradient
- x1="458"
- y1="483"
- x2="465.20001"
- y2="271.39999"
- id="lg2006"
- xlink:href="#lg63694"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(6.3e-2,0,0,6.3e-2,-1.3,-9.8)" />
- <linearGradient
- x1="176.3"
- y1="110.1"
- x2="158.7"
- y2="105"
- id="XMLID_3453_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#666;stop-opacity:1"
- offset="0"
- id="stop8271" />
- <stop
- style="stop-color:#737373;stop-opacity:1"
- offset="0.2"
- id="stop8273" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="1"
- id="stop8275" />
- <a:midPointstop
- offset="0"
- style="stop-color:#666666" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#666666" />
- <a:midPointstop
- offset="0.2"
- style="stop-color:#737373" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#737373" />
- <a:midPointstop
- offset="1"
- style="stop-color:#FFFFFF" />
- </linearGradient>
- <linearGradient
- x1="176.3"
- y1="110.1"
- x2="158.7"
- y2="105"
- id="lg2009"
- xlink:href="#XMLID_3453_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
- <linearGradient
- x1="173.60001"
- y1="118.9"
- x2="172.8"
- y2="128.2"
- id="XMLID_3449_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#ecb300;stop-opacity:1"
- offset="0"
- id="stop8232" />
- <stop
- style="stop-color:#fff95e;stop-opacity:1"
- offset="0.60000002"
- id="stop8234" />
- <stop
- style="stop-color:#ecd600;stop-opacity:1"
- offset="1"
- id="stop8236" />
- <a:midPointstop
- offset="0"
- style="stop-color:#ECB300" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#ECB300" />
- <a:midPointstop
- offset="0.6"
- style="stop-color:#FFF95E" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#FFF95E" />
- <a:midPointstop
- offset="1"
- style="stop-color:#ECD600" />
- </linearGradient>
- <linearGradient
- x1="173.60001"
- y1="118.9"
- x2="172.8"
- y2="128.2"
- id="lg2016"
- xlink:href="#XMLID_3449_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
- <radialGradient
- cx="284.60001"
- cy="172.60001"
- r="6.5"
- fx="284.60001"
- fy="172.60001"
- id="XMLID_3448_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.4,0,0,1.4,-237.3,-126.8)">
- <stop
- style="stop-color:#ecb300;stop-opacity:1"
- offset="0"
- id="stop8219" />
- <stop
- style="stop-color:#ecb300;stop-opacity:1"
- offset="0.30000001"
- id="stop8221" />
- <stop
- style="stop-color:#c96b00;stop-opacity:1"
- offset="0.89999998"
- id="stop8223" />
- <stop
- style="stop-color:#9a5500;stop-opacity:1"
- offset="1"
- id="stop8225" />
- <a:midPointstop
- offset="0"
- style="stop-color:#ECB300" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#ECB300" />
- <a:midPointstop
- offset="0.3"
- style="stop-color:#ECB300" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#ECB300" />
- <a:midPointstop
- offset="0.9"
- style="stop-color:#C96B00" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#C96B00" />
- <a:midPointstop
- offset="1"
- style="stop-color:#9A5500" />
- </radialGradient>
- <radialGradient
- cx="284.60001"
- cy="172.60001"
- r="6.5"
- fx="284.60001"
- fy="172.60001"
- id="rg2020"
- xlink:href="#XMLID_3448_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.513992,0,0,2.347576,-689.1621,-378.5717)" />
- <linearGradient
- x1="158.10001"
- y1="123"
- x2="164.2"
- y2="126.6"
- id="XMLID_3447_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#ecd600;stop-opacity:1"
- offset="0"
- id="stop8204" />
- <stop
- style="stop-color:#ffffb3;stop-opacity:1"
- offset="0.30000001"
- id="stop8206" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="1"
- id="stop8208" />
- <a:midPointstop
- offset="0"
- style="stop-color:#ECD600" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#ECD600" />
- <a:midPointstop
- offset="0.3"
- style="stop-color:#FFFFB3" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#FFFFB3" />
- <a:midPointstop
- offset="1"
- style="stop-color:#FFFFFF" />
- </linearGradient>
- <linearGradient
- x1="158.10001"
- y1="123"
- x2="164.2"
- y2="126.6"
- id="lg2026"
- xlink:href="#XMLID_3447_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
- <radialGradient
- cx="280.89999"
- cy="163.7"
- r="10.1"
- fx="280.89999"
- fy="163.7"
- id="XMLID_3446_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.4,0,0,1.4,-237.3,-126.8)">
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0"
- id="stop8197" />
- <stop
- style="stop-color:#fff95e;stop-opacity:1"
- offset="1"
- id="stop8199" />
- <a:midPointstop
- offset="0"
- style="stop-color:#FFFFFF" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#FFFFFF" />
- <a:midPointstop
- offset="1"
- style="stop-color:#FFF95E" />
- </radialGradient>
- <radialGradient
- cx="280.89999"
- cy="163.7"
- r="10.1"
- fx="280.89999"
- fy="163.7"
- id="rg2029"
- xlink:href="#XMLID_3446_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.7,0,0,1.7,-457.5,-266.8)" />
- <linearGradient
- x1="156.5"
- y1="122.7"
- x2="180.10001"
- y2="122.7"
- id="XMLID_3445_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#ecb300;stop-opacity:1"
- offset="0"
- id="stop8184" />
- <stop
- style="stop-color:#ffe900;stop-opacity:1"
- offset="0.2"
- id="stop8186" />
- <stop
- style="stop-color:#ffffb3;stop-opacity:1"
- offset="0.30000001"
- id="stop8188" />
- <stop
- style="stop-color:#ffe900;stop-opacity:1"
- offset="0.40000001"
- id="stop8190" />
- <stop
- style="stop-color:#d68100;stop-opacity:1"
- offset="1"
- id="stop8192" />
- <a:midPointstop
- offset="0"
- style="stop-color:#ECB300" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#ECB300" />
- <a:midPointstop
- offset="0.2"
- style="stop-color:#FFE900" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#FFE900" />
- <a:midPointstop
- offset="0.3"
- style="stop-color:#FFFFB3" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#FFFFB3" />
- <a:midPointstop
- offset="0.4"
- style="stop-color:#FFE900" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#FFE900" />
- <a:midPointstop
- offset="1"
- style="stop-color:#D68100" />
- </linearGradient>
- <linearGradient
- x1="156.5"
- y1="122.7"
- x2="180.10001"
- y2="122.7"
- id="lg2032"
- xlink:href="#XMLID_3445_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
- <linearGradient
- x1="156.39999"
- y1="115.4"
- x2="180.10001"
- y2="115.4"
- id="XMLID_3444_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#ecb300;stop-opacity:1"
- offset="0"
- id="stop8171" />
- <stop
- style="stop-color:#ffe900;stop-opacity:1"
- offset="0.2"
- id="stop8173" />
- <stop
- style="stop-color:#ffffb3;stop-opacity:1"
- offset="0.30000001"
- id="stop8175" />
- <stop
- style="stop-color:#ffe900;stop-opacity:1"
- offset="0.40000001"
- id="stop8177" />
- <stop
- style="stop-color:#d68100;stop-opacity:1"
- offset="1"
- id="stop8179" />
- <a:midPointstop
- offset="0"
- style="stop-color:#ECB300" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#ECB300" />
- <a:midPointstop
- offset="0.2"
- style="stop-color:#FFE900" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#FFE900" />
- <a:midPointstop
- offset="0.3"
- style="stop-color:#FFFFB3" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#FFFFB3" />
- <a:midPointstop
- offset="0.4"
- style="stop-color:#FFE900" />
- <a:midPointstop
- offset="0.5"
- style="stop-color:#FFE900" />
- <a:midPointstop
- offset="1"
- style="stop-color:#D68100" />
- </linearGradient>
- <linearGradient
- x1="156.39999"
- y1="115.4"
- x2="180.10001"
- y2="115.4"
- id="lg2035"
- xlink:href="#XMLID_3444_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
- <linearGradient
- x1="379.70001"
- y1="167.89999"
- x2="383.89999"
- y2="172.89999"
- id="lg4286_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0"
- id="s16159" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0.1"
- id="s16161" />
- <stop
- style="stop-color:#737373;stop-opacity:1"
- offset="1"
- id="s16163" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="0" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="0.1" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#737373"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="379.60001"
- y1="167.8"
- x2="383.79999"
- y2="172"
- id="lg6416"
- xlink:href="#lg4286_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.622156,0.623859,-0.623859,2.62182,-882.9706,-673.7921)" />
- <linearGradient
- x1="384.20001"
- y1="169.8"
- x2="384.79999"
- y2="170.39999"
- id="lg4285_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
- <stop
- style="stop-color:#737373;stop-opacity:1"
- offset="0"
- id="s16152" />
- <stop
- style="stop-color:#d9d9d9;stop-opacity:1"
- offset="1"
- id="s16154" />
- <ns:midPointStop
- style="stop-color:#737373"
- offset="0" />
- <ns:midPointStop
- style="stop-color:#737373"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#D9D9D9"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="384.20001"
- y1="169.8"
- x2="384.79999"
- y2="170.39999"
- id="lg6453"
- xlink:href="#lg4285_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.6,0.6,-0.6,2.6,-883,-673.8)" />
- <linearGradient
- x1="380.5"
- y1="172.60001"
- x2="382.79999"
- y2="173.7"
- id="lg4284_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
- <stop
- style="stop-color:gray;stop-opacity:1"
- offset="0"
- id="s16145" />
- <stop
- style="stop-color:#e5e5e5;stop-opacity:1"
- offset="1"
- id="s16147" />
- <ns:midPointStop
- style="stop-color:#808080"
- offset="0" />
- <ns:midPointStop
- style="stop-color:#808080"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#E5E5E5"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="380.5"
- y1="172.60001"
- x2="382.79999"
- y2="173.7"
- id="lg6456"
- xlink:href="#lg4284_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.6,0.6,-0.6,2.6,-883,-673.8)" />
- <radialGradient
- cx="347.29999"
- cy="244.5"
- r="5.1999998"
- fx="347.29999"
- fy="244.5"
- id="lg4282_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
- <stop
- style="stop-color:#333;stop-opacity:1"
- offset="0"
- id="s16135" />
- <stop
- style="stop-color:#999;stop-opacity:1"
- offset="1"
- id="s16137" />
- <ns:midPointStop
- style="stop-color:#333333"
- offset="0" />
- <ns:midPointStop
- style="stop-color:#333333"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#999999"
- offset="1" />
- </radialGradient>
- <linearGradient
- x1="310.39999"
- y1="397.70001"
- x2="310.89999"
- y2="399.5"
- id="lg4280_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
- <stop
- style="stop-color:#ffcd00;stop-opacity:1"
- offset="0"
- id="s16111" />
- <stop
- style="stop-color:#ffffb3;stop-opacity:1"
- offset="0.60000002"
- id="s16113" />
- <stop
- style="stop-color:#ffffb3;stop-opacity:1"
- offset="1"
- id="s16115" />
- <ns:midPointStop
- style="stop-color:#FFCD00"
- offset="0" />
- <ns:midPointStop
- style="stop-color:#FFCD00"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FFFFB3"
- offset="0.6" />
- <ns:midPointStop
- style="stop-color:#FFFFB3"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FFFFB3"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="310.39999"
- y1="397.70001"
- x2="310.89999"
- y2="399.5"
- id="lg6467"
- xlink:href="#lg4280_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
- <linearGradient
- x1="310.89999"
- y1="395.79999"
- x2="313.29999"
- y2="403.10001"
- id="lg4279_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
- <stop
- style="stop-color:#ffffb3;stop-opacity:1"
- offset="0"
- id="s16100" />
- <stop
- style="stop-color:#ffffb3;stop-opacity:1"
- offset="0.40000001"
- id="s16102" />
- <stop
- style="stop-color:#ffcd00;stop-opacity:1"
- offset="0.89999998"
- id="s16104" />
- <stop
- style="stop-color:#ffcd00;stop-opacity:1"
- offset="1"
- id="s16106" />
- <ns:midPointStop
- style="stop-color:#FFFFB3"
- offset="0" />
- <ns:midPointStop
- style="stop-color:#FFFFB3"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FFFFB3"
- offset="0.4" />
- <ns:midPointStop
- style="stop-color:#FFFFB3"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FFCD00"
- offset="0.9" />
- <ns:midPointStop
- style="stop-color:#FFCD00"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FFCD00"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="310.89999"
- y1="395.79999"
- x2="313.29999"
- y2="403.10001"
- id="lg6465"
- xlink:href="#lg4279_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
- <linearGradient
- x1="307.79999"
- y1="395.20001"
- x2="313.79999"
- y2="413.60001"
- id="lg4278_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
- <stop
- style="stop-color:#ffffb3;stop-opacity:1"
- offset="0"
- id="s16091" />
- <stop
- style="stop-color:#fcd72f;stop-opacity:1"
- offset="0.40000001"
- id="s16093" />
- <stop
- style="stop-color:#ffcd00;stop-opacity:1"
- offset="1"
- id="s16095" />
- <ns:midPointStop
- style="stop-color:#FFFFB3"
- offset="0" />
- <ns:midPointStop
- style="stop-color:#FFFFB3"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FCD72F"
- offset="0.4" />
- <ns:midPointStop
- style="stop-color:#FCD72F"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FFCD00"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="306.5"
- y1="393"
- x2="309"
- y2="404"
- id="lg6400"
- xlink:href="#lg4278_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
- <linearGradient
- x1="352.10001"
- y1="253.60001"
- x2="348.5"
- y2="237.8"
- id="lg4276_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
- <stop
- style="stop-color:#ffff87;stop-opacity:1"
- offset="0"
- id="s16077" />
- <stop
- style="stop-color:#ffad00;stop-opacity:1"
- offset="1"
- id="s16079" />
- <ns:midPointStop
- style="stop-color:#FFFF87"
- offset="0" />
- <ns:midPointStop
- style="stop-color:#FFFF87"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FFAD00"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="335.60001"
- y1="354.79999"
- x2="337.89999"
- y2="354.79999"
- id="lg4275_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
- <stop
- style="stop-color:#d9d9d9;stop-opacity:1"
- offset="0"
- id="s16057" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0.80000001"
- id="s16059" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="1"
- id="s16061" />
- <ns:midPointStop
- style="stop-color:#D9D9D9"
- offset="0" />
- <ns:midPointStop
- style="stop-color:#D9D9D9"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="0.8" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="335.60001"
- y1="354.79999"
- x2="337.89999"
- y2="354.79999"
- id="lg6463"
- xlink:href="#lg4275_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
- <linearGradient
- x1="337.39999"
- y1="353.10001"
- x2="339.39999"
- y2="357.10001"
- id="lg4274_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0"
- id="s16048" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0.1"
- id="s16050" />
- <stop
- style="stop-color:#ccc;stop-opacity:1"
- offset="1"
- id="s16052" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="0" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="0.1" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#CCCCCC"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="337.39999"
- y1="353.10001"
- x2="339.39999"
- y2="357.10001"
- id="lg6461"
- xlink:href="#lg4274_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
- <linearGradient
- x1="334.39999"
- y1="355.5"
- x2="335.5"
- y2="356.79999"
- id="lg4273_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0"
- id="s16041" />
- <stop
- style="stop-color:#ccc;stop-opacity:1"
- offset="1"
- id="s16043" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="5.6e-003" />
- <ns:midPointStop
- style="stop-color:#FFFFFF"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#CCCCCC"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="334.39999"
- y1="355.5"
- x2="335.5"
- y2="356.79999"
- id="lg6381"
- xlink:href="#lg4273_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
- <linearGradient
- x1="348.39999"
- y1="247.39999"
- x2="354.10001"
- y2="242"
- id="lg4271_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
- <stop
- style="stop-color:#f2f2f2;stop-opacity:1"
- offset="0"
- id="s16025" />
- <stop
- style="stop-color:#9e9e9e;stop-opacity:1"
- offset="0.40000001"
- id="s16027" />
- <stop
- style="stop-color:black;stop-opacity:1"
- offset="1"
- id="s16029" />
- <ns:midPointStop
- style="stop-color:#F2F2F2"
- offset="0" />
- <ns:midPointStop
- style="stop-color:#F2F2F2"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#000000"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="351.29999"
- y1="257.29999"
- x2="346.29999"
- y2="235.5"
- id="lg4270_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#ffff87;stop-opacity:1"
- offset="0"
- id="s16007" />
- <stop
- style="stop-color:#ffad00;stop-opacity:1"
- offset="1"
- id="s16009" />
- <ns:midPointStop
- style="stop-color:#FFFF87"
- offset="0" />
- <ns:midPointStop
- style="stop-color:#FFFF87"
- offset="0.5" />
- <ns:midPointStop
- style="stop-color:#FFAD00"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="351.29999"
- y1="257.29999"
- x2="346.29999"
- y2="235.5"
- id="lg6459"
- xlink:href="#lg4270_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)" />
- <linearGradient
- x1="43.799999"
- y1="32.5"
- x2="63.299999"
- y2="66.400002"
- id="XMLID_2708_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0"
- id="stop75318" />
- <stop
- style="stop-color:#fffcea;stop-opacity:1"
- offset="1"
- id="stop75320" />
- <a:midPointStop
- style="stop-color:#FFFFFF"
- offset="0" />
- <a:midPointStop
- style="stop-color:#FFFFFF"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#FFFCEA"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="43.799999"
- y1="32.5"
- x2="63.299999"
- y2="66.400002"
- id="lg1907"
- xlink:href="#XMLID_2708_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-29,-22.6)" />
- <linearGradient
- x1="52.5"
- y1="40.400002"
- x2="58.200001"
- y2="64"
- id="XMLID_2707_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#ffdea0;stop-opacity:1"
- offset="0"
- id="stop75305" />
- <stop
- style="stop-color:#ffd89e;stop-opacity:1"
- offset="0.30000001"
- id="stop75307" />
- <stop
- style="stop-color:#ffd79e;stop-opacity:1"
- offset="0.30000001"
- id="stop75309" />
- <stop
- style="stop-color:#dbaf6d;stop-opacity:1"
- offset="0.69999999"
- id="stop75311" />
- <stop
- style="stop-color:#6f4c24;stop-opacity:1"
- offset="1"
- id="stop75313" />
- <a:midPointStop
- style="stop-color:#FFDEA0"
- offset="0" />
- <a:midPointStop
- style="stop-color:#FFDEA0"
- offset="0.6" />
- <a:midPointStop
- style="stop-color:#FFD79E"
- offset="0.3" />
- <a:midPointStop
- style="stop-color:#FFD79E"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#DBAF6D"
- offset="0.7" />
- <a:midPointStop
- style="stop-color:#DBAF6D"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#6F4C24"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="52.5"
- y1="40.400002"
- x2="58.200001"
- y2="64"
- id="lg1910"
- xlink:href="#XMLID_2707_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-29,-22.6)" />
- <linearGradient
- x1="58"
- y1="73.199997"
- x2="44.5"
- y2="19"
- id="XMLID_2704_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-29,-22.6)">
- <stop
- style="stop-color:#d4a96c;stop-opacity:1"
- offset="0.5"
- id="stop75284" />
- <stop
- style="stop-color:#dcb273;stop-opacity:1"
- offset="0.60000002"
- id="stop75286" />
- <stop
- style="stop-color:#f0ca87;stop-opacity:1"
- offset="0.80000001"
- id="stop75288" />
- <stop
- style="stop-color:#ffdc96;stop-opacity:1"
- offset="0.69999999"
- id="stop75290" />
- <stop
- style="stop-color:#c18a42;stop-opacity:1"
- offset="1"
- id="stop75292" />
- <a:midPointStop
- style="stop-color:#D4A96C"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#D4A96C"
- offset="0.6" />
- <a:midPointStop
- style="stop-color:#FFDC96"
- offset="0.7" />
- <a:midPointStop
- style="stop-color:#FFDC96"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#C18A42"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="53.700001"
- y1="32"
- x2="53.700001"
- y2="64.599998"
- id="XMLID_2703_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#e5c9b0;stop-opacity:1"
- offset="0"
- id="stop75268" />
- <stop
- style="stop-color:#e5c9b0;stop-opacity:1"
- offset="0.40000001"
- id="stop75270" />
- <stop
- style="stop-color:#c0aa94;stop-opacity:1"
- offset="1"
- id="stop75272" />
- <a:midPointStop
- style="stop-color:#E5C9B0"
- offset="0" />
- <a:midPointStop
- style="stop-color:#E5C9B0"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#E5C9B0"
- offset="0.4" />
- <a:midPointStop
- style="stop-color:#E5C9B0"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#C0AA94"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="53.700001"
- y1="32"
- x2="53.700001"
- y2="64.599998"
- id="lg1916"
- xlink:href="#XMLID_2703_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-29,-22.6)" />
- <linearGradient
- x1="224.31"
- y1="19.450001"
- x2="214.33"
- y2="11.46"
- id="XMLID_419_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#404040;stop-opacity:1"
- offset="0"
- id="s1903" />
- <stop
- style="stop-color:#6d6d6d;stop-opacity:1"
- offset="0.33000001"
- id="s1905" />
- <stop
- style="stop-color:#e9e9e9;stop-opacity:1"
- offset="1"
- id="s1907" />
- <a:midPointStop
- offset="0"
- style="stop-color:#404040" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#404040" />
- <a:midPointStop
- offset="0.33"
- style="stop-color:#6D6D6D" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#6D6D6D" />
- <a:midPointStop
- offset="1"
- style="stop-color:#E9E9E9" />
- </linearGradient>
- <linearGradient
- x1="221.84"
- y1="32.779999"
- x2="212.2"
- y2="20.27"
- id="lg1988"
- xlink:href="#XMLID_419_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
- <linearGradient
- x1="228.35001"
- y1="33.279999"
- x2="215.42999"
- y2="33.279999"
- id="lg1900"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0"
- id="s1902" />
- <stop
- style="stop-color:white;stop-opacity:0"
- offset="1"
- id="s1906" />
- <a:midPointStop
- style="stop-color:#575757"
- offset="0" />
- <a:midPointStop
- style="stop-color:#575757"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#6D6D6D"
- offset="0.33" />
- <a:midPointStop
- style="stop-color:#6D6D6D"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#D3D3D3"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="234.81"
- y1="33.279999"
- x2="228.27"
- y2="33.279999"
- id="lg1908"
- xlink:href="#lg1900"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
- <linearGradient
- x1="228.35001"
- y1="33.279999"
- x2="215.42999"
- y2="33.279999"
- id="XMLID_416_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#575757;stop-opacity:1"
- offset="0"
- id="s1874" />
- <stop
- style="stop-color:#6d6d6d;stop-opacity:1"
- offset="0.33000001"
- id="s1876" />
- <stop
- style="stop-color:#d3d3d3;stop-opacity:1"
- offset="1"
- id="s1878" />
- <a:midPointStop
- offset="0"
- style="stop-color:#575757" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#575757" />
- <a:midPointStop
- offset="0.33"
- style="stop-color:#6D6D6D" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#6D6D6D" />
- <a:midPointStop
- offset="1"
- style="stop-color:#D3D3D3" />
- </linearGradient>
- <linearGradient
- x1="228.35001"
- y1="33.279999"
- x2="215.42999"
- y2="33.279999"
- id="lg1991"
- xlink:href="#XMLID_416_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
- <radialGradient
- cx="603.19"
- cy="230.77"
- r="1.67"
- fx="603.19"
- fy="230.77"
- id="x5010_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1,0,0,1.1,-54.33,-75.4)">
- <stop
- style="stop-color:#c9ffc9;stop-opacity:1"
- offset="0"
- id="stop29201" />
- <stop
- style="stop-color:#23a11f;stop-opacity:1"
- offset="1"
- id="stop29203" />
- <a:midPointStop
- offset="0"
- style="stop-color:#C9FFC9" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#C9FFC9" />
- <a:midPointStop
- offset="1"
- style="stop-color:#23A11F" />
- </radialGradient>
- <radialGradient
- cx="603.19"
- cy="230.77"
- r="1.67"
- fx="603.19"
- fy="230.77"
- id="radialGradient5711"
- xlink:href="#x5010_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.23,0,0,1.23,-709.93,-245.02)" />
- <linearGradient
- x1="592.31"
- y1="162.60001"
- x2="609.32001"
- y2="145.59"
- id="lg5722"
- xlink:href="#x5003_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
- <linearGradient
- x1="601.48999"
- y1="170.16"
- x2="613.84003"
- y2="170.16"
- id="x5002_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#d9d9d9;stop-opacity:1"
- offset="0"
- id="stop29134" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0.2"
- id="stop29136" />
- <stop
- style="stop-color:#999;stop-opacity:1"
- offset="1"
- id="stop29138" />
- <a:midPointStop
- offset="0"
- style="stop-color:#D9D9D9" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#D9D9D9" />
- <a:midPointStop
- offset="0.20"
- style="stop-color:#FFFFFF" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#FFFFFF" />
- <a:midPointStop
- offset="1"
- style="stop-color:#999999" />
- </linearGradient>
- <linearGradient
- x1="601.48999"
- y1="170.16"
- x2="613.84003"
- y2="170.16"
- id="lg5725"
- xlink:href="#x5002_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
- <linearGradient
- x1="592.20001"
- y1="156.45"
- x2="609.98999"
- y2="174.23"
- id="x5004_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)">
- <stop
- style="stop-color:#d9d9d9;stop-opacity:1"
- offset="0"
- id="stop29157" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="1"
- id="stop29159" />
- <a:midPointStop
- offset="0"
- style="stop-color:#D9D9D9" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#D9D9D9" />
- <a:midPointStop
- offset="1"
- style="stop-color:#FFFFFF" />
- </linearGradient>
- <linearGradient
- x1="592.20001"
- y1="156.45"
- x2="609.98999"
- y2="174.23"
- id="lg5728"
- xlink:href="#x5004_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
- <linearGradient
- x1="592.31"
- y1="162.60001"
- x2="609.32001"
- y2="145.59"
- id="x5003_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#f2f2f2;stop-opacity:1"
- offset="0"
- id="stop29143" />
- <stop
- style="stop-color:#e5e5e5;stop-opacity:1"
- offset="1"
- id="stop29145" />
- <a:midPointStop
- offset="0"
- style="stop-color:#F2F2F2" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#F2F2F2" />
- <a:midPointStop
- offset="1"
- style="stop-color:#E5E5E5" />
- </linearGradient>
- <linearGradient
- x1="592.31"
- y1="162.60001"
- x2="609.32001"
- y2="145.59"
- id="lg5732"
- xlink:href="#x5003_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
- <linearGradient
- x1="592.20001"
- y1="156.45"
- x2="609.98999"
- y2="174.24001"
- id="x5000_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)">
- <stop
- style="stop-color:#d9d9d9;stop-opacity:1"
- offset="0"
- id="stop29124" />
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="1"
- id="stop29126" />
- <a:midPointStop
- offset="0"
- style="stop-color:#D9D9D9" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#D9D9D9" />
- <a:midPointStop
- offset="1"
- style="stop-color:#FFFFFF" />
- </linearGradient>
- <linearGradient
- x1="592.20001"
- y1="156.45"
- x2="609.98999"
- y2="174.24001"
- id="lg5735"
- xlink:href="#x5000_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
- <linearGradient
- x1="308.54999"
- y1="149.89999"
- x2="299.72"
- y2="148.83"
- id="XMLID_2433_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#d6d6d6;stop-opacity:1"
- offset="0"
- id="71615" />
- <stop
- style="stop-color:#a5a5a5;stop-opacity:1"
- offset="1"
- id="71617" />
- <a:midPointStop
- offset="0"
- style="stop-color:#D6D6D6" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#D6D6D6" />
- <a:midPointStop
- offset="1"
- style="stop-color:#A5A5A5" />
- </linearGradient>
- <linearGradient
- x1="308.54999"
- y1="149.89999"
- x2="299.72"
- y2="148.83"
- id="lg1952"
- xlink:href="#XMLID_2433_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
- <radialGradient
- cx="307.39999"
- cy="121"
- r="23.35"
- fx="307.39999"
- fy="121"
- id="XMLID_2432_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.98,0,0,0.98,2.88,2.75)">
- <stop
- style="stop-color:#d2d2d2;stop-opacity:1"
- offset="0.19"
- id="71592" />
- <stop
- style="stop-color:#cfcfcf;stop-opacity:1"
- offset="0.44999999"
- id="71594" />
- <stop
- style="stop-color:#c7c7c7;stop-opacity:1"
- offset="0.60000002"
- id="71596" />
- <stop
- style="stop-color:#b9b9b9;stop-opacity:1"
- offset="0.74000001"
- id="71598" />
- <stop
- style="stop-color:#a4a4a4;stop-opacity:1"
- offset="0.86000001"
- id="71600" />
- <stop
- style="stop-color:#8a8a8a;stop-opacity:1"
- offset="0.95999998"
- id="71602" />
- <stop
- style="stop-color:gray;stop-opacity:1"
- offset="1"
- id="71604" />
- <a:midPointStop
- offset="0.19"
- style="stop-color:#D2D2D2" />
- <a:midPointStop
- offset="0.8"
- style="stop-color:#D2D2D2" />
- <a:midPointStop
- offset="1"
- style="stop-color:#808080" />
- </radialGradient>
- <radialGradient
- cx="307.39999"
- cy="121"
- r="23.35"
- fx="307.39999"
- fy="121"
- id="radialGradient2331"
- xlink:href="#XMLID_2432_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-276.62,-121.54)" />
- <linearGradient
- x1="294.13"
- y1="127.07"
- x2="294.13"
- y2="142.2"
- id="XMLID_2430_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#b5d8ff;stop-opacity:1"
- offset="0"
- id="71582" />
- <stop
- style="stop-color:black;stop-opacity:1"
- offset="1"
- id="71584" />
- <a:midPointStop
- offset="0"
- style="stop-color:#B5D8FF" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#B5D8FF" />
- <a:midPointStop
- offset="1"
- style="stop-color:#000000" />
- </linearGradient>
- <linearGradient
- x1="294.13"
- y1="127.07"
- x2="294.13"
- y2="142.2"
- id="lg2820"
- xlink:href="#XMLID_2430_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
- <linearGradient
- x1="279.10999"
- y1="148.03"
- x2="309.16"
- y2="148.03"
- id="XMLID_2429_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#e1e1e1;stop-opacity:1"
- offset="0"
- id="71564" />
- <stop
- style="stop-color:#e1e1e1;stop-opacity:1"
- offset="0.25"
- id="71566" />
- <stop
- style="stop-color:#a5a5a5;stop-opacity:1"
- offset="0.44"
- id="71568" />
- <stop
- style="stop-color:#a5a5a5;stop-opacity:1"
- offset="1"
- id="71570" />
- <a:midPointStop
- offset="0"
- style="stop-color:#E1E1E1" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#E1E1E1" />
- <a:midPointStop
- offset="0.25"
- style="stop-color:#E1E1E1" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#E1E1E1" />
- <a:midPointStop
- offset="0.44"
- style="stop-color:#A5A5A5" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#A5A5A5" />
- <a:midPointStop
- offset="1"
- style="stop-color:#A5A5A5" />
- </linearGradient>
- <linearGradient
- x1="279.10999"
- y1="148.03"
- x2="309.16"
- y2="148.03"
- id="lg2818"
- xlink:href="#XMLID_2429_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
- <radialGradient
- cx="622.34302"
- cy="14.449"
- r="26.496"
- fx="622.34302"
- fy="14.449"
- id="lg3499_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.851,0,0,0.849,69.297,51.658)">
- <stop
- style="stop-color:#23468e;stop-opacity:1"
- offset="0"
- id="stop10972" />
- <stop
- style="stop-color:#012859;stop-opacity:1"
- offset="1"
- id="stop10974" />
- <a:midPointStop
- offset="0"
- style="stop-color:#23468E" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#23468E" />
- <a:midPointStop
- offset="1"
- style="stop-color:#012859" />
- </radialGradient>
- <radialGradient
- cx="622.34302"
- cy="14.449"
- r="26.496"
- fx="622.34302"
- fy="14.449"
- id="rg5791"
- xlink:href="#lg3499_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.858,0,0,0.857,-511.7,9.02)" />
- <linearGradient
- x1="616.112"
- y1="76.247002"
- x2="588.14099"
- y2="60.742001"
- id="lg3497_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#01326e;stop-opacity:1"
- offset="0"
- id="stop10962" />
- <stop
- style="stop-color:#012859;stop-opacity:1"
- offset="1"
- id="stop10964" />
- <a:midPointStop
- offset="0"
- style="stop-color:#01326E" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#01326E" />
- <a:midPointStop
- offset="1"
- style="stop-color:#012859" />
- </linearGradient>
- <linearGradient
- x1="617.698"
- y1="82.445999"
- x2="585.95203"
- y2="54.848999"
- id="lg3496_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#e5e5e5;stop-opacity:1"
- offset="0"
- id="stop10950" />
- <stop
- style="stop-color:#ccc;stop-opacity:1"
- offset="1"
- id="stop10952" />
- <a:midPointStop
- offset="0"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#E5E5E5" />
- <a:midPointStop
- offset="1"
- style="stop-color:#CCCCCC" />
- </linearGradient>
- <linearGradient
- x1="617.698"
- y1="82.445999"
- x2="585.95203"
- y2="54.848999"
- id="lg5794"
- xlink:href="#lg3496_"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- x1="601.39001"
- y1="55.341"
- x2="588.29199"
- y2="71.515999"
- id="lg3495_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#d9d9d9;stop-opacity:1"
- offset="0"
- id="stop10941" />
- <stop
- style="stop-color:#f2f2f2;stop-opacity:1"
- offset="0.52200001"
- id="stop10943" />
- <stop
- style="stop-color:#ccc;stop-opacity:1"
- offset="1"
- id="stop10945" />
- <a:midPointStop
- offset="0"
- style="stop-color:#D9D9D9" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#D9D9D9" />
- <a:midPointStop
- offset="0.522"
- style="stop-color:#F2F2F2" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#F2F2F2" />
- <a:midPointStop
- offset="1"
- style="stop-color:#CCCCCC" />
- </linearGradient>
- <linearGradient
- x1="601.39001"
- y1="55.341"
- x2="588.29199"
- y2="71.515999"
- id="lg5771"
- xlink:href="#lg3495_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.009,0,0,1.009,-581.615,-43.098)" />
- <linearGradient
- x1="611.34601"
- y1="55.279999"
- x2="590.39001"
- y2="81.157997"
- id="lg3494_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#d9d9d9;stop-opacity:1"
- offset="0"
- id="stop10932" />
- <stop
- style="stop-color:#f2f2f2;stop-opacity:1"
- offset="0.52200001"
- id="stop10934" />
- <stop
- style="stop-color:#ccc;stop-opacity:1"
- offset="1"
- id="stop10936" />
- <a:midPointStop
- offset="0"
- style="stop-color:#D9D9D9" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#D9D9D9" />
- <a:midPointStop
- offset="0.522"
- style="stop-color:#F2F2F2" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#F2F2F2" />
- <a:midPointStop
- offset="1"
- style="stop-color:#CCCCCC" />
- </linearGradient>
- <linearGradient
- x1="611.34601"
- y1="55.279999"
- x2="590.39001"
- y2="81.157997"
- id="lg5774"
- xlink:href="#lg3494_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.009,0,0,1.009,-581.616,-43.098)" />
- <linearGradient
- x1="798.72998"
- y1="69.839996"
- x2="799.04999"
- y2="70.709999"
- id="g3302_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#005e00;stop-opacity:1"
- offset="0"
- id="s6504" />
- <stop
- style="stop-color:#23a11f;stop-opacity:1"
- offset="1"
- id="s6506" />
- <a:midPointstop
- style="stop-color:#005E00"
- offset="0" />
- <a:midPointstop
- style="stop-color:#005E00"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#23A11F"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="798.72998"
- y1="69.839996"
- x2="799.04999"
- y2="70.709999"
- id="lg5851"
- xlink:href="#g3302_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
- <linearGradient
- x1="779.19"
- y1="122.73"
- x2="811.69"
- y2="149.74001"
- id="g3301_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,-0.25,0,1,0,129.19)">
- <stop
- style="stop-color:#f2f2f2;stop-opacity:1"
- offset="0"
- id="s6483" />
- <stop
- style="stop-color:#eee;stop-opacity:1"
- offset="0.17"
- id="s6485" />
- <stop
- style="stop-color:#e3e3e3;stop-opacity:1"
- offset="0.34"
- id="s6487" />
- <stop
- style="stop-color:#cfcfcf;stop-opacity:1"
- offset="0.50999999"
- id="s6489" />
- <stop
- style="stop-color:#b4b4b4;stop-opacity:1"
- offset="0.67000002"
- id="s6491" />
- <stop
- style="stop-color:#919191;stop-opacity:1"
- offset="0.83999997"
- id="s6493" />
- <stop
- style="stop-color:#666;stop-opacity:1"
- offset="1"
- id="s6495" />
- <a:midPointstop
- style="stop-color:#F2F2F2"
- offset="0" />
- <a:midPointstop
- style="stop-color:#F2F2F2"
- offset="0.71" />
- <a:midPointstop
- style="stop-color:#666666"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="779.19"
- y1="122.73"
- x2="811.69"
- y2="149.74001"
- id="lg5855"
- xlink:href="#g3301_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.204,-0.316,0,1.263,-926.036,103.123)" />
- <clipPath
- id="g3299_">
- <use
- id="use6469"
- x="0"
- y="0"
- width="1005.92"
- height="376.97"
- xlink:href="#g101_" />
- </clipPath>
- <radialGradient
- cx="1189.9301"
- cy="100.05"
- r="40.400002"
- fx="1189.9301"
- fy="100.05"
- id="g3300_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.34,-8.46e-2,0,0.34,394.16,137.13)">
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0"
- id="s6472" />
- <stop
- style="stop-color:white;stop-opacity:0"
- offset="1"
- id="s6474" />
- <a:midPointstop
- style="stop-color:#FFFFFF"
- offset="0" />
- <a:midPointstop
- style="stop-color:#FFFFFF"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#000000"
- offset="1" />
- </radialGradient>
- <radialGradient
- cx="1199.74"
- cy="97.150002"
- r="40.400002"
- fx="1199.74"
- fy="97.150002"
- id="rg5860"
- xlink:href="#g3300_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.409,-0.107,0,0.429,-451.489,113.149)" />
- <linearGradient
- x1="796.38"
- y1="67.580002"
- x2="781.28003"
- y2="58.549999"
- id="g3298_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#4c8bca;stop-opacity:1"
- offset="0"
- id="s6462" />
- <stop
- style="stop-color:#b7e9ff;stop-opacity:1"
- offset="1"
- id="s6464" />
- <a:midPointstop
- style="stop-color:#4C8BCA"
- offset="0" />
- <a:midPointstop
- style="stop-color:#4C8BCA"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#B7E9FF"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="800.97998"
- y1="140.72"
- x2="777.71997"
- y2="121.76"
- id="g3297_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,-0.25,0,1,0,129.19)">
- <stop
- style="stop-color:#e5e5e5;stop-opacity:1"
- offset="0"
- id="s6448" />
- <stop
- style="stop-color:#ccc;stop-opacity:1"
- offset="1"
- id="s6450" />
- <a:midPointstop
- style="stop-color:#E5E5E5"
- offset="0" />
- <a:midPointstop
- style="stop-color:#E5E5E5"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#CCCCCC"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="800.97998"
- y1="140.72"
- x2="777.71997"
- y2="121.76"
- id="lg5890"
- xlink:href="#g3297_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,-0.25,0,1,0,129.19)" />
- <linearGradient
- x1="790.03998"
- y1="-16.33"
- x2="779.84003"
- y2="-3.73"
- id="g3296_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(0,70.17)">
- <stop
- style="stop-color:#d9d9d9;stop-opacity:1"
- offset="0"
- id="s6439" />
- <stop
- style="stop-color:#f2f2f2;stop-opacity:1"
- offset="0.51999998"
- id="s6441" />
- <stop
- style="stop-color:#ccc;stop-opacity:1"
- offset="1"
- id="s6443" />
- <a:midPointstop
- style="stop-color:#D9D9D9"
- offset="0" />
- <a:midPointstop
- style="stop-color:#D9D9D9"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#F2F2F2"
- offset="0.52" />
- <a:midPointstop
- style="stop-color:#F2F2F2"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#CCCCCC"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="790.03998"
- y1="-16.33"
- x2="779.84003"
- y2="-3.73"
- id="lg5866"
- xlink:href="#g3296_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.204,0,0,1.263,-926.036,28.6)" />
- <linearGradient
- x1="785.84003"
- y1="72.989998"
- x2="785.26001"
- y2="76.279999"
- id="g3293_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0"
- id="s6412" />
- <stop
- style="stop-color:#737373;stop-opacity:1"
- offset="1"
- id="s6414" />
- <a:midPointstop
- style="stop-color:#FFFFFF"
- offset="0" />
- <a:midPointstop
- style="stop-color:#FFFFFF"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#737373"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="785.84003"
- y1="72.989998"
- x2="785.26001"
- y2="76.279999"
- id="lg5871"
- xlink:href="#g3293_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
- <linearGradient
- x1="789.37"
- y1="69.879997"
- x2="791.03998"
- y2="77.120003"
- id="g3292_"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#999;stop-opacity:1"
- offset="0"
- id="s6403" />
- <stop
- style="stop-color:#f2f2f2;stop-opacity:1"
- offset="0.28"
- id="s6405" />
- <stop
- style="stop-color:#666;stop-opacity:1"
- offset="1"
- id="s6407" />
- <a:midPointstop
- style="stop-color:#999999"
- offset="0" />
- <a:midPointstop
- style="stop-color:#999999"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#F2F2F2"
- offset="0.28" />
- <a:midPointstop
- style="stop-color:#F2F2F2"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#666666"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="789.37"
- y1="69.879997"
- x2="791.03998"
- y2="77.120003"
- id="lg5874"
- xlink:href="#g3292_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
- <linearGradient
- x1="786.65997"
- y1="136.12"
- x2="786.71002"
- y2="134.33"
- id="g3290_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,-0.25,0,1,0,137.29)">
- <stop
- style="stop-color:#d9d9d9;stop-opacity:1"
- offset="0"
- id="s6380" />
- <stop
- style="stop-color:#b2b2b2;stop-opacity:1"
- offset="1"
- id="s6382" />
- <a:midPointstop
- style="stop-color:#D9D9D9"
- offset="0" />
- <a:midPointstop
- style="stop-color:#D9D9D9"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#B2B2B2"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="786.65997"
- y1="136.12"
- x2="786.71002"
- y2="134.33"
- id="lg5878"
- xlink:href="#g3290_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.204,-0.316,0,1.263,-926.036,113.351)" />
- <radialGradient
- cx="1458.77"
- cy="-5.0999999"
- r="35.130001"
- fx="1458.77"
- fy="-5.0999999"
- id="g3289_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.42,0,0,0.42,167.09,79.84)">
- <stop
- style="stop-color:white;stop-opacity:1"
- offset="0"
- id="s6371" />
- <stop
- style="stop-color:#999;stop-opacity:1"
- offset="1"
- id="s6373" />
- <a:midPointstop
- style="stop-color:#FFFFFF"
- offset="0" />
- <a:midPointstop
- style="stop-color:#FFFFFF"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#999999"
- offset="1" />
- </radialGradient>
- <radialGradient
- cx="1458.77"
- cy="-5.0999999"
- r="35.130001"
- fx="1458.77"
- fy="-5.0999999"
- id="rg5881"
- xlink:href="#g3289_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.505,0,0,0.53,-724.957,40.636)" />
- <radialGradient
- cx="1612.98"
- cy="-4.4699998"
- r="36.580002"
- fx="1612.98"
- fy="-4.4699998"
- id="g3288_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.34,0,0,0.36,238.56,86.87)">
- <stop
- style="stop-color:#e5e5e5;stop-opacity:1"
- offset="0"
- id="s6362" />
- <stop
- style="stop-color:#b2b2b2;stop-opacity:1"
- offset="0.63999999"
- id="s6364" />
- <stop
- style="stop-color:#737373;stop-opacity:1"
- offset="1"
- id="s6366" />
- <a:midPointstop
- style="stop-color:#E5E5E5"
- offset="0" />
- <a:midPointstop
- style="stop-color:#E5E5E5"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#B2B2B2"
- offset="0.64" />
- <a:midPointstop
- style="stop-color:#B2B2B2"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#737373"
- offset="1" />
- </radialGradient>
- <radialGradient
- cx="1612.98"
- cy="-4.4699998"
- r="36.580002"
- fx="1612.98"
- fy="-4.4699998"
- id="rg5884"
- xlink:href="#g3288_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.408,0,0,0.448,-638.943,49.495)" />
- <radialGradient
- cx="1470.5"
- cy="-10.21"
- r="33.290001"
- fx="1470.5"
- fy="-10.21"
- id="g3287_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.42,0,0,0.42,167.09,79.84)">
- <stop
- style="stop-color:#e5e5e5;stop-opacity:1"
- offset="0"
- id="s6347" />
- <stop
- style="stop-color:#b2b2b2;stop-opacity:1"
- offset="0.38999999"
- id="s6349" />
- <stop
- style="stop-color:#b1b1b1;stop-opacity:1"
- offset="0.75"
- id="s6351" />
- <stop
- style="stop-color:#aaa;stop-opacity:1"
- offset="0.88"
- id="s6353" />
- <stop
- style="stop-color:#9e9e9e;stop-opacity:1"
- offset="0.97000003"
- id="s6355" />
- <stop
- style="stop-color:#999;stop-opacity:1"
- offset="1"
- id="s6357" />
- <a:midPointstop
- style="stop-color:#E5E5E5"
- offset="0" />
- <a:midPointstop
- style="stop-color:#E5E5E5"
- offset="0.5" />
- <a:midPointstop
- style="stop-color:#B2B2B2"
- offset="0.39" />
- <a:midPointstop
- style="stop-color:#B2B2B2"
- offset="0.87" />
- <a:midPointstop
- style="stop-color:#999999"
- offset="1" />
- </radialGradient>
- <radialGradient
- cx="1470.5"
- cy="-10.21"
- r="33.290001"
- fx="1470.5"
- fy="-10.21"
- id="rg5887"
- xlink:href="#g3287_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.505,0,0,0.53,-724.957,40.636)" />
- <pattern
- patternTransform="matrix(0.592927,0,0,0.592927,78,462)"
- id="cream-spots"
- height="32"
- width="32"
- patternUnits="userSpaceOnUse">
- <g
- transform="translate(-365.3146,-513.505)"
- id="g3047">
- id="path2858" />
- <path
- inkscape:label="#path2854"
- sodipodi:nodetypes="czzzz"
- style="fill:#e3dcc0"
- id="path3060"
- d="M 390.31462,529.50504 C 390.31462,534.47304 386.28262,538.50504 381.31462,538.50504 C 376.34662,538.50504 372.31462,534.47304 372.31462,529.50504 C 372.31462,524.53704 376.34662,520.50504 381.31462,520.50504 C 386.28262,520.50504 390.31462,524.53704 390.31462,529.50504 z " />
-</g>
- </pattern>
- <pattern
- patternTransform="matrix(0.733751,0,0,0.733751,67,367)"
- id="dark-cream-spots"
- height="32"
- width="32"
- patternUnits="userSpaceOnUse">
- <g
- transform="translate(-408.0946,-513.505)"
- id="dark-cream-spot"
- inkscape:label="#g3043">
- <path
- sodipodi:nodetypes="czzzz"
- style="fill:#c8c5ac"
- d="M 433.09458,529.50504 C 433.09458,534.47304 429.06258,538.50504 424.09458,538.50504 C 419.12658,538.50504 415.09458,534.47304 415.09458,529.50504 C 415.09458,524.53704 419.12658,520.50504 424.09458,520.50504 C 429.06258,520.50504 433.09458,524.53704 433.09458,529.50504 z "
- id="path2953" />
- </g>
- </pattern>
- <pattern
- patternTransform="matrix(0.375,0,0,0.375,379,400)"
- id="white-spots"
- height="32"
- width="32"
- patternUnits="userSpaceOnUse">
- <g
- transform="translate(-484.3997,-513.505)"
- id="white-spot"
- inkscape:label="#g3035">
- <path
- style="opacity:0.25;fill:white"
- id="path3033"
- d="M 509.39967,529.50504 C 509.39967,534.47304 505.36767,538.50504 500.39967,538.50504 C 495.43167,538.50504 491.39967,534.47304 491.39967,529.50504 C 491.39967,524.53704 495.43167,520.50504 500.39967,520.50504 C 505.36767,520.50504 509.39967,524.53704 509.39967,529.50504 z "
- sodipodi:nodetypes="czzzz" />
- </g>
- </pattern>
- <pattern
- patternTransform="matrix(0.455007,0,0,0.455007,-5e-5,1.9e-5)"
- id="black-spots"
- height="32"
- width="32"
- patternUnits="userSpaceOnUse">
- <g
- transform="translate(-448.3997,-513.505)"
- id="black-spot"
- inkscape:label="#g3039">
- <path
- sodipodi:nodetypes="czzzz"
- d="M 473.39967,529.50504 C 473.39967,534.47304 469.36767,538.50504 464.39967,538.50504 C 459.43167,538.50504 455.39967,534.47304 455.39967,529.50504 C 455.39967,524.53704 459.43167,520.50504 464.39967,520.50504 C 469.36767,520.50504 473.39967,524.53704 473.39967,529.50504 z "
- id="path2961"
- style="opacity:0.25;fill:black" />
- </g>
- </pattern>
- <linearGradient
- x1="501.0903"
- y1="-19.2544"
- x2="531.85413"
- y2="0.72390002"
- id="linearGradient17334"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="0"
- id="stop17336" />
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="0.51120001"
- id="stop17338" />
- <stop
- style="stop-color:#5387ba;stop-opacity:1"
- offset="0.64609998"
- id="stop17340" />
- <stop
- style="stop-color:#16336e;stop-opacity:1"
- offset="1"
- id="stop17342" />
- <a:midPointStop
- offset="0"
- style="stop-color:#B4DAEA" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#B4DAEA" />
- <a:midPointStop
- offset="0.5112"
- style="stop-color:#B4DAEA" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#B4DAEA" />
- <a:midPointStop
- offset="0.6461"
- style="stop-color:#5387BA" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#5387BA" />
- <a:midPointStop
- offset="1"
- style="stop-color:#16336E" />
- </linearGradient>
- <linearGradient
- x1="415.73831"
- y1="11.854"
- x2="418.13361"
- y2="18.8104"
- id="linearGradient17426"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.8362,0.5206,-1.1904,0.992,147.62,-30.9374)">
- <stop
- style="stop-color:#ccc;stop-opacity:1"
- offset="0"
- id="stop17428" />
- <stop
- style="stop-color:#f2f2f2;stop-opacity:1"
- offset="1"
- id="stop17430" />
- <a:midPointStop
- offset="0"
- style="stop-color:#CCCCCC" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#CCCCCC" />
- <a:midPointStop
- offset="1"
- style="stop-color:#F2F2F2" />
- </linearGradient>
- <linearGradient
- x1="478.21341"
- y1="-131.9297"
- x2="469.85818"
- y2="-140.28481"
- id="linearGradient17434"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.5592,0.829,-0.829,0.5592,101.3357,-104.791)">
- <stop
- style="stop-color:#f3403f;stop-opacity:1"
- offset="0"
- id="stop17436" />
- <stop
- style="stop-color:#d02a28;stop-opacity:1"
- offset="0.37889999"
- id="stop17438" />
- <stop
- style="stop-color:#b21714;stop-opacity:1"
- offset="0.77649999"
- id="stop17440" />
- <stop
- style="stop-color:#a6100c;stop-opacity:1"
- offset="1"
- id="stop17442" />
- <a:midPointStop
- offset="0"
- style="stop-color:#F3403F" />
- <a:midPointStop
- offset="0.4213"
- style="stop-color:#F3403F" />
- <a:midPointStop
- offset="1"
- style="stop-color:#A6100C" />
- </linearGradient>
- <linearGradient
- x1="502.70749"
- y1="115.3013"
- x2="516.39001"
- y2="127.1953"
- id="linearGradient17709"
- xlink:href="#XMLID_1749_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)" />
- <linearGradient
- x1="506.09909"
- y1="-11.5137"
- x2="527.99609"
- y2="2.7063999"
- id="linearGradient17711"
- xlink:href="#XMLID_1752_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
- <linearGradient
- x1="516.57672"
- y1="-15.769"
- x2="516.57672"
- y2="0.84280002"
- id="linearGradient17713"
- xlink:href="#XMLID_1753_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
- <linearGradient
- x1="505.62939"
- y1="-14.9526"
- x2="527.49402"
- y2="-0.7536"
- id="linearGradient17715"
- xlink:href="#XMLID_1756_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
- <linearGradient
- x1="500.70749"
- y1="-13.2441"
- x2="513.46442"
- y2="-2.1547"
- id="linearGradient17717"
- xlink:href="#XMLID_1757_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
- <linearGradient
- x1="473.7681"
- y1="209.17529"
- x2="486.98099"
- y2="213.2001"
- id="linearGradient17721"
- xlink:href="#XMLID_2274_"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- x1="481.23969"
- y1="212.5742"
- x2="472.92981"
- y2="207.4967"
- id="linearGradient17723"
- xlink:href="#XMLID_2275_"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- x1="500.70749"
- y1="-13.2441"
- x2="513.46442"
- y2="-2.1547"
- id="linearGradient17416"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
- <stop
- style="stop-color:#5387ba;stop-opacity:1"
- offset="0"
- id="stop17418" />
- <stop
- style="stop-color:#96bad6;stop-opacity:1"
- offset="1"
- id="stop17420" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#96BAD6"
- offset="1" />
- </linearGradient>
- <defs
- id="defs9929">
- <path
- d="M 489.21,209.35 L 485.35,203.63 C 483.63,204.25 473.47,208.93 471.5,210.18 C 470.57,210.77 470.17,211.16 469.72,212.48 C 470.93,212.31 471.72,212.49 473.42,213.04 C 473.26,214.77 473.24,215.74 473.57,218.2 C 474.01,216.88 474.41,216.49 475.34,215.9 C 477.33,214.65 487.49,209.97 489.21,209.35 z "
- id="XMLID_960_" />
- </defs>
- <clipPath
- id="clipPath17448">
- <use
- id="use17450"
- x="0"
- y="0"
- width="744.09448"
- height="600"
- xlink:href="#XMLID_960_" />
- </clipPath>
- <linearGradient
- x1="473.7681"
- y1="209.17529"
- x2="486.98099"
- y2="213.2001"
- id="linearGradient17452"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#f3403f;stop-opacity:1"
- offset="0"
- id="stop17454" />
- <stop
- style="stop-color:#d02a28;stop-opacity:1"
- offset="0.37889999"
- id="stop17456" />
- <stop
- style="stop-color:#b21714;stop-opacity:1"
- offset="0.77649999"
- id="stop17458" />
- <stop
- style="stop-color:#a6100c;stop-opacity:1"
- offset="1"
- id="stop17460" />
- <a:midPointStop
- style="stop-color:#F3403F"
- offset="0" />
- <a:midPointStop
- style="stop-color:#F3403F"
- offset="0.4213" />
- <a:midPointStop
- style="stop-color:#A6100C"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="481.23969"
- y1="212.5742"
- x2="472.92981"
- y2="207.4967"
- id="linearGradient17463"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#f3403f;stop-opacity:1"
- offset="0"
- id="stop17465" />
- <stop
- style="stop-color:#d02a28;stop-opacity:1"
- offset="0.37889999"
- id="stop17467" />
- <stop
- style="stop-color:#b21714;stop-opacity:1"
- offset="0.77649999"
- id="stop17469" />
- <stop
- style="stop-color:#a6100c;stop-opacity:1"
- offset="1"
- id="stop17471" />
- <a:midPointStop
- style="stop-color:#F3403F"
- offset="0" />
- <a:midPointStop
- style="stop-color:#F3403F"
- offset="0.4213" />
- <a:midPointStop
- style="stop-color:#A6100C"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="481.23969"
- y1="212.5742"
- x2="472.92981"
- y2="207.4967"
- id="linearGradient17807"
- xlink:href="#XMLID_2275_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-177.1654,35.43307)" />
- <linearGradient
- x1="473.7681"
- y1="209.17529"
- x2="486.98099"
- y2="213.2001"
- id="linearGradient17810"
- xlink:href="#XMLID_2274_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-177.1654,35.43307)" />
- <linearGradient
- x1="502.70749"
- y1="115.3013"
- x2="516.39001"
- y2="127.1953"
- id="linearGradient17812"
- xlink:href="#XMLID_1749_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)" />
- <linearGradient
- x1="506.09909"
- y1="-11.5137"
- x2="527.99609"
- y2="2.7063999"
- id="linearGradient17814"
- xlink:href="#XMLID_1752_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
- <linearGradient
- x1="516.57672"
- y1="-15.769"
- x2="516.57672"
- y2="0.84280002"
- id="linearGradient17816"
- xlink:href="#XMLID_1753_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
- <linearGradient
- x1="505.62939"
- y1="-14.9526"
- x2="527.49402"
- y2="-0.7536"
- id="linearGradient17818"
- xlink:href="#XMLID_1756_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
- <linearGradient
- x1="502.70749"
- y1="115.3013"
- x2="516.39001"
- y2="127.1953"
- id="linearGradient17347"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)">
- <stop
- style="stop-color:#5387ba;stop-opacity:1"
- offset="0"
- id="stop17349" />
- <stop
- style="stop-color:#96bad6;stop-opacity:1"
- offset="1"
- id="stop17351" />
- <a:midPointStop
- offset="0"
- style="stop-color:#5387BA" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#5387BA" />
- <a:midPointStop
- offset="1"
- style="stop-color:#96BAD6" />
- </linearGradient>
- <linearGradient
- x1="516.57672"
- y1="-15.769"
- x2="516.57672"
- y2="0.84280002"
- id="linearGradient17379"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
- <stop
- style="stop-color:#b2b2b2;stop-opacity:1"
- offset="0"
- id="stop17381" />
- <stop
- style="stop-color:#f2f2f2;stop-opacity:1"
- offset="1"
- id="stop17383" />
- <a:midPointStop
- offset="0"
- style="stop-color:#B2B2B2" />
- <a:midPointStop
- offset="0.5"
- style="stop-color:#B2B2B2" />
- <a:midPointStop
- offset="1"
- style="stop-color:#F2F2F2" />
- </linearGradient>
- <linearGradient
- x1="502.70749"
- y1="115.3013"
- x2="516.39001"
- y2="127.1953"
- id="linearGradient17862"
- xlink:href="#XMLID_1749_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,-166.1427,-0.18283)" />
- <linearGradient
- x1="505.62939"
- y1="-14.9526"
- x2="527.49402"
- y2="-0.7536"
- id="linearGradient17864"
- xlink:href="#XMLID_1756_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
- <defs
- id="defs3859">
- <polygon
- points="465.54,213.52 481.94,217.46 482.74,216.71 487.46,198.05 471.08,194.07 470.26,194.83 465.54,213.52 "
- id="XMLID_343_" />
- </defs>
- <linearGradient
- x1="471.0806"
- y1="201.07761"
- x2="481.91711"
- y2="210.4977"
- id="linearGradient17389"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#6498c1;stop-opacity:1"
- offset="0.005618"
- id="stop17391" />
- <stop
- style="stop-color:#79a9cc;stop-opacity:1"
- offset="0.2332"
- id="stop17393" />
- <stop
- style="stop-color:#a4cde2;stop-opacity:1"
- offset="0.74049997"
- id="stop17395" />
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="1"
- id="stop17397" />
- <a:midPointStop
- style="stop-color:#6498C1"
- offset="5.618000e-003" />
- <a:midPointStop
- style="stop-color:#6498C1"
- offset="0.4438" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="1" />
- </linearGradient>
- <clipPath
- id="clipPath17400">
- <use
- id="use17402"
- x="0"
- y="0"
- width="744.09448"
- height="600"
- xlink:href="#XMLID_343_" />
- </clipPath>
- <linearGradient
- x1="505.62939"
- y1="-14.9526"
- x2="527.49402"
- y2="-0.7536"
- id="linearGradient17404"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="0"
- id="stop17406" />
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="0.51120001"
- id="stop17408" />
- <stop
- style="stop-color:#5387ba;stop-opacity:1"
- offset="0.64609998"
- id="stop17410" />
- <stop
- style="stop-color:#16336e;stop-opacity:1"
- offset="1"
- id="stop17412" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5112" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.6461" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#16336E"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="506.09909"
- y1="-11.5137"
- x2="527.99609"
- y2="2.7063999"
- id="linearGradient17882"
- xlink:href="#XMLID_1752_"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
- <defs
- id="defs3826">
- <polygon
- points="463.52,216.14 480.56,220.24 481.36,219.5 483.03,202.04 469.05,196.69 468.24,197.45 463.52,216.14 "
- id="XMLID_338_" />
- </defs>
- <linearGradient
- x1="468.2915"
- y1="204.7612"
- x2="479.39871"
- y2="214.4166"
- id="linearGradient17357"
- gradientUnits="userSpaceOnUse">
- <stop
- style="stop-color:#5387ba;stop-opacity:1"
- offset="0"
- id="stop17359" />
- <stop
- style="stop-color:#96bad6;stop-opacity:1"
- offset="1"
- id="stop17361" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#96BAD6"
- offset="1" />
- </linearGradient>
- <clipPath
- id="clipPath17364">
- <use
- id="use17366"
- x="0"
- y="0"
- width="744.09448"
- height="600"
- xlink:href="#XMLID_338_" />
- </clipPath>
- <linearGradient
- x1="506.09909"
- y1="-11.5137"
- x2="527.99609"
- y2="2.7063999"
- id="linearGradient17368"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="0"
- id="stop17370" />
- <stop
- style="stop-color:#b4daea;stop-opacity:1"
- offset="0.51120001"
- id="stop17372" />
- <stop
- style="stop-color:#5387ba;stop-opacity:1"
- offset="0.64609998"
- id="stop17374" />
- <stop
- style="stop-color:#16336e;stop-opacity:1"
- offset="1"
- id="stop17376" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5112" />
- <a:midPointStop
- style="stop-color:#B4DAEA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.6461" />
- <a:midPointStop
- style="stop-color:#5387BA"
- offset="0.5" />
- <a:midPointStop
- style="stop-color:#16336E"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="296.4996"
- y1="188.81061"
- x2="317.32471"
- y2="209.69398"
- id="linearGradient2387"
- xlink:href="#linearGradient2381"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
- <linearGradient
- x1="296.4996"
- y1="188.81061"
- x2="317.32471"
- y2="209.69398"
- id="linearGradient5105"
- xlink:href="#linearGradient2381"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
- <linearGradient
- x1="296.4996"
- y1="188.81061"
- x2="317.32471"
- y2="209.69398"
- id="linearGradient5145"
- xlink:href="#linearGradient2381"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2381"
- id="linearGradient2371"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)"
- x1="296.4996"
- y1="188.81061"
- x2="317.32471"
- y2="209.69398" />
- </defs>
- <g
- transform="matrix(0.437808,-0.437808,0.437808,0.437808,-220.8237,43.55311)"
- id="g5089">
- <path
- d="M 8.4382985,-6.28125 C 7.8309069,-6.28125 4.125,-0.33238729 4.125,1.96875 L 4.125,28.6875 C 4.125,29.533884 4.7068159,29.8125 5.28125,29.8125 L 30.84375,29.8125 C 31.476092,29.8125 31.968751,29.319842 31.96875,28.6875 L 31.96875,23.46875 L 32.25,23.46875 C 32.74684,23.46875 33.156249,23.059339 33.15625,22.5625 L 33.15625,-5.375 C 33.15625,-5.8718398 32.74684,-6.28125 32.25,-6.28125 L 8.4382985,-6.28125 z "
- transform="translate(282.8327,227.1903)"
- style="fill:#5c5c4f;stroke:black;stroke-width:3.23021388;stroke-miterlimit:4;stroke-dasharray:none"
- id="path5091" />
- <rect
- width="27.85074"
- height="29.369793"
- rx="1.1414107"
- ry="1.1414107"
- x="286.96509"
- y="227.63805"
- style="fill:#032c87"
- id="rect5093" />
- <path
- d="M 288.43262,225.43675 L 313.67442,225.43675 L 313.67442,254.80655 L 287.29827,254.83069 L 288.43262,225.43675 z "
- style="fill:white"
- id="rect5095" />
- <path
- d="M 302.44536,251.73726 C 303.83227,259.59643 301.75225,263.02091 301.75225,263.02091 C 303.99609,261.41329 305.71651,259.54397 306.65747,257.28491 C 307.62455,259.47755 308.49041,261.71357 310.9319,263.27432 C 310.9319,263.27432 309.33686,256.07392 309.22047,251.73726 L 302.44536,251.73726 z "
- style="fill:#a70000;fill-opacity:1;stroke-width:2"
- id="path5097" />
- <rect
- width="25.241802"
- height="29.736675"
- rx="0.89682275"
- ry="0.89682275"
- x="290.73544"
- y="220.92249"
- style="fill:#809cc9"
- id="rect5099" />
- <path
- d="M 576.47347,725.93939 L 582.84431,726.35441 L 583.25121,755.8725 C 581.35919,754.55465 576.39694,752.1117 574.98889,754.19149 L 574.98889,727.42397 C 574.98889,726.60151 575.65101,725.93939 576.47347,725.93939 z "
- transform="matrix(0.499065,-0.866565,0,1,0,0)"
- style="fill:#4573b3;fill-opacity:1"
- id="rect5101" />
- <path
- d="M 293.2599,221.89363 L 313.99908,221.89363 C 314.45009,221.89363 314.81318,222.25673 314.81318,222.70774 C 315.02865,229.0361 295.44494,244.47124 292.44579,240.30491 L 292.44579,222.70774 C 292.44579,222.25673 292.80889,221.89363 293.2599,221.89363 z "
- style="opacity:0.65536726;fill:url(#linearGradient2371);fill-opacity:1"
- id="path5103" />
- </g>
-</svg>
Added: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/interposition.gif
===================================================================
(Binary files differ)
Property changes on: labs/jbosstm/trunk/docs/txbridge_guide/en-US/images/interposition.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
More information about the jboss-svn-commits
mailing list