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.