You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ds...@apache.org on 2018/10/16 00:16:30 UTC
[geode] branch feature/GEODE-5861 updated: changed some tests to
use jndi-binding instead of jdbc-connection
This is an automated email from the ASF dual-hosted git repository.
dschneider pushed a commit to branch feature/GEODE-5861
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/feature/GEODE-5861 by this push:
new a6bacb7 changed some tests to use jndi-binding instead of jdbc-connection
a6bacb7 is described below
commit a6bacb75184d9773de9ef9c7bf9bfb4896bfc1bd
Author: Darrel Schneider <ds...@pivotal.io>
AuthorDate: Mon Oct 15 17:15:28 2018 -0700
changed some tests to use jndi-binding instead of jdbc-connection
---
.../geode/connectors/jdbc/JdbcDistributedTest.java | 5 ++-
.../geode/connectors/jdbc/internal/SqlHandler.java | 50 +++++++++++++---------
.../connectors/jdbc/internal/SqlHandlerTest.java | 26 ++++++-----
.../apache/geode/internal/jndi/JNDIInvoker.java | 4 ++
4 files changed, 49 insertions(+), 36 deletions(-)
diff --git a/geode-connectors/src/acceptanceTest/java/org/apache/geode/connectors/jdbc/JdbcDistributedTest.java b/geode-connectors/src/acceptanceTest/java/org/apache/geode/connectors/jdbc/JdbcDistributedTest.java
index e19fea8..400d82f 100644
--- a/geode-connectors/src/acceptanceTest/java/org/apache/geode/connectors/jdbc/JdbcDistributedTest.java
+++ b/geode-connectors/src/acceptanceTest/java/org/apache/geode/connectors/jdbc/JdbcDistributedTest.java
@@ -248,7 +248,7 @@ public abstract class JdbcDistributedTest implements Serializable {
Region<Object, Object> region = ClusterStartupRule.getCache().getRegion(REGION_NAME);
assertThatThrownBy(() -> region.put("key1", pdxEmployee1))
.isExactlyInstanceOf(JdbcConnectorException.class).hasMessage(
- "JDBC connection with name TestConnection not found. Create the connection with the gfsh command 'create jdbc-connection'");
+ "JDBC connection with name TestConnection not found. Create the connection with the gfsh command 'create jndi-binding'");
});
}
@@ -608,7 +608,8 @@ public abstract class JdbcDistributedTest implements Serializable {
private void createJdbcConnection() {
final String commandStr =
- "create jdbc-connection --name=" + CONNECTION_NAME + " --url=" + connectionUrl;
+ "create jndi-binding --type=HIKARI --name=" + CONNECTION_NAME + " --jdbc-driver-class=none"
+ + " --connection-url=" + connectionUrl;
gfsh.executeAndAssertThat(commandStr).statusIsSuccess();
}
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/SqlHandler.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/SqlHandler.java
index dbdf074..5eb18dd 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/SqlHandler.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/SqlHandler.java
@@ -23,6 +23,8 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import javax.sql.DataSource;
+
import org.apache.geode.InternalGemFireException;
import org.apache.geode.annotations.Experimental;
import org.apache.geode.cache.Operation;
@@ -30,6 +32,7 @@ import org.apache.geode.cache.Region;
import org.apache.geode.connectors.jdbc.JdbcConnectorException;
import org.apache.geode.connectors.jdbc.internal.configuration.ConnectorService;
import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.jndi.JNDIInvoker;
import org.apache.geode.pdx.PdxInstance;
@Experimental
@@ -37,20 +40,41 @@ public class SqlHandler {
private final JdbcConnectorService configService;
private final DataSourceManager manager;
private final TableMetaDataManager tableMetaDataManager;
+ private final DataSourceFactory dataSourceFactory;
- public SqlHandler(DataSourceManager manager, TableMetaDataManager tableMetaDataManager,
- JdbcConnectorService configService) {
+ SqlHandler(DataSourceManager manager, TableMetaDataManager tableMetaDataManager,
+ JdbcConnectorService configService, DataSourceFactory dataSourceFactory) {
this.manager = manager;
this.tableMetaDataManager = tableMetaDataManager;
this.configService = configService;
+ this.dataSourceFactory = dataSourceFactory;
+ }
+
+ public SqlHandler(DataSourceManager manager, TableMetaDataManager tableMetaDataManager,
+ JdbcConnectorService configService) {
+ this(manager, tableMetaDataManager, configService,
+ dataSourceName -> JNDIInvoker.getDataSource(dataSourceName));
+ }
+
+ public interface DataSourceFactory {
+ public DataSource getDataSource(String dataSourceName);
}
public void close() {
manager.close();
}
- Connection getConnection(ConnectorService.Connection config) throws SQLException {
- return manager.getOrCreateDataSource(config).getConnection();
+ Connection getConnection(String connectionName) throws SQLException {
+ return getDataSource(connectionName).getConnection();
+ }
+
+ DataSource getDataSource(String connectionName) {
+ DataSource dataSource = this.dataSourceFactory.getDataSource(connectionName);
+ if (dataSource == null) {
+ throw new JdbcConnectorException("JDBC connection with name " + connectionName
+ + " not found. Create the connection with the gfsh command 'create jndi-binding'");
+ }
+ return dataSource;
}
public <K, V> PdxInstance read(Region<K, V> region, K key) throws SQLException {
@@ -59,10 +83,8 @@ public class SqlHandler {
}
ConnectorService.RegionMapping regionMapping = getMappingForRegion(region.getName());
- ConnectorService.Connection connectionConfig =
- getConnectionConfig(regionMapping.getConnectionConfigName());
PdxInstance result;
- try (Connection connection = getConnection(connectionConfig)) {
+ try (Connection connection = getConnection(regionMapping.getConnectionConfigName())) {
TableMetaDataView tableMetaData = this.tableMetaDataManager.getTableMetaDataView(connection,
regionMapping.getRegionToTableName());
EntryColumnData entryColumnData =
@@ -96,16 +118,6 @@ public class SqlHandler {
return regionMapping;
}
- private ConnectorService.Connection getConnectionConfig(String connectionConfigName) {
- ConnectorService.Connection connectionConfig =
- this.configService.getConnectionConfig(connectionConfigName);
- if (connectionConfig == null) {
- throw new JdbcConnectorException("JDBC connection with name " + connectionConfigName
- + " not found. Create the connection with the gfsh command 'create jdbc-connection'");
- }
- return connectionConfig;
- }
-
private void setValuesInStatement(PreparedStatement statement, EntryColumnData entryColumnData)
throws SQLException {
int index = 0;
@@ -158,10 +170,8 @@ public class SqlHandler {
throw new IllegalArgumentException("PdxInstance cannot be null for non-destroy operations");
}
ConnectorService.RegionMapping regionMapping = getMappingForRegion(region.getName());
- ConnectorService.Connection connectionConfig =
- getConnectionConfig(regionMapping.getConnectionConfigName());
- try (Connection connection = getConnection(connectionConfig)) {
+ try (Connection connection = getConnection(regionMapping.getConnectionConfigName())) {
TableMetaDataView tableMetaData = this.tableMetaDataManager.getTableMetaDataView(connection,
regionMapping.getRegionToTableName());
EntryColumnData entryColumnData =
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/SqlHandlerTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/SqlHandlerTest.java
index f27fa32..73ff53e 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/SqlHandlerTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/SqlHandlerTest.java
@@ -35,6 +35,8 @@ import java.sql.Types;
import java.util.Arrays;
import java.util.Date;
+import javax.sql.DataSource;
+
import junitparams.JUnitParamsRunner;
import org.junit.Before;
import org.junit.Rule;
@@ -46,6 +48,7 @@ import org.apache.geode.InternalGemFireException;
import org.apache.geode.cache.Operation;
import org.apache.geode.cache.Region;
import org.apache.geode.connectors.jdbc.JdbcConnectorException;
+import org.apache.geode.connectors.jdbc.internal.SqlHandler.DataSourceFactory;
import org.apache.geode.connectors.jdbc.internal.configuration.ConnectorService;
import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.pdx.internal.PdxInstanceImpl;
@@ -53,7 +56,7 @@ import org.apache.geode.pdx.internal.PdxType;
@RunWith(JUnitParamsRunner.class)
public class SqlHandlerTest {
- private static final String CONNECTION_CONFIG_NAME = "testConnectionConfig";
+ private static final String DATA_SOURCE_NAME = "dataSourceName";
private static final String REGION_NAME = "testRegion";
private static final String TABLE_NAME = "testTable";
private static final String KEY_COLUMN = "keyColumn";
@@ -62,9 +65,9 @@ public class SqlHandlerTest {
public ExpectedException thrown = ExpectedException.none();
private DataSourceManager manager;
- private JdbcDataSource dataSource;
- private ConnectorService.Connection connectionConfig;
+ private DataSource dataSource;
private JdbcConnectorService connectorService;
+ private DataSourceFactory dataSourceFactory;
private TableMetaDataManager tableMetaDataManager;
private TableMetaDataView tableMetaDataView;
private Connection connection;
@@ -80,10 +83,7 @@ public class SqlHandlerTest {
@Before
public void setup() throws Exception {
manager = mock(DataSourceManager.class);
- dataSource = mock(JdbcDataSource.class);
- connectionConfig = mock(ConnectorService.Connection.class);
- when(connectionConfig.getName()).thenReturn(CONNECTION_CONFIG_NAME);
- when(connectionConfig.getUrl()).thenReturn("fake:url");
+ dataSource = mock(DataSource.class);
region = mock(Region.class);
when(region.getName()).thenReturn(REGION_NAME);
cache = mock(InternalCache.class);
@@ -96,22 +96,20 @@ public class SqlHandlerTest {
when(tableMetaDataManager.getTableMetaDataView(connection, TABLE_NAME))
.thenReturn(tableMetaDataView);
connectorService = mock(JdbcConnectorService.class);
- handler = new SqlHandler(manager, tableMetaDataManager, connectorService);
+ dataSourceFactory = mock(DataSourceFactory.class);
+ when(dataSourceFactory.getDataSource(DATA_SOURCE_NAME)).thenReturn(dataSource);
+ handler = new SqlHandler(manager, tableMetaDataManager, connectorService, dataSourceFactory);
key = "key";
value = mock(PdxInstanceImpl.class);
when(value.getPdxType()).thenReturn(mock(PdxType.class));
- when(connectorService.getConnectionConfig(CONNECTION_CONFIG_NAME)).thenReturn(connectionConfig);
-
regionMapping = mock(ConnectorService.RegionMapping.class);
- when(regionMapping.getConnectionConfigName()).thenReturn(CONNECTION_CONFIG_NAME);
+ when(regionMapping.getConnectionConfigName()).thenReturn(DATA_SOURCE_NAME);
when(regionMapping.getRegionName()).thenReturn(REGION_NAME);
when(regionMapping.getTableName()).thenReturn(TABLE_NAME);
when(regionMapping.getRegionToTableName()).thenReturn(TABLE_NAME);
when(connectorService.getMappingForRegion(REGION_NAME)).thenReturn(regionMapping);
-
- when(manager.getOrCreateDataSource(any())).thenReturn(this.dataSource);
when(dataSource.getConnection()).thenReturn(this.connection);
statement = mock(PreparedStatement.class);
@@ -575,7 +573,7 @@ public class SqlHandlerTest {
public void handlesSQLExceptionFromGetConnection() throws Exception {
doThrow(new SQLException("test exception")).when(dataSource).getConnection();
- assertThatThrownBy(() -> handler.getConnection(connectionConfig))
+ assertThatThrownBy(() -> handler.getConnection(DATA_SOURCE_NAME))
.isInstanceOf(SQLException.class).hasMessage("test exception");
}
diff --git a/geode-core/src/main/java/org/apache/geode/internal/jndi/JNDIInvoker.java b/geode-core/src/main/java/org/apache/geode/internal/jndi/JNDIInvoker.java
index b3105cb..d44f3af 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/jndi/JNDIInvoker.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/jndi/JNDIInvoker.java
@@ -395,6 +395,10 @@ public class JNDIInvoker {
closeDataSource(removedDataSource);
}
+ public static DataSource getDataSource(String name) {
+ return dataSourceMap.get(name);
+ }
+
/**
* @return Context the existing JNDI Context. If there is no pre-esisting JNDI Context, the
* GemFire JNDI Context is returned.