Aggiunta eccezione quando viene erroneamente switchato il db
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user