This is an automated email from the ASF dual-hosted git repository.
smolnar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git
The following commit(s) were added to refs/heads/master by this push:
new 69a74ce KNOX-2600 - It's now possible to setup a PostgreSQL
connection using a JDBC URL (#444)
69a74ce is described below
commit 69a74ce9c3ef509ab8fdb947bf110bb7f51c0aef
Author: Sandor Molnar <[email protected]>
AuthorDate: Mon May 3 21:33:39 2021 +0200
KNOX-2600 - It's now possible to setup a PostgreSQL connection using a JDBC
URL (#444)
---
.../knox/gateway/config/impl/GatewayConfigImpl.java | 6 ++++++
.../java/org/apache/knox/gateway/util/JDBCUtils.java | 16 ++++++++++------
.../org/apache/knox/gateway/util/JDBCUtilsTest.java | 18 ++++++++++++++++++
.../org/apache/knox/gateway/config/GatewayConfig.java | 2 ++
.../org/apache/knox/gateway/GatewayTestConfig.java | 5 +++++
5 files changed, 41 insertions(+), 6 deletions(-)
diff --git
a/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
b/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
index 16fdc2c..486e7dd 100644
---
a/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
+++
b/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
@@ -274,6 +274,7 @@ public class GatewayConfigImpl extends Configuration
implements GatewayConfig {
//Gateway Database related properties
private static final String GATEWAY_DATABASE_TYPE =
GATEWAY_CONFIG_FILE_PREFIX + ".database.type";
+ private static final String GATEWAY_DATABASE_CONN_URL =
GATEWAY_CONFIG_FILE_PREFIX + ".database.connection.url";
private static final String GATEWAY_DATABASE_HOST =
GATEWAY_CONFIG_FILE_PREFIX + ".database.host";
private static final String GATEWAY_DATABASE_PORT =
GATEWAY_CONFIG_FILE_PREFIX + ".database.port";
private static final String GATEWAY_DATABASE_NAME =
GATEWAY_CONFIG_FILE_PREFIX + ".database.name";
@@ -1248,6 +1249,11 @@ public class GatewayConfigImpl extends Configuration
implements GatewayConfig {
}
@Override
+ public String getDatabaseConnectionUrl() {
+ return get(GATEWAY_DATABASE_CONN_URL);
+ }
+
+ @Override
public String getDatabaseHost() {
return get(GATEWAY_DATABASE_HOST);
}
diff --git
a/gateway-server/src/main/java/org/apache/knox/gateway/util/JDBCUtils.java
b/gateway-server/src/main/java/org/apache/knox/gateway/util/JDBCUtils.java
index 644e4de..b2e6068 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/util/JDBCUtils.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/util/JDBCUtils.java
@@ -45,12 +45,16 @@ public class JDBCUtils {
private static DataSource createPostgresDataSource(GatewayConfig
gatewayConfig, AliasService aliasService) throws AliasServiceException {
final PGSimpleDataSource postgresDataSource = new PGSimpleDataSource();
- postgresDataSource.setDatabaseName(gatewayConfig.getDatabaseName());
- postgresDataSource.setServerNames(new String[] {
gatewayConfig.getDatabaseHost() });
- postgresDataSource.setPortNumbers(new int[] {
gatewayConfig.getDatabasePort() });
- postgresDataSource.setUser(getDatabaseUser(aliasService));
- postgresDataSource.setPassword(getDatabasePassword(aliasService));
- configurePostgreSQLSsl(gatewayConfig, aliasService, postgresDataSource);
+ if (gatewayConfig.getDatabaseConnectionUrl() != null) {
+ postgresDataSource.setUrl(gatewayConfig.getDatabaseConnectionUrl());
+ } else {
+ postgresDataSource.setDatabaseName(gatewayConfig.getDatabaseName());
+ postgresDataSource.setServerNames(new String[] {
gatewayConfig.getDatabaseHost() });
+ postgresDataSource.setPortNumbers(new int[] {
gatewayConfig.getDatabasePort() });
+ postgresDataSource.setUser(getDatabaseUser(aliasService));
+ postgresDataSource.setPassword(getDatabasePassword(aliasService));
+ configurePostgreSQLSsl(gatewayConfig, aliasService, postgresDataSource);
+ }
return postgresDataSource;
}
diff --git
a/gateway-server/src/test/java/org/apache/knox/gateway/util/JDBCUtilsTest.java
b/gateway-server/src/test/java/org/apache/knox/gateway/util/JDBCUtilsTest.java
index a83a4ea..f80ff47 100644
---
a/gateway-server/src/test/java/org/apache/knox/gateway/util/JDBCUtilsTest.java
+++
b/gateway-server/src/test/java/org/apache/knox/gateway/util/JDBCUtilsTest.java
@@ -106,6 +106,24 @@ public class JDBCUtilsTest {
}
@Test
+ public void testGetPostgreSqlDatasourceFromJdbcConnectionUrl() throws
AliasServiceException {
+ final String connectionUrl =
"jdbc:postgresql://postgresql_host:1234/testDb?user=smolnar&password=secret&ssl=true&sslmode=verify-ca&sslrootcert=/var/lib/knox/gateway/conf/postgresql/root.crt";
+ final GatewayConfig gatewayConfig =
EasyMock.createNiceMock(GatewayConfig.class);
+
EasyMock.expect(gatewayConfig.getDatabaseType()).andReturn(JDBCUtils.POSTGRESQL_DB_TYPE).anyTimes();
+
EasyMock.expect(gatewayConfig.getDatabaseConnectionUrl()).andReturn(connectionUrl).anyTimes();
+ EasyMock.replay(gatewayConfig);
+ final PGSimpleDataSource dataSource = (PGSimpleDataSource)
JDBCUtils.getDataSource(gatewayConfig, null);
+ assertEquals("postgresql_host", dataSource.getServerNames()[0]);
+ assertEquals(1234, dataSource.getPortNumbers()[0]);
+ assertEquals("testDb", dataSource.getDatabaseName());
+ assertEquals("smolnar", dataSource.getUser());
+ assertEquals("secret", dataSource.getPassword());
+ assertTrue(dataSource.isSsl());
+ assertEquals(dataSource.getSslRootCert(),
"/var/lib/knox/gateway/conf/postgresql/root.crt");
+ EasyMock.verify(gatewayConfig);
+ }
+
+ @Test
public void shouldReturnDerbyDataSource() throws Exception {
final GatewayConfig gatewayConfig =
EasyMock.createNiceMock(GatewayConfig.class);
EasyMock.expect(gatewayConfig.getDatabaseType()).andReturn(JDBCUtils.DERBY_DB_TYPE).anyTimes();
diff --git
a/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
b/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
index 1e015cf..38d866e 100644
---
a/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
+++
b/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
@@ -750,6 +750,8 @@ public interface GatewayConfig {
String getDatabaseType();
+ String getDatabaseConnectionUrl();
+
String getDatabaseHost();
int getDatabasePort();
diff --git
a/gateway-test-release-utils/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
b/gateway-test-release-utils/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
index c3e9773..ab8df65 100644
---
a/gateway-test-release-utils/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
+++
b/gateway-test-release-utils/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
@@ -860,6 +860,11 @@ public class GatewayTestConfig extends Configuration
implements GatewayConfig {
}
@Override
+ public String getDatabaseConnectionUrl() {
+ return null;
+ }
+
+ @Override
public String getDatabaseHost() {
return null;
}