diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebSessionProjectImpl.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebSessionProjectImpl.java index dc175a45b2..98531ce0dc 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebSessionProjectImpl.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebSessionProjectImpl.java @@ -35,7 +35,6 @@ import org.jkiss.dbeaver.runtime.jobs.DisconnectJob; import java.nio.file.Path; import java.util.*; -import java.util.function.Function; import java.util.stream.Collectors; public class WebSessionProjectImpl extends WebProjectImpl { @@ -206,7 +205,7 @@ public class WebSessionProjectImpl extends WebProjectImpl { .filter(Objects::nonNull) .collect(Collectors.toMap( DBPDataSourceContainer::getId, - Function.identity()) + registry::createDataSource) ); if (WSDataSourceEvent.CREATED.equals(eventId) || WSDataSourceEvent.UPDATED.equals(eventId)) { registry.refreshConfig(dataSourceIds); @@ -221,8 +220,14 @@ public class WebSessionProjectImpl extends WebProjectImpl { addConnection(ds); sendDataSourceUpdatedEvent = true; } - case WSDataSourceEvent.UPDATED -> // if settings were changed we need to send event - sendDataSourceUpdatedEvent |= !ds.equalSettings(oldDataSources.get(dsId)); + case WSDataSourceEvent.UPDATED -> { + boolean connectionUpdated = !ds.equalSettings(oldDataSources.get(dsId)); + if (connectionUpdated) { + sendDataSourceUpdatedEvent = true; + WebDataSourceUtils.disconnectDataSource(webSession, ds); + } + // if settings were changed we need to send event + } case WSDataSourceEvent.DELETED -> { WebDataSourceUtils.disconnectDataSource(webSession, ds); if (registry instanceof DBPDataSourceRegistryCache dsrc) { diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebDataSourceUtils.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebDataSourceUtils.java index 72c8775cd1..369552fe26 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebDataSourceUtils.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebDataSourceUtils.java @@ -32,6 +32,7 @@ import org.jkiss.dbeaver.model.app.DBPProject; import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.net.DBWHandlerConfiguration; import org.jkiss.dbeaver.model.net.ssh.SSHConstants; +import org.jkiss.dbeaver.model.websocket.event.datasource.WSDataSourceDisconnectEvent; import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.utils.CommonUtils; @@ -157,6 +158,14 @@ public class WebDataSourceUtils { if (dataSource.isConnected()) { try { dataSource.disconnect(webSession.getProgressMonitor()); + webSession.addSessionEvent( + new WSDataSourceDisconnectEvent( + dataSource.getProject().getId(), + dataSource.getId(), + webSession.getSessionId(), + webSession.getUserId() + ) + ); return true; } catch (DBException e) { log.error("Error closing connection", e);