You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by db...@apache.org on 2018/06/05 18:04:37 UTC

[geode] 01/02: GEODE-5267: User Guide - un-document deprecated JTA transaction manager

This is an automated email from the ASF dual-hosted git repository.

dbarnes pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git

commit d4e9725a97633959f330df6ee7e8d91091fcf4d9
Author: Dave Barnes <db...@pivotal.io>
AuthorDate: Thu May 31 15:46:33 2018 -0700

    GEODE-5267: User Guide - un-document deprecated JTA transaction manager
---
 .../source/subnavs/geode-subnav.erb                |  25 +---
 .../chapter_overview.html.md.erb                   |   2 +-
 ...nfiguring_db_connections_using_JNDI.html.md.erb |  11 +-
 .../how_data_loaders_work.html.md.erb              |   2 +-
 .../sync_outside_data.html.md.erb                  |   4 +
 .../transactions/JTA_transactions.html.md.erb      | 141 ++++++++-------------
 .../cache_plugins_with_jta.html.md.erb             |   8 +-
 .../transaction_coding_examples.html.md.erb        |   4 -
 .../transaction_jta_gemfire_example.html.md.erb    |  46 -------
 geode-docs/images/transactions_jta.png             | Bin 104780 -> 0 bytes
 geode-docs/reference/topics/cache_xml.html.md.erb  |   4 +-
 .../reference/topics/client-cache.html.md.erb      |   4 +-
 12 files changed, 79 insertions(+), 172 deletions(-)

diff --git a/geode-book/master_middleman/source/subnavs/geode-subnav.erb b/geode-book/master_middleman/source/subnavs/geode-subnav.erb
index 9609cce..f4d60ad 100644
--- a/geode-book/master_middleman/source/subnavs/geode-subnav.erb
+++ b/geode-book/master_middleman/source/subnavs/geode-subnav.erb
@@ -1013,6 +1013,10 @@ limitations under the License.
                                         <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/outside_data_sources/chapter_overview.html">Overview of Outside Data Sources</a>
                                     </li>
                                     <li>
+                                        <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/outside_data_sources/configuring_db_connections_using_JNDI.html">Configuring Database Connections Using JNDI</a>
+                                    </li>
+
+                                    <li>
                                         <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/outside_data_sources/how_data_loaders_work.html">How Data Loaders Work</a>
                                     </li>
                                     <li>
@@ -1489,7 +1493,7 @@ limitations under the License.
                                 </a>
                                 <ul>
                                     <li class="has_submenu">
-                                        <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/transactions/JTA_transactions.html#concept_cp1_zx1_wk">Coordinating with External JTA Transactions Managers</a>
+                                        <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/transactions/JTA_transactions.html#concept_cp1_zx1_wk">Coordinating with External JTA Transaction Managers</a>
                                         <ul>
                                             <li>
                                                 <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/transactions/JTA_transactions.html#task_j3g_3mn_1l">How to Run a JTA Transaction Coordinated by an External Transaction Manager</a>
@@ -1504,22 +1508,6 @@ limitations under the License.
                                             </li>
                                         </ul>
                                     </li>
-                                    <li class="has_submenu">
-                                        <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/transactions/JTA_transactions.html#concept_8567sdkbigige">Using Geode as the JTA Transaction Manager</a>
-                                        <ul>
-                                            <li class="has_submenu">
-                                                <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/transactions/JTA_transactions.html#task_qjv_khb_wk">How to Run a JTA Global Transaction Using Geode as the JTA Transaction Manager</a>
-                                                <ul>
-                                                    <li>
-                                                        <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/transactions/configuring_db_connections_using_JNDI.html">Configuring Database Connections Using JNDI</a>
-                                                    </li>
-                                                    <li>
-                                                        <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/transactions/configuring_db_connections_using_JNDI.html#topic_F67EC20067124A618A8099AB4CBF634C">Example DataSource Configurations in cache.xml</a>
-                                                    </li>
-                                                </ul>
-                                            </li>
-                                        </ul>
-                                    </li>
                                     <li>
                                         <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/transactions/cache_plugins_with_jta.html">Behavior of Geode Cache Writers and Loaders Under JTA</a>
                                     </li>
@@ -1545,9 +1533,6 @@ limitations under the License.
                                         <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/transactions/transactional_function_example.html">Transaction Embedded within a Function Example</a>
                                     </li>
                                     <li>
-                                        <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/transactions/transaction_jta_gemfire_example.html">Geode JTA Transaction Example</a>
-                                    </li>
-                                    <li>
                                         <a href="/docs/guide/<%=vars.product_version_nodot%>/developing/transactions/jca_adapter_example.html">JCA Resource Adapter Example</a>
                                     </li>
                                 </ul>
diff --git a/geode-docs/developing/outside_data_sources/chapter_overview.html.md.erb b/geode-docs/developing/outside_data_sources/chapter_overview.html.md.erb
index 3d8c30c..e51a3f9 100644
--- a/geode-docs/developing/outside_data_sources/chapter_overview.html.md.erb
+++ b/geode-docs/developing/outside_data_sources/chapter_overview.html.md.erb
@@ -29,6 +29,6 @@ The application plug-ins:
     -   `CacheWriter` is run synchronously. Before performing any operation on a region entry, if any cache writers are defined for the region in the distributed system, the system invokes the most convenient writer. In partitioned and distributed regions, cache writers are usually defined in only a subset of the caches holding the region - often in only one cache. The cache writer can abort the region entry operation.
     -   `CacheListener` is run synchronously after the cache is updated. This listener works only on local cache events, so install your listener in every cache where you want it to handle events. You can install multiple cache listeners in any of your caches.
 
