Aggiunta eccezione quando viene erroneamente switchato il db

This commit is contained in:
2025-01-14 13:11:58 +01:00
parent bb067ad3c8
commit af246bbe26
3 changed files with 32 additions and 4 deletions

View File

@@ -3,10 +3,12 @@ package it.integry.ems.sync.MultiDBTransaction;
import it.integry.ems.datasource.DataSource;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.sync.MultiDBTransaction.exception.UnexpectedConnectionSwitchException;
import it.integry.ems.utility.UtilityDebug;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -29,7 +31,7 @@ public class BasicConnectionPool {
UtilityDebug.isDebugExecution() ? 0 :
Runtime.getRuntime().availableProcessors();
if(!settingsModel.isPrimaryInstance()) poolSize = 0;
if (!settingsModel.isPrimaryInstance()) poolSize = 0;
poolSize = Math.min(poolSize, 8);
@@ -66,7 +68,7 @@ public class BasicConnectionPool {
ds = connectionPool.get(profileName)
.remove(connectionPool.get(profileName).size() - 1);
if(ds.isClosed()) ds.initialize(profileName, ds.getApplicationName(), true);
if (ds.isClosed()) ds.initialize(profileName, ds.getApplicationName(), true);
usedConnections.get(profileName).add(ds);
}
@@ -75,7 +77,20 @@ public class BasicConnectionPool {
return ds;
}
public synchronized boolean releaseConnection(String profileName, DataSource ds) throws SQLException {
public synchronized boolean releaseConnection(String profileName, DataSource ds) throws UnexpectedConnectionSwitchException, SQLException, IOException {
String currentCatalog = ds.getConnection().getCatalog();
final AvailableConnectionsModel availableConnectionsModel = settingsModel.getAvailableConnections(true).stream()
.filter(x -> x.getProfileName().equals(profileName))
.findFirst()
.orElse(null);
if (!currentCatalog.equalsIgnoreCase(availableConnectionsModel.getDbName())) {
usedConnections.get(profileName).remove(ds);
ds.forceClose();
throw new UnexpectedConnectionSwitchException(availableConnectionsModel.getDbName(), currentCatalog);
}
if (ds.getApplicationName().equals("EMS Connection")) { //Extra connection
ds.forceClose();
return true;

View File

@@ -9,6 +9,7 @@ import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.properties.EmsProperties;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.sync.MultiDBTransaction.exception.UnexpectedConnectionSwitchException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -260,7 +261,11 @@ public class MultiDBTransactionManager implements AutoCloseable {
}
connectionPool.releaseConnection(advancedDataSource.getProfileName(), advancedDataSource.getDataSource());
try {
connectionPool.releaseConnection(advancedDataSource.getProfileName(), advancedDataSource.getDataSource());
} catch (UnexpectedConnectionSwitchException e) {
logger.error("UnexpectedConnectionSwitchException: " + advancedDataSource.getProfileName(), e);
}
}
}

View File

@@ -0,0 +1,8 @@
package it.integry.ems.sync.MultiDBTransaction.exception;
public class UnexpectedConnectionSwitchException extends Exception {
public UnexpectedConnectionSwitchException(String originalDb, String newDb) {
super(String.format("Rilevato cambio database da %s a %s", originalDb, newDb));
}
}