Commit 06ad2fba authored by Ajit Deshmukh's avatar Ajit Deshmukh

Closed the open connections.

parent 491e6f9a
......@@ -2277,359 +2277,395 @@
* in the ENTERPRISE table).
*/
private void executeAndLog(
String schemaName,
String inputSql,
String tranId,
String enterpriseCode,
String linNo,
String requestID,
String userId,
String chgTerm,
String dbMainSchema,
String execRights,
boolean rethrow) throws Exception {
Connection conn = null;
Connection connForQueryExec = null;
Connection connForSchema = null;
ConnDriver connDriverForSchema = new ConnDriver();
ConnDriver connDriver = new ConnDriver();
ConnDriver connDriver1 = new ConnDriver();
String connForExec = "";
String schemaForPlaceHolder = "";
BaseLogger.log("3", null, null, "executeAndLog dbMainSchema: [" + dbMainSchema + "]");
BaseLogger.log("3", null, null, "executeAndLog inputSql: [" + inputSql + "]");
BaseLogger.log("3", null, null, "executeAndLog execRights: [" + execRights + "]");
BaseLogger.log("3", null, null, "executeAndLog schemaName: [" + schemaName + "]");
try {
conn = connDriver1.getConnectDB("Driver");
} catch (Exception e) {
System.out.println("Catch block for connection failed...." + e.getMessage());
String error = e.getMessage();
logSqlExecution(tranId, enterpriseCode, "0", requestID, inputSql, 0, "E", userId, chgTerm, error, "");
return; // Stop execution if connection fails
}
// Changes by Ajit D. on 08-JUNE-26 for the query execution schema name fetched
// it
// from USERS
BaseLogger.log("3", null, null, "For schemaName: [" + schemaName + "]");
BaseLogger.log("3", null, null, "executeAndLog inputSql: [" + inputSql + "]");
String dbReadForCheck = "";
/*
* Fetch DB_READ for the current enterprise
*/
String dbReadSql = "SELECT DB_READ FROM ENTERPRISE WHERE ENTERPRISE = ?";
PreparedStatement dbReadPs = conn.prepareStatement(dbReadSql);
dbReadPs.setString(1, enterpriseCode);
ResultSet dbReadRs = dbReadPs.executeQuery();
if (dbReadRs.next()) {
dbReadForCheck = checkNull(dbReadRs.getString("DB_READ"));
}
BaseLogger.log(
"3",
null,
null,
"DB_READ fetched from enterprise : [" + dbReadForCheck + "]");
/*
* For DB_READ use configured value directly.
* For all other schemas fetch actual Oracle USER.
*/
if (schemaName.equalsIgnoreCase(dbReadForCheck)) {
schemaForPlaceHolder = schemaName;
BaseLogger.log(
"3",
null,
null,
"Using DB_READ directly as schema : ["
+ schemaForPlaceHolder + "]");
} else {
try{
connForSchema = connDriverForSchema.getConnectDB(schemaName);
}catch (Exception e) {
String error = (e.getMessage() != null)
? e.getMessage()
: e.toString();
System.out.println("Catch block for executeAndLog method for creating connection 1...." + error);
logSqlExecution(tranId, enterpriseCode, "0", requestID, inputSql, 0, "E", userId, chgTerm, error, "");
}
System.out.println(
"connForSchema USER ::: "
+ connForSchema.getMetaData().getUserName());
System.out.println(
"connForSchema URL ::: "
+ connForSchema.getMetaData().getURL());
String schemaSql = "SELECT USER FROM DUAL";
PreparedStatement schemaForPs = connForSchema.prepareStatement(schemaSql);
String schemaName,
String inputSql,
String tranId,
String enterpriseCode,
String linNo,
String requestID,
String userId,
String chgTerm,
String dbMainSchema,
String execRights,
boolean rethrow) throws Exception {
Connection conn = null;
Connection connForQueryExec = null;
Connection connForSchema = null;
ConnDriver connDriverForSchema = new ConnDriver();
ConnDriver connDriver = new ConnDriver();
ConnDriver connDriver1 = new ConnDriver();
String connForExec = "";
String schemaForPlaceHolder = "";
BaseLogger.log("3", null, null, "executeAndLog dbMainSchema: [" + dbMainSchema + "]");
BaseLogger.log("3", null, null, "executeAndLog inputSql: [" + inputSql + "]");
BaseLogger.log("3", null, null, "executeAndLog execRights: [" + execRights + "]");
BaseLogger.log("3", null, null, "executeAndLog schemaName: [" + schemaName + "]");
try {
try {
conn = connDriver1.getConnectDB("Driver");
} catch (Exception e) {
System.out.println("Catch block for connection failed...." + e.getMessage());
String error = e.getMessage();
logSqlExecution(tranId, enterpriseCode, "0", requestID, inputSql, 0, "E", userId, chgTerm, error,
"");
return; // Stop execution if connection fails
}
// Changes by Ajit D. on 08-JUNE-26 for the query execution schema name fetched
// it
// from USERS
ResultSet schemaForRs = schemaForPs.executeQuery();
BaseLogger.log("3", null, null, "For schemaName: [" + schemaName + "]");
BaseLogger.log("3", null, null, "executeAndLog inputSql: [" + inputSql + "]");
String dbReadForCheck = "";
if (schemaForRs.next()) {
schemaForPlaceHolder = checkNull(schemaForRs.getString(1));
}
/*
* Fetch DB_READ for the current enterprise
*/
String dbReadSql = "SELECT DB_READ FROM ENTERPRISE WHERE ENTERPRISE = ?";
BaseLogger.log(
"3",
null,
null,
"Actual Oracle USER : ["
+ schemaForPlaceHolder + "]");
}
PreparedStatement dbReadPs = conn.prepareStatement(dbReadSql);
if (schemaName.equalsIgnoreCase("APPVIS") || schemaName.equalsIgnoreCase("APPVISQC")) {
BaseLogger.log(
"3",
null,
null,
"For std database");
schemaForPlaceHolder = "APPVIS";
}
BaseLogger.log(
"3",
null,
null,
"schemaForPlaceHolder : ["
+ schemaForPlaceHolder + "]");
dbReadPs.setString(1, enterpriseCode);
String finalSql = applySchema(inputSql, schemaForPlaceHolder);
ResultSet dbReadRs = dbReadPs.executeQuery();
// Change by Gagan B. on 16-JAN-26
finalSql = finalSql.trim();
BaseLogger.log("3", null, null, ">>> EXECUTING SQL finalSql : [" + finalSql + "]");
BaseLogger.log("3", null, null, "executeAndLog schemaName: [" + schemaName + "]");
BaseLogger.log("3", null, null, "executeAndLog dbMainSchema: [" + dbMainSchema + "]");
BaseLogger.log("3", null, null, "executeAndLog enterpriseCode: [" + enterpriseCode + "]");
String execSchema = schemaName;
String sqlUpper = finalSql.trim().toUpperCase();
if (dbReadRs.next()) {
dbReadForCheck = checkNull(dbReadRs.getString("DB_READ"));
}
if (sqlUpper.startsWith("CREATE SYNONYM")
|| sqlUpper.startsWith("GRANT SELECT ON")
|| sqlUpper.startsWith("GRANT EXECUTE ON")) {
execSchema = dbMainSchema;
}
BaseLogger.log(
"3",
null,
null,
"DB_READ fetched from enterprise : [" + dbReadForCheck + "]");
/*
* For DB_READ use configured value directly.
* For all other schemas fetch actual Oracle USER.
*/
if (schemaName.equalsIgnoreCase(dbReadForCheck)) {
schemaForPlaceHolder = schemaName;
BaseLogger.log(
"3",
null,
null,
"Using DB_READ directly as schema : ["
+ schemaForPlaceHolder + "]");
} else {
try {
connForSchema = connDriverForSchema.getConnectDB(schemaName);
} catch (Exception e) {
String error = (e.getMessage() != null)
? e.getMessage()
: e.toString();
System.out
.println("Catch block for executeAndLog method for creating connection 1...." + error);
logSqlExecution(tranId, enterpriseCode, "0", requestID, inputSql, 0, "E", userId, chgTerm,
error, "");
return;
}
System.out.println("execSchema:: " + execSchema);
System.out.println("enterpriseCode:: " + enterpriseCode);
//Comment out this part as for creating connection for Live schema does not need to use schema_name value instead use db_main value directly[26-June-2026]
// 1. Get the Connection String for the Main Execution
/*
String connForExecSql = "select schema_name from enterprise where enterprise = ?";
PreparedStatement connForExecPstmt = conn.prepareStatement(connForExecSql);
connForExecPstmt.setString(1, enterpriseCode);
ResultSet connForExecRs = connForExecPstmt.executeQuery();
while (connForExecRs.next()) {
System.out.println(
"EXECUTION CONNECTION USER ::: "
+ connForExecRs.getString(1));
connForExec = connForExecRs.getString("schema_name");
}
*/
System.out.println(
"connForSchema USER ::: "
+ connForSchema.getMetaData().getUserName());
connForExec = schemaName;
System.out.println("connForExec:: " + connForExec);
System.out.println(
"connForSchema URL ::: "
+ connForSchema.getMetaData().getURL());
String schemaSql = "SELECT USER FROM DUAL";
try {
// Connect to the specific schema
connForQueryExec = connDriver.getConnectDB(connForExec);
System.out.println(
"CONNECTED USER ::: "
+ connForQueryExec.getMetaData().getUserName());
System.out.println(
"CONNECTED URL ::: "
+ connForQueryExec.getMetaData().getURL());
} catch (Exception e) {
String error = (e.getMessage() != null)
? e.getMessage()
: e.toString();
System.out.println("Catch block for executeAndLog method for creating connection...." + error);
logSqlExecution(tranId, enterpriseCode, "0", requestID, inputSql, 0, "E", userId, chgTerm, error, "");
PreparedStatement schemaForPs = connForSchema.prepareStatement(schemaSql);
}
ResultSet schemaForRs = schemaForPs.executeQuery();
int updCount = 0;
String error = null;
if (schemaForRs.next()) {
schemaForPlaceHolder = checkNull(schemaForRs.getString(1));
}
try {
System.out.println("\n====================");
System.out.println("FINAL EXECUTION CHECK");
System.out.println("====================");
BaseLogger.log(
"3",
null,
null,
"Actual Oracle USER : ["
+ schemaForPlaceHolder + "]");
schemaForRs.close();
schemaForPs.close();
}
System.out.println("schemaName ::: " + schemaName);
System.out.println("dbMainSchema ::: " + dbMainSchema);
System.out.println("connForExec ::: " + connForExec);
if (schemaName.equalsIgnoreCase("APPVIS") || schemaName.equalsIgnoreCase("APPVISQC")) {
BaseLogger.log(
"3",
null,
null,
"For std database");
schemaForPlaceHolder = "APPVIS";
}
BaseLogger.log(
"3",
null,
null,
"schemaForPlaceHolder : ["
+ schemaForPlaceHolder + "]");
String finalSql = applySchema(inputSql, schemaForPlaceHolder);
// Change by Gagan B. on 16-JAN-26
finalSql = finalSql.trim();
BaseLogger.log("3", null, null, ">>> EXECUTING SQL finalSql : [" + finalSql + "]");
BaseLogger.log("3", null, null, "executeAndLog schemaName: [" + schemaName + "]");
BaseLogger.log("3", null, null, "executeAndLog dbMainSchema: [" + dbMainSchema + "]");
BaseLogger.log("3", null, null, "executeAndLog enterpriseCode: [" + enterpriseCode + "]");
String execSchema = schemaName;
String sqlUpper = finalSql.trim().toUpperCase();
if (sqlUpper.startsWith("CREATE SYNONYM")
|| sqlUpper.startsWith("GRANT SELECT ON")
|| sqlUpper.startsWith("GRANT EXECUTE ON")) {
execSchema = dbMainSchema;
}
System.out.println(
"EXECUTION USER ::: "
+ connForQueryExec.getMetaData().getUserName());
System.out.println("execSchema:: " + execSchema);
System.out.println("enterpriseCode:: " + enterpriseCode);
// Comment out this part as for creating connection for Live schema does not
// need to use schema_name value instead use db_main value
// directly[26-June-2026]
// 1. Get the Connection String for the Main Execution
/*
* String connForExecSql =
* "select schema_name from enterprise where enterprise = ?";
* PreparedStatement connForExecPstmt = conn.prepareStatement(connForExecSql);
* connForExecPstmt.setString(1, enterpriseCode);
* ResultSet connForExecRs = connForExecPstmt.executeQuery();
* while (connForExecRs.next()) {
* System.out.println(
* "EXECUTION CONNECTION USER ::: "
* + connForExecRs.getString(1));
* connForExec = connForExecRs.getString("schema_name");
* }
*/
connForExec = schemaName;
System.out.println("connForExec:: " + connForExec);
try {
// Connect to the specific schema
connForQueryExec = connDriver.getConnectDB(connForExec);
System.out.println(
"CONNECTED USER ::: "
+ connForQueryExec.getMetaData().getUserName());
System.out.println(
"CONNECTED URL ::: "
+ connForQueryExec.getMetaData().getURL());
} catch (Exception e) {
String error = (e.getMessage() != null)
? e.getMessage()
: e.toString();
System.out.println("Catch block for executeAndLog method for creating connection...." + error);
logSqlExecution(tranId, enterpriseCode, "0", requestID, inputSql, 0, "E", userId, chgTerm, error,
"");
System.out.println(
"EXECUTION URL ::: "
+ connForQueryExec.getMetaData().getURL());
}
PreparedStatement psCheck = connForQueryExec.prepareStatement(
"SELECT USER FROM DUAL");
int updCount = 0;
String error = null;
ResultSet rsCheck = psCheck.executeQuery();
try {
System.out.println("\n====================");
System.out.println("FINAL EXECUTION CHECK");
System.out.println("====================");
if (rsCheck.next()) {
System.out.println(
"SELECT USER FROM DUAL ::: "
+ rsCheck.getString(1));
}
System.out.println("schemaName ::: " + schemaName);
System.out.println("dbMainSchema ::: " + dbMainSchema);
System.out.println("connForExec ::: " + connForExec);
rsCheck.close();
psCheck.close();
System.out.println(
"EXECUTION USER ::: "
+ connForQueryExec.getMetaData().getUserName());
System.out.println("FINAL SQL ::: ");
System.out.println(finalSql);
System.out.println("====================\n");
Statement stmt = connForQueryExec.createStatement();
System.out.println(
"EXECUTION URL ::: "
+ connForQueryExec.getMetaData().getURL());
if (isTrigger(finalSql) || isDdl(finalSql)) {
// --- A. Execute the Main DDL (DROP TABLE/VIEW/SEQ) ---
stmt.execute(finalSql);
PreparedStatement psCheck = connForQueryExec.prepareStatement(
"SELECT USER FROM DUAL");
// --- B. Handle DROP SYNONYM Logic using Enterprise Config ---
if (sqlUpper.startsWith("DROP ")) {
PreparedStatement psEnt = null;
ResultSet rsEnt = null;
String dbRead = null;
ResultSet rsCheck = psCheck.executeQuery();
try {
// 1. Extract Object Name from SQL (e.g., TESTMANGESQL1)
String objName = getObjectNameFromDrop(finalSql);
if (objName != null) {
// Clean up object name
objName = objName.replace("\"", "").trim();
// 2. Query ENTERPRISE table to get DB_READ schema
// We use 'conn' (the Driver connection) which has access to the enterprise
// table
String query = "SELECT DB_READ FROM enterprise WHERE enterprise = ?";
psEnt = conn.prepareStatement(query);
psEnt.setString(1, enterpriseCode);
rsEnt = psEnt.executeQuery();
if (rsEnt.next()) {
dbRead = rsEnt.getString("DB_READ");
}
if (rsCheck.next()) {
System.out.println(
"SELECT USER FROM DUAL ::: "
+ rsCheck.getString(1));
}
// 3. Construct and Execute DROP SYNONYM
if (dbRead != null && !dbRead.isEmpty()) {
// Construct: DROP SYNONYM APPVISREAD.TESTMANGESQL1
String dropSynSql = "DROP SYNONYM " + dbRead + "." + objName;
rsCheck.close();
psCheck.close();
System.out.println("FINAL SQL ::: ");
System.out.println(finalSql);
System.out.println("====================\n");
Statement stmt = connForQueryExec.createStatement();
if (isTrigger(finalSql) || isDdl(finalSql)) {
// --- A. Execute the Main DDL (DROP TABLE/VIEW/SEQ) ---
stmt.execute(finalSql);
// --- B. Handle DROP SYNONYM Logic using Enterprise Config ---
if (sqlUpper.startsWith("DROP ")) {
PreparedStatement psEnt = null;
ResultSet rsEnt = null;
String dbRead = null;
try {
// 1. Extract Object Name from SQL (e.g., TESTMANGESQL1)
String objName = getObjectNameFromDrop(finalSql);
if (objName != null) {
// Clean up object name
objName = objName.replace("\"", "").trim();
// 2. Query ENTERPRISE table to get DB_READ schema
// We use 'conn' (the Driver connection) which has access to the enterprise
// table
String query = "SELECT DB_READ FROM enterprise WHERE enterprise = ?";
psEnt = conn.prepareStatement(query);
psEnt.setString(1, enterpriseCode);
rsEnt = psEnt.executeQuery();
if (rsEnt.next()) {
dbRead = rsEnt.getString("DB_READ");
}
// 3. Construct and Execute DROP SYNONYM
if (dbRead != null && !dbRead.isEmpty()) {
// Construct: DROP SYNONYM APPVISREAD.TESTMANGESQL1
String dropSynSql = "DROP SYNONYM " + dbRead + "." + objName;
System.out.println(
"Attempting to drop related synonym via Enterprise Config: "
+ dropSynSql);
// Execute blindly. If it doesn't exist, we catch the exception.
stmt.execute(dropSynSql);
System.out.println("Synonym dropped successfully.");
} else {
System.out.println(
"Skipping synonym drop: DB_READ not found in Enterprise table.");
}
}
} catch (SQLException synEx) {
// Swallow exception specifically for synonym drop
// (e.g., ORA-01434: synonym does not exist)
System.out.println("Synonym drop skipped or failed (non-fatal): " + synEx.getMessage());
} catch (Exception ex) {
System.out.println("Error in synonym logic: " + ex.getMessage());
} finally {
if (rsEnt != null)
try {
rsEnt.close();
} catch (Exception e) {
}
if (psEnt != null)
try {
psEnt.close();
} catch (Exception e) {
}
}
}
// --- END SYNONYM LOGIC ---
} else {
// INSERT / UPDATE / DELETE
updCount = stmt.executeUpdate(finalSql);
connForQueryExec.commit();
}
System.out.println(
"Attempting to drop related synonym via Enterprise Config: " + dropSynSql);
logSqlExecution(
tranId, enterpriseCode, linNo, requestID,
finalSql, updCount, "C", userId, chgTerm, null, dbMainSchema);
// Execute blindly. If it doesn't exist, we catch the exception.
stmt.execute(dropSynSql);
System.out.println("Synonym dropped successfully.");
} else {
System.out.println("Skipping synonym drop: DB_READ not found in Enterprise table.");
}
}
} catch (SQLException synEx) {
// Swallow exception specifically for synonym drop
// (e.g., ORA-01434: synonym does not exist)
System.out.println("Synonym drop skipped or failed (non-fatal): " + synEx.getMessage());
} catch (Exception ex) {
System.out.println("Error in synonym logic: " + ex.getMessage());
} finally {
if (rsEnt != null)
try {
rsEnt.close();
} catch (Exception e) {
}
if (psEnt != null)
try {
psEnt.close();
} catch (Exception e) {
}
} catch (SQLException e) {
}
}
// --- END SYNONYM LOGIC ---
try {
if (connForQueryExec != null)
connForQueryExec.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
} else {
// INSERT / UPDATE / DELETE
updCount = stmt.executeUpdate(finalSql);
connForQueryExec.commit();
}
error = e.getMessage();
logSqlExecution(
tranId, enterpriseCode, linNo, requestID,
finalSql, updCount, "C", userId, chgTerm, null, dbMainSchema);
System.out.println("================================");
System.out.println("SQL EXECUTION FAILED");
System.out.println("Oracle Error : " + error);
System.out.println("Schema Name : " + schemaName);
System.out.println("connForExec : " + connForExec);
} catch (SQLException e) {
if (connForQueryExec != null) {
System.out.println(
"Connected User : "
+ connForQueryExec.getMetaData().getUserName());
try {
if (connForQueryExec != null)
connForQueryExec.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
System.out.println(
"Connected URL : "
+ connForQueryExec.getMetaData().getURL());
}
error = e.getMessage();
System.out.println("Failed SQL : ");
System.out.println(finalSql);
System.out.println("================================");
logSqlExecution(
tranId, enterpriseCode, linNo, requestID,
finalSql, updCount, "E", userId, chgTerm, error, dbMainSchema);
} finally {
// if (connForExecRs != null)
// connForExecRs.close();
// if (connForExecPstmt != null)
// connForExecPstmt.close();
if (connForQueryExec != null)
connForQueryExec.close();
if (conn != null)
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("================================");
System.out.println("SQL EXECUTION FAILED");
System.out.println("Oracle Error : " + error);
System.out.println("Schema Name : " + schemaName);
System.out.println("connForExec : " + connForExec);
try {
if (connForQueryExec != null) {
System.out.println(
"Connected User : "
+ connForQueryExec.getMetaData().getUserName());
if (connForSchema != null && !connForSchema.isClosed()) {
connForSchema.close();
connForSchema = null;
}
System.out.println(
"Connected URL : "
+ connForQueryExec.getMetaData().getURL());
}
if (connForQueryExec != null && !connForQueryExec.isClosed()) {
connForQueryExec.close();
connForQueryExec = null;
}
System.out.println("Failed SQL : ");
System.out.println(finalSql);
System.out.println("================================");
if (conn != null && !conn.isClosed()) {
conn.close();
conn = null;
}
logSqlExecution(
tranId, enterpriseCode, linNo, requestID,
finalSql, updCount, "E", userId, chgTerm, error, dbMainSchema);
} finally {
// if (connForExecRs != null)
// connForExecRs.close();
// if (connForExecPstmt != null)
// connForExecPstmt.close();
if (connForQueryExec != null)
connForQueryExec.close();
if (conn != null)
conn.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
private boolean isDdl(String sql) {
String s = sql.trim().toUpperCase();
......@@ -3071,4 +3107,4 @@
return null;
}
}
\ No newline at end of file
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment