You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2018/09/05 21:07:18 UTC

commons-dbcp git commit: [DBCP-520] BasicManagedDataSource needs to pass the TSR with creating DataSourceXAConnectionFactory. Closes #18.

Repository: commons-dbcp
Updated Branches:
  refs/heads/master 5d46f2481 -> d49d45eba


[DBCP-520] BasicManagedDataSource needs to pass the TSR with creating
DataSourceXAConnectionFactory. Closes #18.

Project: http://git-wip-us.apache.org/repos/asf/commons-dbcp/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-dbcp/commit/d49d45eb
Tree: http://git-wip-us.apache.org/repos/asf/commons-dbcp/tree/d49d45eb
Diff: http://git-wip-us.apache.org/repos/asf/commons-dbcp/diff/d49d45eb

Branch: refs/heads/master
Commit: d49d45eba50fae24715a78df93bf5d951c82c6ac
Parents: 5d46f24
Author: Gary Gregory <gg...@rocketsoftware.com>
Authored: Wed Sep 5 15:07:14 2018 -0600
Committer: Gary Gregory <gg...@rocketsoftware.com>
Committed: Wed Sep 5 15:07:14 2018 -0600

----------------------------------------------------------------------
 src/changes/changes.xml                         |  3 +
 .../dbcp2/managed/BasicManagedDataSource.java   |  5 +-
 .../managed/TestBasicManagedDataSource.java     | 67 +++++++++++++++++---
 3 files changed, 63 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/d49d45eb/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 8d69d58..c0b2c3c 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -79,6 +79,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action dev="ggregory" type="add" issue="DBCP-519" due-to="Gary Gregory">
         Add some toString() methods for debugging (never printing passwords.)
       </action>
+      <action dev="ggregory" type="update" issue="DBCP-520" due-to="Zheng Feng">
+        BasicManagedDataSource needs to pass the TSR with creating DataSourceXAConnectionFactory.
+      </action>
     </release>
     <release version="2.5.0" date="2018-07-15" description="This is a minor release, including bug fixes and enhancements.">
       <action dev="ggregory" type="update" issue="DBCP-505" due-to="Gary Gregory">

http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/d49d45eb/src/main/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java b/src/main/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java
index 769fe5d..723f41a 100644
--- a/src/main/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java
+++ b/src/main/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java
@@ -22,6 +22,7 @@ import org.apache.commons.dbcp2.ConnectionFactory;
 import org.apache.commons.dbcp2.PoolableConnection;
 import org.apache.commons.dbcp2.PoolableConnectionFactory;
 import org.apache.commons.dbcp2.PoolingDataSource;
+import org.apache.commons.dbcp2.Utils;
 
 import javax.sql.DataSource;
 import javax.sql.XADataSource;
@@ -63,7 +64,7 @@ public class BasicManagedDataSource extends BasicDataSource {
     /** XA data source instance */
     private XADataSource xaDataSourceInstance;
 
-    /** Transaction Manager */
+    /** Transaction Synchronization Registry */
     private transient TransactionSynchronizationRegistry transactionSynchronizationRegistry;
 
     /**
@@ -198,7 +199,7 @@ public class BasicManagedDataSource extends BasicDataSource {
 
         // finally, create the XAConnectionFactory using the XA data source
         final XAConnectionFactory xaConnectionFactory = new DataSourceXAConnectionFactory(getTransactionManager(),
-                xaDataSourceInstance, getUsername(), getPassword());
+                xaDataSourceInstance, getUsername(), Utils.toCharArray(getPassword()), getTransactionSynchronizationRegistry());
         transactionRegistry = xaConnectionFactory.getTransactionRegistry();
         return xaConnectionFactory;
     }

http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/d49d45eb/src/test/java/org/apache/commons/dbcp2/managed/TestBasicManagedDataSource.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/dbcp2/managed/TestBasicManagedDataSource.java b/src/test/java/org/apache/commons/dbcp2/managed/TestBasicManagedDataSource.java
index 95dc424..8293ef4 100644
--- a/src/test/java/org/apache/commons/dbcp2/managed/TestBasicManagedDataSource.java
+++ b/src/test/java/org/apache/commons/dbcp2/managed/TestBasicManagedDataSource.java
@@ -17,16 +17,8 @@
  */
 package org.apache.commons.dbcp2.managed;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
-
-import java.sql.SQLException;
-
-import javax.sql.XADataSource;
-import javax.transaction.xa.XAException;
-
+import com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple;
+import com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionSynchronizationRegistryImple;
 import org.apache.commons.dbcp2.BasicDataSource;
 import org.apache.commons.dbcp2.TestBasicDataSource;
 import org.apache.geronimo.transaction.manager.TransactionManagerImpl;
@@ -34,6 +26,19 @@ import org.h2.Driver;
 import org.h2.jdbcx.JdbcDataSource;
 import org.junit.Test;
 
+import javax.sql.XADataSource;
+import javax.transaction.Synchronization;
+import javax.transaction.TransactionManager;
+import javax.transaction.TransactionSynchronizationRegistry;
+import javax.transaction.xa.XAException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
 /**
  * TestSuite for BasicManagedDataSource
  */
@@ -171,4 +176,46 @@ public class TestBasicManagedDataSource extends TestBasicDataSource {
             assertNull(basicManagedDataSource.getXaDataSourceInstance());
         }
     }
+
+    @Test
+    public void testTransactionSynchronizationRegistry() throws Exception {
+        try (final BasicManagedDataSource basicManagedDataSource = new BasicManagedDataSource()) {
+            basicManagedDataSource.setTransactionManager(new TransactionManagerImple());
+            TransactionSynchronizationRegistry tsr = new TransactionSynchronizationRegistryImple();
+            basicManagedDataSource.setTransactionSynchronizationRegistry(tsr);
+            JdbcDataSource xaDataSource = new JdbcDataSource();
+            xaDataSource.setUrl("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1");
+            basicManagedDataSource.setXaDataSourceInstance(xaDataSource);
+            basicManagedDataSource.setMaxIdle(1);
+
+            TransactionManager tm = basicManagedDataSource.getTransactionManager();
+            tm.begin();
+            tsr.registerInterposedSynchronization(new Synchronization() {
+                @Override
+                public void beforeCompletion() {
+                    Connection connection = null;
+                    try {
+                        connection = basicManagedDataSource.getConnection();
+                        assertNotNull(connection);
+                    } catch (SQLException e) {
+                        fail(e.getMessage());
+                    } finally {
+                        if (connection != null) {
+                            try {
+                                connection.close();
+                            } catch (SQLException e) {
+                                fail(e.getMessage());
+                            }
+                        }
+                    }
+                }
+
+                @Override
+                public void afterCompletion(int i) {
+
+                }
+            });
+            tm.commit();
+        }
+    }
 }