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();
+ }
+ }
}