diff --git a/amazon-redshift-plugin/pom.xml b/amazon-redshift-plugin/pom.xml
index fb8e91604..80f6ea472 100644
--- a/amazon-redshift-plugin/pom.xml
+++ b/amazon-redshift-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
Amazon Redshift plugin
diff --git a/aurora-mysql-plugin/pom.xml b/aurora-mysql-plugin/pom.xml
index 0113d9fb4..d5d9798b8 100644
--- a/aurora-mysql-plugin/pom.xml
+++ b/aurora-mysql-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
Aurora DB MySQL plugin
diff --git a/aurora-postgresql-plugin/pom.xml b/aurora-postgresql-plugin/pom.xml
index 54d9e041d..a1d370667 100644
--- a/aurora-postgresql-plugin/pom.xml
+++ b/aurora-postgresql-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
Aurora DB PostgreSQL plugin
diff --git a/cloudsql-mysql-plugin/pom.xml b/cloudsql-mysql-plugin/pom.xml
index 66f0d4df1..38b821b68 100644
--- a/cloudsql-mysql-plugin/pom.xml
+++ b/cloudsql-mysql-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
CloudSQL MySQL plugin
diff --git a/cloudsql-postgresql-plugin/pom.xml b/cloudsql-postgresql-plugin/pom.xml
index 46bf075e9..cfa5c9e76 100644
--- a/cloudsql-postgresql-plugin/pom.xml
+++ b/cloudsql-postgresql-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
CloudSQL PostgreSQL plugin
diff --git a/database-commons/pom.xml b/database-commons/pom.xml
index 45fc6cbde..87f9b9546 100644
--- a/database-commons/pom.xml
+++ b/database-commons/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
Database Commons
diff --git a/db2-plugin/pom.xml b/db2-plugin/pom.xml
index cdc3c709f..779a60880 100644
--- a/db2-plugin/pom.xml
+++ b/db2-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
IBM DB2 plugin
diff --git a/generic-database-plugin/pom.xml b/generic-database-plugin/pom.xml
index a74c2a250..1756f441e 100644
--- a/generic-database-plugin/pom.xml
+++ b/generic-database-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
Generic database plugin
diff --git a/generic-db-argument-setter/pom.xml b/generic-db-argument-setter/pom.xml
index 372a0261d..1e0685e54 100644
--- a/generic-db-argument-setter/pom.xml
+++ b/generic-db-argument-setter/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
Generic database argument setter plugin
diff --git a/mariadb-plugin/pom.xml b/mariadb-plugin/pom.xml
index 58273afdc..ea36e3706 100644
--- a/mariadb-plugin/pom.xml
+++ b/mariadb-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
Maria DB plugin
diff --git a/memsql-plugin/pom.xml b/memsql-plugin/pom.xml
index 8dbd76a03..6fa66978c 100644
--- a/memsql-plugin/pom.xml
+++ b/memsql-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
Memsql plugin
diff --git a/mssql-plugin/pom.xml b/mssql-plugin/pom.xml
index 39c0323df..5e7506eaa 100644
--- a/mssql-plugin/pom.xml
+++ b/mssql-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
Microsoft SQL Server plugin
diff --git a/mysql-plugin/pom.xml b/mysql-plugin/pom.xml
index 9fc01b436..16d2e4f7f 100644
--- a/mysql-plugin/pom.xml
+++ b/mysql-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
Mysql plugin
diff --git a/netezza-plugin/pom.xml b/netezza-plugin/pom.xml
index a0ea7c088..2ec28d2cf 100644
--- a/netezza-plugin/pom.xml
+++ b/netezza-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
Netezza plugin
diff --git a/oracle-plugin/pom.xml b/oracle-plugin/pom.xml
index 7e391541f..082b678f9 100644
--- a/oracle-plugin/pom.xml
+++ b/oracle-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
Oracle plugin
diff --git a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleAction.java b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleAction.java
index 9b5331d11..d698e17da 100644
--- a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleAction.java
+++ b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleAction.java
@@ -57,7 +57,7 @@ public static class OracleActionConfig extends DBSpecificQueryConfig {
@Override
public String getConnectionString() {
- return OracleConstants.getConnectionString(this.connectionType, host, port, database);
+ return OracleConstants.getConnectionString(this.connectionType, host, port, database, null);
}
@Override
diff --git a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleConnector.java b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleConnector.java
index bc7907b26..3d2f7399a 100644
--- a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleConnector.java
+++ b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleConnector.java
@@ -126,7 +126,7 @@ protected String getConnectionString(@Nullable String database) {
return config.getConnectionString();
}
return OracleConstants.getConnectionString(config.getConnectionType(),
- config.getHost(), config.getPort(), database);
+ config.getHost(), config.getPort(), database, config.getSSlMode());
}
@Override
diff --git a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleConnectorConfig.java b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleConnectorConfig.java
index a60476bd5..10022364a 100644
--- a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleConnectorConfig.java
+++ b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleConnectorConfig.java
@@ -43,12 +43,12 @@ public OracleConnectorConfig(String host, int port, String user, String password
public OracleConnectorConfig(String host, int port, String user, String password, String jdbcPluginName,
String connectionArguments, String connectionType, String database) {
- this(host, port, user, password, jdbcPluginName, connectionArguments, connectionType, database, null);
+ this(host, port, user, password, jdbcPluginName, connectionArguments, connectionType, database, null, null);
}
public OracleConnectorConfig(String host, int port, String user, String password, String jdbcPluginName,
String connectionArguments, String connectionType, String database,
- String role) {
+ String role, Boolean useSSL) {
this.host = host;
this.port = port;
@@ -59,11 +59,12 @@ public OracleConnectorConfig(String host, int port, String user, String password
this.connectionType = connectionType;
this.database = database;
this.role = role;
+ this.useSSL = useSSL;
}
@Override
public String getConnectionString() {
- return OracleConstants.getConnectionString(connectionType, host, getPort(), database);
+ return OracleConstants.getConnectionString(connectionType, host, getPort(), database, useSSL);
}
@Name(OracleConstants.CONNECTION_TYPE)
@@ -86,6 +87,11 @@ public String getConnectionString() {
@Nullable
private String transactionIsolationLevel;
+ @Name(OracleConstants.USE_SSL)
+ @Description("Turns on SSL encryption. Connection will fail if SSL is not available")
+ @Nullable
+ public Boolean useSSL;
+
@Override
protected int getDefaultPort() {
return 1521;
@@ -103,6 +109,11 @@ public String getDatabase() {
return database;
}
+ public Boolean getSSlMode() {
+ // return false if useSSL is null, otherwise return its value
+ return useSSL != null && useSSL;
+ }
+
@Override
public Properties getConnectionArgumentsProperties() {
Properties prop = super.getConnectionArgumentsProperties();
diff --git a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleConstants.java b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleConstants.java
index ec44d7b94..dc38f80ac 100644
--- a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleConstants.java
+++ b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleConstants.java
@@ -29,6 +29,10 @@ private OracleConstants() {
public static final String PLUGIN_NAME = "Oracle";
public static final String ORACLE_CONNECTION_STRING_SID_FORMAT = "jdbc:oracle:thin:@%s:%s:%s";
public static final String ORACLE_CONNECTION_STRING_SERVICE_NAME_FORMAT = "jdbc:oracle:thin:@//%s:%s/%s";
+ // Connection formats to accept protocol (e.g., jdbc:oracle:thin:@://:/)
+ public static final String ORACLE_CONNECTION_STRING_SID_FORMAT_WITH_PROTOCOL = "jdbc:oracle:thin:@%s:%s:%s/%s";
+ public static final String ORACLE_CONNECTION_STRING_SERVICE_NAME_FORMAT_WITH_PROTOCOL =
+ "jdbc:oracle:thin:@%s://%s:%s/%s";
public static final String ORACLE_CONNECTION_STRING_TNS_FORMAT = "jdbc:oracle:thin:@%s";
public static final String DEFAULT_BATCH_VALUE = "defaultBatchValue";
public static final String DEFAULT_ROW_PREFETCH = "defaultRowPrefetch";
@@ -36,28 +40,92 @@ private OracleConstants() {
public static final String CONNECTION_TYPE = "connectionType";
public static final String ROLE = "role";
public static final String NAME_DATABASE = "database";
- public static final String TNS_CONNECTION_TYPE = "TNS";
+ public static final String TNS_CONNECTION_TYPE = "tns";
public static final String TRANSACTION_ISOLATION_LEVEL = "transactionIsolationLevel";
+ public static final String USE_SSL = "useSSL";
/**
- * Returns the Connection String for the given ConnectionType.
+ * Constructs the Oracle connection string based on the provided connection type, host, port, and database.
+ * If SSL is enabled, the connection protocol will be "tcps" instead of "tcp".
*
* @param connectionType TNS/Service/SID
* @param host Host name of the oracle server
* @param port Port of the oracle server
* @param database Database to connect to
- * @return Connection String based on the given ConnectionType
+ * @param useSSL Whether SSL/TLS is required(YES/NO)
+ * @return Connection String based on the given parameters and connection type.
*/
public static String getConnectionString(String connectionType,
@Nullable String host,
@Nullable int port,
- String database) {
- if (OracleConstants.TNS_CONNECTION_TYPE.equalsIgnoreCase(connectionType)) {
- return String.format(OracleConstants.ORACLE_CONNECTION_STRING_TNS_FORMAT, database);
+ String database,
+ @Nullable Boolean useSSL) {
+ // Use protocol as "tcps" when SSL is requested or else use "tcp".
+ String connectionProtocol;
+ boolean isSSLEnabled = false;
+ if (useSSL != null && useSSL) {
+ connectionProtocol = "tcps";
+ isSSLEnabled = true;
+ } else {
+ connectionProtocol = "tcp";
}
- if (OracleConstants.SERVICE_CONNECTION_TYPE.equalsIgnoreCase(connectionType)) {
- return String.format(OracleConstants.ORACLE_CONNECTION_STRING_SERVICE_NAME_FORMAT,
- host, port, database);
+
+ switch (connectionType.toLowerCase()) {
+ case OracleConstants.TNS_CONNECTION_TYPE:
+ // TNS connection doesn't require protocol
+ return String.format(OracleConstants.ORACLE_CONNECTION_STRING_TNS_FORMAT, database);
+ case OracleConstants.SERVICE_CONNECTION_TYPE:
+ // Create connection string for SERVICE type.
+ return getConnectionStringWithService(host, port, database, connectionProtocol, isSSLEnabled);
+ default:
+ // Default to SID format if no matching case is found.
+ return getConnectionStringWithSID(host, port, database, connectionProtocol, isSSLEnabled);
+ }
+ }
+
+ /**
+ * Constructs the connection string for a SERVICE connection type.
+ *
+ * @param host Host name of the Oracle server.
+ * @param port Port of the Oracle server.
+ * @param database Database name to connect to.
+ * @param connectionProtocol Protocol to use for the connection ("tcp" or "tcps").
+ * @param isSSLEnabled Indicates if SSL is enabled.
+ * @return Formatted connection string for a SERVICE connection.
+ */
+ private static String getConnectionStringWithService(@Nullable String host,
+ @Nullable int port,
+ String database,
+ String connectionProtocol,
+ boolean isSSLEnabled) {
+ // Choose the appropriate format based on whether SSL is enabled.
+ if (isSSLEnabled) {
+ return String.format(OracleConstants.ORACLE_CONNECTION_STRING_SERVICE_NAME_FORMAT_WITH_PROTOCOL,
+ connectionProtocol, host, port, database);
+ }
+ return String.format(OracleConstants.ORACLE_CONNECTION_STRING_SERVICE_NAME_FORMAT,
+ host, port, database);
+ }
+
+ /**
+ * Constructs the connection string for a SID connection type.
+ *
+ * @param host Host name of the Oracle server.
+ * @param port Port of the Oracle server.
+ * @param database Database name to connect to.
+ * @param connectionProtocol Protocol to use for the connection ("tcp" or "tcps").
+ * @param isSSLEnabled Indicates if SSL is enabled.
+ * @return Formatted connection string for a SID connection.
+ */
+ private static String getConnectionStringWithSID(@Nullable String host,
+ @Nullable int port,
+ String database,
+ String connectionProtocol,
+ boolean isSSLEnabled) {
+ // Choose the appropriate format based on whether SSL is enabled.
+ if (isSSLEnabled) {
+ return String.format(OracleConstants.ORACLE_CONNECTION_STRING_SID_FORMAT_WITH_PROTOCOL,
+ connectionProtocol, host, port, database);
}
return String.format(OracleConstants.ORACLE_CONNECTION_STRING_SID_FORMAT,
host, port, database);
diff --git a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OraclePostAction.java b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OraclePostAction.java
index 4862aebfa..e11e455c1 100644
--- a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OraclePostAction.java
+++ b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OraclePostAction.java
@@ -57,7 +57,7 @@ public static class OracleQueryActionConfig extends DBSpecificQueryActionConfig
@Override
public String getConnectionString() {
- return OracleConstants.getConnectionString(this.connectionType, host, port, database);
+ return OracleConstants.getConnectionString(this.connectionType, host, port, database, null);
}
@Override
diff --git a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSource.java b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSource.java
index eca7e2532..6df62e63e 100644
--- a/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSource.java
+++ b/oracle-plugin/src/main/java/io/cdap/plugin/oracle/OracleSource.java
@@ -117,9 +117,9 @@ public OracleSourceConfig(String host, int port, String user, String password, S
String connectionArguments, String connectionType, String database, String role,
int defaultBatchValue, int defaultRowPrefetch,
String importQuery, Integer numSplits, int fetchSize,
- String boundingQuery, String splitBy) {
+ String boundingQuery, String splitBy, Boolean useSSL) {
this.connection = new OracleConnectorConfig(host, port, user, password, jdbcPluginName, connectionArguments,
- connectionType, database, role);
+ connectionType, database, role, useSSL);
this.defaultBatchValue = defaultBatchValue;
this.defaultRowPrefetch = defaultRowPrefetch;
this.fetchSize = fetchSize;
@@ -132,7 +132,7 @@ public OracleSourceConfig(String host, int port, String user, String password, S
@Override
public String getConnectionString() {
return OracleConstants.getConnectionString(connection.getConnectionType(), connection.getHost(),
- connection.getPort(), connection.getDatabase());
+ connection.getPort(), connection.getDatabase(), connection.getSSlMode());
}
@Override
diff --git a/oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleFailedConnectionTest.java b/oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleFailedConnectionTest.java
index a2c9bcd5e..7ec6f3844 100644
--- a/oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleFailedConnectionTest.java
+++ b/oracle-plugin/src/test/java/io/cdap/plugin/oracle/OracleFailedConnectionTest.java
@@ -28,7 +28,8 @@ public class OracleFailedConnectionTest extends DBSpecificFailedConnectionTest {
public void test() throws ClassNotFoundException, IOException {
OracleConnector connector = new OracleConnector(
- new OracleConnectorConfig("localhost", 1521, "username", "password", "jdbc", "", "database"));
+ new OracleConnectorConfig("localhost", 1521, "username", "password", "jdbc", "",
+ "SID", "database"));
super.test(JDBC_DRIVER_CLASS_NAME, connector, "Failed to create connection to database via connection string:" +
" jdbc:oracle:thin:@localhost:1521:database and arguments: " +
diff --git a/oracle-plugin/widgets/Oracle-batchsink.json b/oracle-plugin/widgets/Oracle-batchsink.json
index 30d5b345f..8d6168780 100644
--- a/oracle-plugin/widgets/Oracle-batchsink.json
+++ b/oracle-plugin/widgets/Oracle-batchsink.json
@@ -100,6 +100,26 @@
"default": "TRANSACTION_SERIALIZABLE"
}
},
+ {
+ "widget-type": "hidden",
+ "label": "TLS Encryption",
+ "name": "useSSL",
+ "description": "Enable TLS encryption (true/false)",
+ "widget-attributes": {
+ "layout": "inline",
+ "default": "false",
+ "options": [
+ {
+ "id": "true",
+ "label": "true"
+ },
+ {
+ "id": "false",
+ "label": "false"
+ }
+ ]
+ }
+ },
{
"name": "connectionType",
"label": "Connection Type",
diff --git a/oracle-plugin/widgets/Oracle-batchsource.json b/oracle-plugin/widgets/Oracle-batchsource.json
index 0fc0a5285..5eca20cc4 100644
--- a/oracle-plugin/widgets/Oracle-batchsource.json
+++ b/oracle-plugin/widgets/Oracle-batchsource.json
@@ -100,6 +100,26 @@
"default": "TRANSACTION_SERIALIZABLE"
}
},
+ {
+ "widget-type": "hidden",
+ "label": "TLS Encryption",
+ "name": "useSSL",
+ "description": "Enable TLS encryption (true/false)",
+ "widget-attributes": {
+ "layout": "inline",
+ "default": "false",
+ "options": [
+ {
+ "id": "true",
+ "label": "true"
+ },
+ {
+ "id": "false",
+ "label": "false"
+ }
+ ]
+ }
+ },
{
"name": "connectionType",
"label": "Connection Type",
diff --git a/oracle-plugin/widgets/Oracle-connector.json b/oracle-plugin/widgets/Oracle-connector.json
index 46f006c9c..628027caf 100644
--- a/oracle-plugin/widgets/Oracle-connector.json
+++ b/oracle-plugin/widgets/Oracle-connector.json
@@ -109,6 +109,26 @@
],
"default": "TRANSACTION_SERIALIZABLE"
}
+ },
+ {
+ "widget-type": "hidden",
+ "label": "TLS Encryption",
+ "name": "useSSL",
+ "description": "Enable TLS encryption (true/false)",
+ "widget-attributes": {
+ "layout": "inline",
+ "default": "false",
+ "options": [
+ {
+ "id": "true",
+ "label": "true"
+ },
+ {
+ "id": "false",
+ "label": "false"
+ }
+ ]
+ }
}
]
},
diff --git a/pom.xml b/pom.xml
index 2be1cec2b..81b93410a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
io.cdap.plugin
database-plugins-parent
- 1.11.3-SNAPSHOT
+ 1.11.3
pom
Database Plugins
Collection of database plugins
diff --git a/postgresql-plugin/pom.xml b/postgresql-plugin/pom.xml
index dc11a831c..084080223 100644
--- a/postgresql-plugin/pom.xml
+++ b/postgresql-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
PostgreSQL plugin
diff --git a/saphana-plugin/pom.xml b/saphana-plugin/pom.xml
index d6ab5da70..d2d25e3cf 100644
--- a/saphana-plugin/pom.xml
+++ b/saphana-plugin/pom.xml
@@ -20,7 +20,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
SAP HANA plugin
diff --git a/teradata-plugin/pom.xml b/teradata-plugin/pom.xml
index a4d4afc88..0efe51840 100644
--- a/teradata-plugin/pom.xml
+++ b/teradata-plugin/pom.xml
@@ -21,7 +21,7 @@
database-plugins-parent
io.cdap.plugin
- 1.11.3-SNAPSHOT
+ 1.11.3
teradata-plugin