You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/05/18 02:06:54 UTC
[shardingsphere] branch master updated: Fix sonar volatile issue in `XAConnectionWrapper` (#25739)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 268921ae7ac Fix sonar volatile issue in `XAConnectionWrapper` (#25739)
268921ae7ac is described below
commit 268921ae7ac09c5a9285dd0ec8b9574f098b2d48
Author: ZhangCheng <ch...@apache.org>
AuthorDate: Thu May 18 10:06:47 2023 +0800
Fix sonar volatile issue in `XAConnectionWrapper` (#25739)
* Fix sonar volatile problem in `XAConnectionWrapper`
* fix
* Fix
---
.../connection/dialect/H2XAConnectionWrapper.java | 20 ++++++++++----------
.../dialect/MariaDBXAConnectionWrapper.java | 16 ++++++++--------
.../connection/dialect/MySQLXAConnectionWrapper.java | 16 ++++++++--------
.../dialect/OpenGaussXAConnectionWrapper.java | 16 ++++++++--------
.../dialect/OracleXAConnectionWrapper.java | 16 ++++++++--------
.../dialect/PostgreSQLXAConnectionWrapper.java | 16 ++++++++--------
.../xa/jta/datasource/XATransactionDataSource.java | 8 ++++----
7 files changed, 54 insertions(+), 54 deletions(-)
diff --git a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/H2XAConnectionWrapper.java b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/H2XAConnectionWrapper.java
index 3e2109abf4d..1f26bcb376b 100644
--- a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/H2XAConnectionWrapper.java
+++ b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/H2XAConnectionWrapper.java
@@ -26,6 +26,7 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.SQLException;
+import java.util.Properties;
/**
* XA connection wrapper for H2.
@@ -34,25 +35,24 @@ public final class H2XAConnectionWrapper implements XAConnectionWrapper {
private static final int XA_DATA_SOURCE_TRACE_TYPE_ID = 13;
- private static volatile Class<Connection> jdbcConnectionClass;
+ private Class<Connection> jdbcConnectionClass;
- private static volatile Constructor<?> xaConnectionConstructor;
+ private Constructor<?> xaConnectionConstructor;
- private static volatile Method nextIdMethod;
+ private Method nextIdMethod;
- private static volatile Object dataSourceFactory;
-
- private static volatile boolean initialized;
+ private Object dataSourceFactory;
@Override
public XAConnection wrap(final XADataSource xaDataSource, final Connection connection) throws SQLException {
- if (!initialized) {
- loadReflection();
- initialized = true;
- }
return createXAConnection(connection.unwrap(jdbcConnectionClass));
}
+ @Override
+ public void init(final Properties props) {
+ loadReflection();
+ }
+
private void loadReflection() {
jdbcConnectionClass = getJDBCConnectionClass();
xaConnectionConstructor = getXAConnectionConstructor();
diff --git a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/MariaDBXAConnectionWrapper.java b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/MariaDBXAConnectionWrapper.java
index 0ffbb668bce..90aaaaa3e47 100644
--- a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/MariaDBXAConnectionWrapper.java
+++ b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/MariaDBXAConnectionWrapper.java
@@ -25,27 +25,27 @@ import javax.sql.XADataSource;
import java.lang.reflect.Constructor;
import java.sql.Connection;
import java.sql.SQLException;
+import java.util.Properties;
/**
* XA connection wrapper for MariaDB.
*/
public final class MariaDBXAConnectionWrapper implements XAConnectionWrapper {
- private static volatile Class<Connection> jdbcConnectionClass;
+ private Class<Connection> jdbcConnectionClass;
- private static volatile Constructor<?> xaConnectionConstructor;
-
- private static volatile boolean initialized;
+ private Constructor<?> xaConnectionConstructor;
@Override
public XAConnection wrap(final XADataSource xaDataSource, final Connection connection) throws SQLException {
- if (!initialized) {
- loadReflection();
- initialized = true;
- }
return createXAConnection(connection.unwrap(jdbcConnectionClass));
}
+ @Override
+ public void init(final Properties props) {
+ loadReflection();
+ }
+
private void loadReflection() {
jdbcConnectionClass = getJDBCConnectionClass();
xaConnectionConstructor = getXAConnectionConstructor();
diff --git a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/MySQLXAConnectionWrapper.java b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/MySQLXAConnectionWrapper.java
index 3430155ef04..22db6ef23ba 100644
--- a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/MySQLXAConnectionWrapper.java
+++ b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/MySQLXAConnectionWrapper.java
@@ -25,27 +25,27 @@ import javax.sql.XADataSource;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.SQLException;
+import java.util.Properties;
/**
* XA connection wrapper for MySQL.
*/
public final class MySQLXAConnectionWrapper implements XAConnectionWrapper {
- private static volatile Class<Connection> jdbcConnectionClass;
+ private Class<Connection> jdbcConnectionClass;
- private static volatile Method xaConnectionCreatorMethod;
-
- private static volatile boolean initialized;
+ private Method xaConnectionCreatorMethod;
@Override
public XAConnection wrap(final XADataSource xaDataSource, final Connection connection) throws SQLException {
- if (!initialized) {
- loadReflection();
- initialized = true;
- }
return createXAConnection(xaDataSource, connection.unwrap(jdbcConnectionClass));
}
+ @Override
+ public void init(final Properties props) {
+ loadReflection();
+ }
+
private void loadReflection() {
jdbcConnectionClass = getJDBCConnectionClass();
xaConnectionCreatorMethod = getXAConnectionCreatorMethod();
diff --git a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/OpenGaussXAConnectionWrapper.java b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/OpenGaussXAConnectionWrapper.java
index 39e7ee0dccf..5b23811d504 100644
--- a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/OpenGaussXAConnectionWrapper.java
+++ b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/OpenGaussXAConnectionWrapper.java
@@ -25,27 +25,27 @@ import javax.sql.XADataSource;
import java.lang.reflect.Constructor;
import java.sql.Connection;
import java.sql.SQLException;
+import java.util.Properties;
/**
* XA connection wrapper for openGauss.
*/
public final class OpenGaussXAConnectionWrapper implements XAConnectionWrapper {
- private static volatile Class<Connection> jdbcConnectionClass;
+ private Class<Connection> jdbcConnectionClass;
- private static volatile Constructor<?> xaConnectionConstructor;
-
- private static volatile boolean initialized;
+ private Constructor<?> xaConnectionConstructor;
@Override
public XAConnection wrap(final XADataSource xaDataSource, final Connection connection) throws SQLException {
- if (!initialized) {
- loadReflection();
- initialized = true;
- }
return createXAConnection(connection.unwrap(jdbcConnectionClass));
}
+ @Override
+ public void init(final Properties props) {
+ loadReflection();
+ }
+
private void loadReflection() {
jdbcConnectionClass = getJDBCConnectionClass();
xaConnectionConstructor = getXAConnectionConstructor();
diff --git a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/OracleXAConnectionWrapper.java b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/OracleXAConnectionWrapper.java
index 2cd070745d3..bf3eec5a94b 100644
--- a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/OracleXAConnectionWrapper.java
+++ b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/OracleXAConnectionWrapper.java
@@ -25,27 +25,27 @@ import javax.sql.XADataSource;
import java.lang.reflect.Constructor;
import java.sql.Connection;
import java.sql.SQLException;
+import java.util.Properties;
/**
* XA connection wrapper for Oracle.
*/
public final class OracleXAConnectionWrapper implements XAConnectionWrapper {
- private static volatile Class<Connection> jdbcConnectionClass;
+ private Class<Connection> jdbcConnectionClass;
- private static volatile Constructor<?> xaConnectionConstructor;
-
- private static volatile boolean initialized;
+ private Constructor<?> xaConnectionConstructor;
@Override
public XAConnection wrap(final XADataSource xaDataSource, final Connection connection) throws SQLException {
- if (!initialized) {
- loadReflection();
- initialized = true;
- }
return createXAConnection(connection.unwrap(jdbcConnectionClass));
}
+ @Override
+ public void init(final Properties props) {
+ loadReflection();
+ }
+
private void loadReflection() {
jdbcConnectionClass = getJDBCConnectionClass();
xaConnectionConstructor = getXAConnectionConstructor();
diff --git a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/PostgreSQLXAConnectionWrapper.java b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/PostgreSQLXAConnectionWrapper.java
index eb9015b3f72..ee08e14ff96 100644
--- a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/PostgreSQLXAConnectionWrapper.java
+++ b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/connection/dialect/PostgreSQLXAConnectionWrapper.java
@@ -25,27 +25,27 @@ import javax.sql.XADataSource;
import java.lang.reflect.Constructor;
import java.sql.Connection;
import java.sql.SQLException;
+import java.util.Properties;
/**
* XA connection wrapper for PostgreSQL.
*/
public final class PostgreSQLXAConnectionWrapper implements XAConnectionWrapper {
- private static volatile Class<Connection> jdbcConnectionClass;
+ private Class<Connection> jdbcConnectionClass;
- private static volatile Constructor<?> xaConnectionConstructor;
-
- private static volatile boolean initialized;
+ private Constructor<?> xaConnectionConstructor;
@Override
public XAConnection wrap(final XADataSource xaDataSource, final Connection connection) throws SQLException {
- if (!initialized) {
- loadReflection();
- initialized = true;
- }
return createXAConnection(connection.unwrap(jdbcConnectionClass));
}
+ @Override
+ public void init(final Properties props) {
+ loadReflection();
+ }
+
private void loadReflection() {
jdbcConnectionClass = getJDBCConnectionClass();
xaConnectionConstructor = getXAConnectionConstructor();
diff --git a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/datasource/XATransactionDataSource.java b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/datasource/XATransactionDataSource.java
index becae73e49a..3284a410cc1 100644
--- a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/datasource/XATransactionDataSource.java
+++ b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/datasource/XATransactionDataSource.java
@@ -50,22 +50,22 @@ public final class XATransactionDataSource implements AutoCloseable {
private final ThreadLocal<Map<Transaction, Connection>> enlistedTransactions = ThreadLocal.withInitial(HashMap::new);
- private final DatabaseType databaseType;
-
private final String resourceName;
private final DataSource dataSource;
private XADataSource xaDataSource;
+ private XAConnectionWrapper xaConnectionWrapper;
+
private XATransactionManagerProvider xaTransactionManagerProvider;
public XATransactionDataSource(final DatabaseType databaseType, final String resourceName, final DataSource dataSource, final XATransactionManagerProvider xaTransactionManagerProvider) {
- this.databaseType = databaseType;
this.resourceName = resourceName;
this.dataSource = dataSource;
if (!CONTAINER_DATASOURCE_NAMES.contains(dataSource.getClass().getSimpleName())) {
xaDataSource = new DataSourceSwapper(TypedSPILoader.getService(XADataSourceDefinition.class, databaseType.getType())).swap(dataSource);
+ xaConnectionWrapper = TypedSPILoader.getService(XAConnectionWrapper.class, databaseType.getType());
this.xaTransactionManagerProvider = xaTransactionManagerProvider;
xaTransactionManagerProvider.registerRecoveryResource(resourceName, xaDataSource);
}
@@ -86,7 +86,7 @@ public final class XATransactionDataSource implements AutoCloseable {
Transaction transaction = xaTransactionManagerProvider.getTransactionManager().getTransaction();
if (!enlistedTransactions.get().containsKey(transaction)) {
Connection connection = dataSource.getConnection();
- XAConnection xaConnection = TypedSPILoader.getService(XAConnectionWrapper.class, databaseType.getType()).wrap(xaDataSource, connection);
+ XAConnection xaConnection = xaConnectionWrapper.wrap(xaDataSource, connection);
transaction.enlistResource(new SingleXAResource(resourceName, xaConnection.getXAResource()));
transaction.registerSynchronization(new Synchronization() {