-In addition to using application plug-ins, you can also configure external JNDI database sources in your cache.xml and use these data sources in transactions. See [Configuring Database Connections Using JNDI](../transactions/configuring_db_connections_using_JNDI.html#topic_A5E3A67C808D48C08E1F0DC167C5C494) for more information.
+In addition to using application plug-ins, you can also configure external JNDI database sources in your cache.xml and use these data sources in transactions. See [Configuring Database Connections Using JNDI](configuring_db_connections_using_JNDI.html) for more information.
 
 
diff --git a/geode-docs/developing/transactions/configuring_db_connections_using_JNDI.html.md.erb b/geode-docs/developing/outside_data_sources/configuring_db_connections_using_JNDI.html.md.erb
similarity index 96%
rename from geode-docs/developing/transactions/configuring_db_connections_using_JNDI.html.md.erb
rename to geode-docs/developing/outside_data_sources/configuring_db_connections_using_JNDI.html.md.erb
index 8125132..d8199c5 100644
--- a/geode-docs/developing/transactions/configuring_db_connections_using_JNDI.html.md.erb
+++ b/geode-docs/developing/outside_data_sources/configuring_db_connections_using_JNDI.html.md.erb
@@ -19,12 +19,13 @@ See the License for the specific language governing permissions and
 limitations under the License.
 -->
 
-<a id="topic_A5E3A67C808D48C08E1F0DC167C5C494"></a>
+To connect to external databases, for example when using JTA transactions, you can configure
+database JNDI data sources in `cache.xml`. The `DataSource` object points to either a JDBC
+connection or, more commonly, a JDBC connection pool. The connection pool is usually preferred,
+because a program can use and reuse a connection as long as necessary and then free it for another
+thread to use.
 
-
-When using JTA transactions, you can configure database JNDI data sources in `cache.xml`. The `DataSource` object points to either a JDBC connection or, more commonly, a JDBC connection pool. The connection pool is usually preferred, because a program can use and reuse a connection as long as necessary and then free it for another thread to use.
-
-The following are a list of `DataSource` connection types used in JTA transactions.
+The following list shows `DataSource` connection types used in JTA transactions:
 
 -   **XAPooledDataSource**. Pooled SQL connections.
 -   **ManagedDataSource**. JNDI binding type for the J2EE Connector Architecture (JCA) ManagedConnectionFactory.
diff --git a/geode-docs/developing/outside_data_sources/how_data_loaders_work.html.md.erb b/geode-docs/developing/outside_data_sources/how_data_loaders_work.html.md.erb
index b342e41..4e5d0a7 100644
--- a/geode-docs/developing/outside_data_sources/how_data_loaders_work.html.md.erb
+++ b/geode-docs/developing/outside_data_sources/how_data_loaders_work.html.md.erb
@@ -32,7 +32,7 @@ How to install your cache loader depends on the type of region.
 
 Because of the huge amounts of data they can handle, partitioned regions support partitioned loading. Each cache loader loads only the data entries in the member where the loader is defined. If data redundancy is configured, data is loaded only if the member holds the primary copy. So you must install a cache loader in every member where the partitioned attributes `local-max-memory` is not zero.
 
-If you depend on a JDBC connection, every data store must have a connection to the data source, as shown in the following figure. Here the three members require three connections. See [Configuring Database Connections Using JNDI](../transactions/configuring_db_connections_using_JNDI.html#topic_A5E3A67C808D48C08E1F0DC167C5C494) for information on how to configure data sources.
+If you depend on a JDBC connection, every data store must have a connection to the data source, as shown in the following figure. Here the three members require three connections. See [Configuring Database Connections Using JNDI](configuring_db_connections_using_JNDI.html) for information on how to configure data sources.
 
 **Note:**
 Partitioned regions generally require more JDBC connections than distributed regions.
diff --git a/geode-docs/developing/outside_data_sources/sync_outside_data.html.md.erb b/geode-docs/developing/outside_data_sources/sync_outside_data.html.md.erb
index 767e507..91b1e86 100644
--- a/geode-docs/developing/outside_data_sources/sync_outside_data.html.md.erb
+++ b/geode-docs/developing/outside_data_sources/sync_outside_data.html.md.erb
@@ -25,6 +25,10 @@ Keep your distributed cache in sync with an outside data source by programming a
 
     <%=vars.product_name_long%> has application plug-ins to read data into the cache and write it out.
 
+-   **[Configuring Database Connections Using JNDI](configuring_db_connections_using_JNDI.html)**.
+
+    Use JNDI to maintain a connection pool that includes outside data sources.
+
 -   **[How Data Loaders Work](how_data_loaders_work.html)**
 
     By default, a region has no data loader defined. Plug an application-defined loader into any region by setting the region attribute cache-loader on the members that host data for the region.
diff --git a/geode-docs/developing/transactions/JTA_transactions.html.md.erb b/geode-docs/developing/transactions/JTA_transactions.html.md.erb
index 0dcc4fe..d8521b2 100644
--- a/geode-docs/developing/transactions/JTA_transactions.html.md.erb
+++ b/geode-docs/developing/transactions/JTA_transactions.html.md.erb
@@ -18,26 +18,36 @@ limitations under the License.
 -->
 
 
-Use JTA global transactions to coordinate <%=vars.product_name%> cache transactions and JDBC transactions.
+The Java Transaction API, JTA, is a standard Java interface you can use to coordinate
+<%=vars.product_name%> cache transactions and JDBC transactions globally under one umbrella. 
 
-JTA is a standard Java interface you can use to coordinate <%=vars.product_name%> cache transactions and JDBC transactions globally under one umbrella. JTA provides direct coordination between the <%=vars.product_name%> cache and another transactional resource, such as a database. The parties involved in a JTA transaction include:
+You can use JTA global transactions to coordinate <%=vars.product_name%> cache transactions and JDBC transactions.
+
+JTA provides direct coordination between the <%=vars.product_name%> cache and another transactional
+resource, such as a database. The parties involved in a JTA transaction include:
 
 -   The Java application, responsible for starting the global transaction
 -   The JTA transaction manager, responsible for opening, committing, and rolling back transactions
--   The transaction resource managers, including the <%=vars.product_name%> cache transaction manager and the JDBC resource manager, responsible for managing operations in the cache and database respectively
+- The transaction resource managers, including the <%=vars.product_name%> cache transaction manager
+and the JDBC resource manager, responsible for managing operations in the cache and database, respectively
 
-Using JTA, your application controls all transactions in the same standard way, whether the transactions act on the <%=vars.product_name%> cache, a JDBC resource, or both together. When a JTA global transaction is done, the <%=vars.product_name%> transaction and the database transaction are both complete.
+Using JTA, your application controls all transactions in the same standard way, whether the
+transactions act on the <%=vars.product_name%> cache, a JDBC resource, or both together. When a JTA
+global transaction is finished, the <%=vars.product_name%> transaction and the database transaction are
+both complete.
 
-When using JTA global transactions with <%=vars.product_name%>, you have three options:
+When using JTA global transactions with <%=vars.product_name%>, you have two options:
 
-1.  Coordinate with an external JTA transaction manager in a container (such as WebLogic or JBoss)
-2.  Set <%=vars.product_name%> as the “last resource” while using a container (such as WebLogic or JBoss) as the JTA transaction manager
-3.  Have <%=vars.product_name%> act as the JTA transaction manager
+-  Coordinate with an external JTA transaction manager in a container (such as WebLogic or JBoss)
+-  Set <%=vars.product_name%> as the “last resource” while using a container (such as WebLogic or JBoss) as the JTA transaction manager
 
-An application creates a global transaction by using `javax.transaction.UserTransaction` bound to the JNDI context `java:/UserTransaction` to start and terminate transactions. During the transaction, cache operations are done through <%=vars.product_name%> as usual as described in [<%=vars.product_name%> Cache Transactions](cache_transactions.html#topic_e15_mr3_5k).
+An application creates a global transaction by using `javax.transaction.UserTransaction` bound to
+the JNDI context `java:/UserTransaction` to start and terminate transactions. During the
+transaction, cache operations are done through <%=vars.product_name%> as usual as described in
+[<%=vars.product_name%> Cache Transactions](cache_transactions.html#topic_e15_mr3_5k).
 
 **Note:**
-See the Sun documentation for more information on topics such as JTA, `javax.transaction`, committing and rolling back global transactions, and the related exceptions.
+See the Java documentation for more information on topics such as JTA, `javax.transaction`, committing and rolling back global transactions, and the related exceptions.
 
 -   **[Coordinating with External JTA Transactions Managers](#concept_cp1_zx1_wk)**
 
@@ -45,11 +55,7 @@ See the Sun documentation for more information on topics such as JTA, `javax.tra
 
 -   **[Using <%=vars.product_name%> as the "Last Resource" in a Container-Managed JTA Transaction](#concept_csy_vfb_wk)**
 
-    The "last resource" feature in certain 3rd party containers such as WebLogic allow the use one non-XAResource (such as <%=vars.product_name%>) in a transaction with multiple XAResources while ensuring consistency.
-
--   **[Using <%=vars.product_name%> as the JTA Transaction Manager](#concept_8567sdkbigige)**
-
-    You can also use <%=vars.product_name%> as the JTA transaction manager.
+    The "last resource" feature in certain third party containers such as WebLogic allow the use one non-XAResource (such as <%=vars.product_name%>) in a transaction with multiple XAResources while ensuring consistency.
 
 -   **[Behavior of <%=vars.product_name%> Cache Writers and Loaders Under JTA](cache_plugins_with_jta.html)**
 
@@ -61,11 +67,15 @@ See the Sun documentation for more information on topics such as JTA, `javax.tra
 
 <a id="concept_cp1_zx1_wk"></a>
 
-# Coordinating with External JTA Transactions Managers
+# Coordinating with External JTA Transaction Managers
 
-<%=vars.product_name%> can work with the JTA transaction managers of several containers like JBoss, WebLogic, GlassFish, and so on.
+<%=vars.product_name%> can work with the JTA transaction managers of several containers such as JBoss, WebLogic, GlassFish, and so on.
 
-At startup <%=vars.product_name%> looks for a TransactionManager (`javax.transaction.TransactionManager`) that has been bound to its JNDI context. When <%=vars.product_name%> finds such an external transaction manager, all <%=vars.product_name%> region operations (such as get and put) will participate in global transactions hosted by this external JTA transaction manager.
+At startup <%=vars.product_name%> looks for a TransactionManager
+(`javax.transaction.TransactionManager`) that has been bound to its JNDI context. When
+<%=vars.product_name%> finds such an external transaction manager, all <%=vars.product_name%> region
+operations (such as get and put) will participate in global transactions hosted by this external JTA
+transaction manager.
 
 This figure shows the high-level operation of a JTA global transaction whose resources include a <%=vars.product_name%> cache and a database.
 
@@ -108,11 +118,25 @@ Use the following procedure to run a <%=vars.product_name%> global JTA transacti
 
 # Using <%=vars.product_name%> as the "Last Resource" in a Container-Managed JTA Transaction
 
-The "last resource" feature in certain 3rd party containers such as WebLogic allow the use one non-XAResource (such as <%=vars.product_name%>) in a transaction with multiple XAResources while ensuring consistency.
-
-In the previous two JTA transaction use cases, if the <%=vars.product_name%> member fails after the other data sources commit but before <%=vars.product_name%> receives the `afterCommit` callback, <%=vars.product_name%> and the other data sources may become inconsistent. To prevent this from occurring, you can use the container's "last resource optimization" feature, with <%=vars.product_name%> set as the "last resource". Using <%=vars.product_name%> as the last resource ensures that in  [...]
-
-To accomplish this, the application server container must use a JCA Resource Adapter to accomodate <%=vars.product_name%> as the transaction's last resource. The transaction manager of the container first issues a "prepare" message to the participating XAResources. If the XAResources all accept the transaction, then the manager issues a "commit" instruction to the non-XAResource (in this case, <%=vars.product_name%>). The non-XAResource (in this case, <%=vars.product_name%>) participates [...]
+The "last resource" feature in certain third party containers such as WebLogic allow the use of one
+non-XAResource (such as <%=vars.product_name%>) in a transaction with multiple XAResources while
+ensuring consistency.
+
+In the previous two JTA transaction use cases, if the <%=vars.product_name%> member fails after the
+other data sources commit but before <%=vars.product_name%> receives the `afterCommit` callback,
+<%=vars.product_name%> and the other data sources may become inconsistent. To prevent this from
+occurring, you can use the container's "last resource optimization" feature, with
+<%=vars.product_name%> set as the "last resource". Using <%=vars.product_name%> as the last resource
+ensures that in the event of failure, <%=vars.product_name%> remains consistent with the other
+XAResources involved in the transaction.
+
+To accomplish this, the application server container must use a JCA Resource Adapter to accomodate
+<%=vars.product_name%> as the transaction's last resource. The transaction manager of the container
+first issues a "prepare" message to the participating XAResources. If the XAResources all accept the
+transaction, then the manager issues a "commit" instruction to the non-XAResource (in this case,
+<%=vars.product_name%>). The non-XAResource (in this case, <%=vars.product_name%>) participates as a
+local transaction resource. If the non-XAResource fails, then the transaction manager can rollback
+the XAResources.
 
 <img src="../../images/transactions_jca_adapter.png" id="concept_csy_vfb_wk__image_opb_sgb_wk" class="image" />
 
@@ -151,12 +175,10 @@ path and file names:
     ```
 </li>
 </ol>
-3.  Make sure that the `geode-dependencies.jar` is accessible in 
-the CLASSPATH of the JTA transaction coordinator container.
-4.  Deploy the version-specific `geode-jca` RAR file on 
-the JTA transaction coordinator container.
-When deploying the file, you specify the JNDI name and so on. 
-5.  Configure <%=vars.product_name%> for any necessary transactional behavior. Enable `copy-on-read` and specify a transaction listener, if you need one. See [Setting Global Copy on Read](working_with_transactions.html#concept_vx2_gs4_5k) and [Configuring Transaction Plug-In Event Handlers](working_with_transactions.html#concept_ocw_vf1_wk) for details.
+3.  Make sure that the `geode-dependencies.jar` is accessible in the CLASSPATH of the JTA transaction coordinator container.
+4.  Deploy the version-specific `geode-jca` RAR file on the JTA transaction coordinator container. When deploying the file, you specify the JNDI name and so on. 
+5.  Configure <%=vars.product_name%> for any necessary transactional behavior. Enable `copy-on-read` and specify a transaction listener, if you need one.
+See [Setting Global Copy on Read](working_with_transactions.html#concept_vx2_gs4_5k) and [Configuring Transaction Plug-In Event Handlers](working_with_transactions.html#concept_ocw_vf1_wk) for details.
 6.  Get an initial context through `org.apache.geode.cache.GemFireCache.getJNDIContext`. For example:
 
     ``` pre
@@ -184,64 +206,3 @@ When deploying the file, you specify the JNDI name and so on.
     ```
 
 See [JCA Resource Adapter Example](jca_adapter_example.html#concept_swv_z2p_wk) for an example of how to set up a transaction using the JCA Resource Adapter.
-
-## <a id="concept_8567sdkbigige" class="no-quick-link"></a>Using <%=vars.product_name%> as the JTA Transaction Manager
-
-You can also use <%=vars.product_name%> as the JTA transaction manager.
-As of <%=vars.product_name%> 1.2, <%=vars.product_name%>'s JTA transaction manager is deprecated.
-
-<%=vars.product_name%> ships with its own implementation of a JTA transaction manager. However, note that this implementation is not XA-compliant; therefore, it does not persist any state, which could lead to an inconsistent state after recovering a crashed member.
-
-<img src="../../images/transactions_jta.png" id="concept_8567sdkbigige__image_C8D94070E55F4BCC8B5FF3D5BEBA99ED" class="image" />
-
-The <%=vars.product_name%> JTA transaction manager is initialized when the <%=vars.product_name%> cache is initialized. Until then, JTA is not available for use. The application starts a JTA transaction by using the `UserTransaction.begin` method. The `UserTransaction` object is the application’s handle to instruct the JTA transaction manager on what to do.
-
-The <%=vars.product_name%> JTA implementation also supports the J2EE Connector Architecture (JCA) `ManagedConnectionFactory`.
-
-The <%=vars.product_name%> implementation of JTA has the following limitations:
-
--   Only one JDBC database instance per transaction is allowed, although you can have multiple connections to that database.
--   Multiple threads cannot participate in a transaction.
--   Transaction recovery after a crash is not supported.
-
-In addition, JTA transactions are subject to the limitations of <%=vars.product_name%> cache transactions such as not being supported on regions with global scope. When a global transaction needs to access the <%=vars.product_name%> cache, JTA silently starts a <%=vars.product_name%> cache transaction.
-
-<a id="task_qjv_khb_wk"></a>
-
-# How to Run a JTA Global Transaction Using <%=vars.product_name%> as the JTA Transaction Manager
-
-This topic describes how to run a JTA global transaction in <%=vars.product_name%> .
-
-To run a global transaction, perform the following steps:
-
-1. Configure the external data sources in the `cache.xml` file. See [Configuring Database Connections Using JNDI](configuring_db_connections_using_JNDI.html#topic_A5E3A67C808D48C08E1F0DC167C5C494) for examples. 
-2. Include the JAR file for any data sources in your CLASSPATH. 
-3.  Configure <%=vars.product_name%> for any necessary transactional behavior. Enable `copy-on-read` for your cache and specify a transaction listener, if you need one. See [Setting Global Copy on Read](working_with_transactions.html#concept_vx2_gs4_5k) and [Configuring Transaction Plug-In Event Handlers](working_with_transactions.html#concept_ocw_vf1_wk) for details. 
-4.  Make sure that JTA transactions are not disabled in the `cache.xml` file or the application code. 
-5.  Initialize the <%=vars.product_name%> cache. 
-6.  Get an initial context through `org.apache.geode.cache.GemFireCache.getJNDIContext`. For example: 
-
-    ``` pre
-    Context ctx = cache.getJNDIContext();
-    ```
-
-    This returns `javax.naming.Context` and gives you the JNDI associated with the cache. The context contains the `TransactionManager`, `UserTransaction`, and any configured JDBC resource manager.
-
-7.  Look up the `UserTransaction` context: 
-
-    ``` pre
-    UserTransaction txManager = (UserTransaction) ctx.lookup("java:/UserTransaction");
-    ```
-
-    With `UserTransaction`, you can begin, commit, and rollback transactions.
-    If a global transaction exists when you use the cache, it automatically joins the transaction. Operations on a region automatically detect and become associated with the existing global transaction through JTA synchronization. If the global transaction has been marked for rollback, however, the <%=vars.product_name%> cache is not allowed to enlist with that transaction. Any cache operation that causes an attempt to enlist throws a `FailedSynchronizationException`.
-
-    The <%=vars.product_name%> cache transaction’s commit or rollback is triggered when the global transaction commits or rolls back. When the global transaction is committed using the `UserTransaction` interface, the transactions of any registered JTA resources are committed, including the <%=vars.product_name%> cache transaction. If the cache or database transaction fails to commit, the `UserTransaction` call throws a `TransactionRolledBackException`. If a commit or rollback is attempt [...]
-
-See [<%=vars.product_name%> JTA Transaction Example](transaction_jta_gemfire_example.html#concept_ffg_sj5_1l).
-
--   **[Configuring Database Connections Using JNDI](configuring_db_connections_using_JNDI.html)**
-
--   **[Example DataSource Configurations in cache.xml](configuring_db_connections_using_JNDI.html#topic_F67EC20067124A618A8099AB4CBF634C)**
-
-
diff --git a/geode-docs/developing/transactions/cache_plugins_with_jta.html.md.erb b/geode-docs/developing/transactions/cache_plugins_with_jta.html.md.erb
index 7df64bc..e95dc99 100644
--- a/geode-docs/developing/transactions/cache_plugins_with_jta.html.md.erb
+++ b/geode-docs/developing/transactions/cache_plugins_with_jta.html.md.erb
@@ -19,7 +19,13 @@ limitations under the License.
 
 When <%=vars.product_name%> participates in a global transactions, you can still have <%=vars.product_name%> cache writers and cache loaders operating in the usual way.
 
-For example, in addition to the transactional connection to the database, the region could also have a cache writer and cache loader configured to exchange data with that same database. As long as the data source is transactional, which means that it can detect the transaction manager, the cache writer and cache loader participate in the transaction. If the JTA rolls back its transaction, the changes made by the cache loader and the cache writer are rolled back. For more on transactional [...]
+For example, in addition to the transactional connection to the database, the region could also have
+a cache writer and cache loader configured to exchange data with that same database. As long as the
+data source is transactional, which means that it can detect the transaction manager, the cache
+writer and cache loader participate in the transaction. If the JTA rolls back its transaction, the
+changes made by the cache loader and the cache writer are rolled back. For more on transactional
+data sources, see the discussion of XAPooledDataSource and ManagedDataSource in 
+[Configuring Database Connections Using JNDI](../outside_data_sources/configuring_db_connections_using_JNDI.html).
 
 If you are using a <%=vars.product_name%> cache or transaction listener with global transactions, be aware that the EntryEvent returned by a transaction has the <%=vars.product_name%> transaction ID, not the JTA transaction ID.
 
diff --git a/geode-docs/developing/transactions/transaction_coding_examples.html.md.erb b/geode-docs/developing/transactions/transaction_coding_examples.html.md.erb
index bb13deb..c2dd517 100644
--- a/geode-docs/developing/transactions/transaction_coding_examples.html.md.erb
+++ b/geode-docs/developing/transactions/transaction_coding_examples.html.md.erb
@@ -33,10 +33,6 @@ This section provides several code examples for writing and executing transactio
 
     This example demonstrates a function that does transactional updates to Customer and Order regions.
 
--   **[<%=vars.product_name%> JTA Transaction Example](transaction_jta_gemfire_example.html)**
-
-    An example code fragment shows how to run a JTA global transaction using <%=vars.product_name%> as the JTA transaction manager.
-
 -   **[JCA Resource Adapter Example](jca_adapter_example.html)**
 
     This example shows how to use the JCA Resource Adapter in <%=vars.product_name%> .
diff --git a/geode-docs/developing/transactions/transaction_jta_gemfire_example.html.md.erb b/geode-docs/developing/transactions/transaction_jta_gemfire_example.html.md.erb
deleted file mode 100644
index 8f0b1ad..0000000
--- a/geode-docs/developing/transactions/transaction_jta_gemfire_example.html.md.erb
+++ /dev/null
@@ -1,46 +0,0 @@
-<% set_title(product_name, "JTA Transaction Example") %>
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-
-An example code fragment shows how to run a JTA global transaction using <%=vars.product_name%> as the JTA transaction manager.
-
-The external data sources used in this transaction are configured in the `cache.xml` file. See [Configuring Database Connections Using JNDI](configuring_db_connections_using_JNDI.html#topic_A5E3A67C808D48C08E1F0DC167C5C494) for a configuration example.
-
-``` pre
-Region r = ...; // the  region data source 
-ds = ...; // other data source    
-
-  try  {     
-         Context ctx = cache.getJNDIContext();      
-         Connection conn =  null;
-         UserTransaction tx = (UserTransaction) ctx.lookup("java:/UserTransaction");     
-         tx.begin();
-         conn = ds.getConnection();
-         Statement stmt = conn.createStatement();
-         String sqlSTR =  "insert into " + tableName + " values (........ )";
-         stmt.executeUpdate(sqlSTR);   
-         r.put("key", "value");
-         stmt.close();     
-         tx.commit();
-         conn.close();
-   } catch (NamingException e) { 
-         // handle the exception   
-   }
-```
-
-
diff --git a/geode-docs/images/transactions_jta.png b/geode-docs/images/transactions_jta.png
deleted file mode 100644
index f2408f6..0000000
Binary files a/geode-docs/images/transactions_jta.png and /dev/null differ
diff --git a/geode-docs/reference/topics/cache_xml.html.md.erb b/geode-docs/reference/topics/cache_xml.html.md.erb
index f44025e..367bd2f 100644
--- a/geode-docs/reference/topics/cache_xml.html.md.erb
+++ b/geode-docs/reference/topics/cache_xml.html.md.erb
@@ -2609,7 +2609,7 @@ entry's key is retained in the cache.</td>
 
 ## <a id="jndi-bindings" class="no-quick-link"></a>&lt;jndi-bindings&gt;
 
-Specifies the binding for a data-source used in transaction management. See [Configuring Database Connections Using JNDI](../../developing/transactions/configuring_db_connections_using_JNDI.html#topic_A5E3A67C808D48C08E1F0DC167C5C494).
+Specifies the binding for a data-source used in transaction management. See [Configuring Database Connections Using JNDI](../../developing/outside_data_sources/configuring_db_connections_using_JNDI.html).
 
 **Example:**
 
@@ -2807,7 +2807,7 @@ A configuration property of the datasource. Use the sub-elements to identify the
 </config-property>
 ```
 
-Configuration properties vary depending on the database vendor. See [Configuring Database Connections Using JNDI](../../developing/transactions/configuring_db_connections_using_JNDI.html#topic_A5E3A67C808D48C08E1F0DC167C5C494) for examples of different configuration property configurations.
+Configuration properties vary depending on the database vendor. See [Configuring Database Connections Using JNDI](../../developing/outside_data_sources/configuring_db_connections_using_JNDI.html) for examples of different configuration property configurations.
 
 ## <a id="config-property-name" class="no-quick-link"></a>&lt;config-property-name&gt;
 
diff --git a/geode-docs/reference/topics/client-cache.html.md.erb b/geode-docs/reference/topics/client-cache.html.md.erb
index 873ecec..52b54a9 100644
--- a/geode-docs/reference/topics/client-cache.html.md.erb
+++ b/geode-docs/reference/topics/client-cache.html.md.erb
@@ -1687,7 +1687,7 @@ Specify the Java class and its initialization parameters with the `<class-name>`
 
 ## <a id="cc-jndi-bindings" class="no-quick-link"></a>&lt;jndi-bindings&gt;
 
-Specifies the binding for a data-source used in transaction management. See [Configuring Database Connections Using JNDI](../../developing/transactions/configuring_db_connections_using_JNDI.html#topic_A5E3A67C808D48C08E1F0DC167C5C494).
+Specifies the binding for a data-source used in transaction management. See [Configuring Database Connections Using JNDI](../../developing/outside_data_sources/configuring_db_connections_using_JNDI.html).
 
 **Example:**
 
@@ -1891,7 +1891,7 @@ A configuration property of the datasource. Use the sub-elements to identify the
 </config-property>
 ```
 
-Configuration properties vary depending on the database vendor. See [Configuring Database Connections Using JNDI](../../developing/transactions/configuring_db_connections_using_JNDI.html#topic_A5E3A67C808D48C08E1F0DC167C5C494) for examples of different configuration property configurations.
+Configuration properties vary depending on the database vendor. See [Configuring Database Connections Using JNDI](../../developing/outside_data_sources/configuring_db_connections_using_JNDI.html) for examples of different configuration property configurations.
 
 ## <a id="cc-config-property-name" class="no-quick-link"></a>&lt;config-property-name&gt;
 

-- 
To stop receiving notification emails like this one, please contact
dbarnes@apache.org.