Skip to content

Commit 38b0246

Browse files
authored
dbeaver/pro#7850 Base model refactoring (#4022)
* dbeaver/pro#7906 App shutdown fixes (listeners unregister) * dbeaver/pro#7906 File systems usage refactoring (move to model) * dbeaver/pro#7906 Logging fix * dbeaver/pro#7906 Logging fix * dbeaver/pro#7850 Logging fix
1 parent 0bf769a commit 38b0246

File tree

7 files changed

+59
-43
lines changed

7 files changed

+59
-43
lines changed

server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/app/BaseServerConfigurationController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.jkiss.code.Nullable;
2323
import org.jkiss.dbeaver.DBException;
2424
import org.jkiss.dbeaver.Log;
25-
import org.jkiss.dbeaver.registry.fs.FSUtils;
25+
import org.jkiss.dbeaver.model.fs.DBFUtils;
2626
import org.jkiss.utils.CommonUtils;
2727

2828
import java.nio.file.Path;
@@ -64,7 +64,7 @@ protected synchronized Path initWorkspacePath() {
6464
return defaultWorkspaceLocation;
6565
}
6666
try {
67-
Path externalFsPath = FSUtils.getPathFromURI(workspaceLocation);
67+
Path externalFsPath = DBFUtils.getPathFromURI(workspaceLocation);
6868
if (externalFsPath == null) {
6969
log.warn("Failed to detect workspace path from URI: " + workspaceLocation +
7070
" default workspace location will be used");

server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/server/BaseServletPlatform.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public Path getTempFolder(@NotNull DBRProgressMonitor monitor, @NotNull String n
4141
if (tempFolder == null) {
4242
synchronized (this) {
4343
if (tempFolder == null) {
44-
initTempFolder(monitor);
44+
initTempFolder();
4545
}
4646
}
4747
}
@@ -59,19 +59,20 @@ public Path getTempFolder(@NotNull DBRProgressMonitor monitor, @NotNull String n
5959
@NotNull
6060
public abstract ServletApplication getApplication();
6161

62-
private void initTempFolder(@NotNull DBRProgressMonitor monitor) {
62+
private void initTempFolder() {
6363
// Make temp folder
64-
monitor.subTask("Create temp folder");
6564
String sysTempFolder = System.getProperty(StandardConstants.ENV_TMP_DIR);
6665
if (CommonUtils.isNotEmpty(sysTempFolder)) {
6766
tempFolder = Path.of(sysTempFolder).resolve(BASE_TEMP_DIR).resolve(DBWConstants.WORK_DATA_FOLDER_NAME);
6867
} else {
6968
//we do not use workspace because it can be in external file system
7069
tempFolder = getApplication().getHomeDirectory().resolve(DBWConstants.WORK_DATA_FOLDER_NAME);
7170
}
71+
log.debug("Temp folder: " + tempFolder);
7272
}
7373

7474
public synchronized void dispose() {
75+
super.dispose();
7576
// Remove temp folder
7677
if (tempFolder != null) {
7778

server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBApplication.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import io.cloudbeaver.server.jetty.CBJettyServer;
3434
import io.cloudbeaver.service.DBWServiceInitializer;
3535
import io.cloudbeaver.service.DBWServiceServerConfigurator;
36+
import io.cloudbeaver.service.security.CBEmbeddedSecurityController;
3637
import io.cloudbeaver.service.session.CBSessionManager;
3738
import io.cloudbeaver.utils.WebDataSourceUtils;
3839
import org.eclipse.core.runtime.Platform;
@@ -300,14 +301,16 @@ protected void startServer() {
300301
try {
301302
initializeServer();
302303
} catch (DBException e) {
303-
log.error("Error initializing server", e);
304+
log.error("Error initializing " + systemInformationCollector.getProductName(), e);
305+
shutdown();
304306
return;
305307
}
306308

307309
try {
308310
initializeSecurityController();
309311
} catch (Exception e) {
310312
log.error("Error initializing database", e);
313+
shutdown();
311314
return;
312315
}
313316

@@ -503,6 +506,16 @@ public void stop() {
503506

504507
protected void shutdown() {
505508
log.debug("Cloudbeaver Server is stopping"); //$NON-NLS-1$
509+
510+
try {
511+
if (securityController instanceof CBEmbeddedSecurityController<?> embeddedSecurityController) {
512+
embeddedSecurityController.shutdown();
513+
}
514+
} catch (Exception e) {
515+
log.error(e);
516+
}
517+
518+
eventController.scheduleCheckJob();
506519
}
507520

508521
@Override

server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBApplicationCE.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,17 +95,6 @@ public CBServerConfigurationControllerEmbedded<CBServerConfig> getServerConfigur
9595
return serverConfigController;
9696
}
9797

98-
protected void shutdown() {
99-
try {
100-
if (securityController instanceof CBEmbeddedSecurityController<?> embeddedSecurityController) {
101-
embeddedSecurityController.shutdown();
102-
}
103-
} catch (Exception e) {
104-
log.error(e);
105-
}
106-
super.shutdown();
107-
}
108-
10998
protected void finishSecurityServiceConfiguration(
11099
@NotNull String adminName,
111100
@Nullable String adminPassword,

server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBPlatform.java

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,13 @@
2020
import io.cloudbeaver.server.jobs.SessionStateJob;
2121
import io.cloudbeaver.server.jobs.WebDataSourceMonitorJob;
2222
import io.cloudbeaver.server.jobs.WebSessionMonitorJob;
23-
import org.eclipse.core.runtime.IStatus;
24-
import org.eclipse.core.runtime.Status;
2523
import org.jkiss.code.NotNull;
2624
import org.jkiss.dbeaver.Log;
25+
import org.jkiss.dbeaver.model.app.DBPRegistryListener;
2726
import org.jkiss.dbeaver.model.impl.app.BaseApplicationImpl;
2827
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
29-
import org.jkiss.dbeaver.model.runtime.AbstractJob;
30-
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
28+
import org.jkiss.dbeaver.model.runtime.LoggingProgressMonitor;
29+
import org.jkiss.dbeaver.registry.DataSourceProviderRegistry;
3130
import org.jkiss.dbeaver.runtime.DBWorkbench;
3231
import org.jkiss.utils.IOUtils;
3332

@@ -38,12 +37,11 @@
3837
*/
3938
public class CBPlatform extends BaseWebPlatform {
4039

41-
// The plug-in ID
42-
public static final String PLUGIN_ID = "io.cloudbeaver.server"; //$NON-NLS-1$
43-
4440
private static final Log log = Log.getLog(CBPlatform.class);
4541

4642
private WebServerPreferenceStore preferenceStore;
43+
private DBPRegistryListener driverRegistryListener;
44+
private boolean isShutdown;
4745

4846
public static CBPlatform getInstance() {
4947
return (CBPlatform) DBWorkbench.getPlatform();
@@ -55,10 +53,19 @@ protected CBPlatform() {
5553
@Override
5654
protected synchronized void initialize() {
5755
long startTime = System.currentTimeMillis();
58-
log.info("Initialize web platform...: ");
56+
log.info("Initialize web platform " + getClass().getSimpleName());
5957
this.preferenceStore = new WebServerPreferenceStore(WebPlatformActivator.getInstance().getPreferences());
6058
super.initialize();
61-
scheduleServerJobs();
59+
this.scheduleServerJobs();
60+
61+
this.driverRegistryListener = new DBPRegistryListener() {
62+
@Override
63+
public void handleRegistryReload() {
64+
WebAppUtils.getWebApplication().getDriverRegistry().refreshApplicableDrivers();
65+
}
66+
};
67+
DataSourceProviderRegistry.getInstance().addDataSourceRegistryListener(driverRegistryListener);
68+
6269
log.info("Web platform initialized (" + (System.currentTimeMillis() - startTime) + "ms)");
6370
}
6471

@@ -73,24 +80,24 @@ protected void scheduleServerJobs() {
7380
new WebDataSourceMonitorJob(this, getApplication().getSessionManager())
7481
.scheduleMonitor();
7582

76-
new AbstractJob("Delete temp folder") {
77-
@NotNull
78-
@Override
79-
protected IStatus run(@NotNull DBRProgressMonitor monitor) {
80-
try {
81-
IOUtils.deleteDirectory(getTempFolder(monitor, TEMP_FILE_FOLDER));
82-
IOUtils.deleteDirectory(getTempFolder(monitor, TEMP_FILE_IMPORT_FOLDER));
83-
} catch (IOException e) {
84-
throw new RuntimeException(e);
85-
}
86-
return Status.OK_STATUS;
87-
}
88-
}.schedule();
83+
try {
84+
LoggingProgressMonitor monitor = new LoggingProgressMonitor(log);
85+
IOUtils.deleteDirectory(getTempFolder(monitor, TEMP_FILE_FOLDER));
86+
IOUtils.deleteDirectory(getTempFolder(monitor, TEMP_FILE_IMPORT_FOLDER));
87+
} catch (IOException e) {
88+
log.error(e);
89+
}
8990
}
9091

9192
public synchronized void dispose() {
9293
long startTime = System.currentTimeMillis();
93-
log.debug("Shutdown Core...");
94+
isShutdown = true;
95+
log.debug("Shutdown web platform");
96+
97+
if (driverRegistryListener != null) {
98+
DataSourceProviderRegistry.getInstance().removeDataSourceRegistryListener(driverRegistryListener);
99+
driverRegistryListener = null;
100+
}
94101

95102
super.dispose();
96103

@@ -113,7 +120,7 @@ public DBPPreferenceStore getPreferenceStore() {
113120

114121
@Override
115122
public boolean isShuttingDown() {
116-
return false;
123+
return isShutdown;
117124
}
118125

119126
}

server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/jetty/CBSessionHandler.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,18 @@
1818

1919
import io.cloudbeaver.server.WebApplication;
2020
import org.eclipse.jetty.ee10.servlet.SessionHandler;
21+
import org.jkiss.code.NotNull;
2122

2223
public class CBSessionHandler extends SessionHandler {
2324
static final int ONE_MINUTE = 60;
2425
private final WebApplication application;
2526

26-
public CBSessionHandler(WebApplication application) {
27+
public CBSessionHandler(@NotNull WebApplication application) {
2728
this.application = application;
2829
}
30+
31+
@Override
32+
public String toString() {
33+
return "CBSessionHandler-" + super.hashCode();
34+
}
2935
}

server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ private void checkActionPermissions(@NotNull Method method, @NotNull WebAction w
318318
// Check license
319319
if (application.isLicenseRequired() && !application.isLicenseValid()) {
320320
if (!ArrayUtils.contains(reqPermissions, DBWConstants.PERMISSION_ADMIN)) {
321-
String errorMessage = "Invalid server license";
321+
String errorMessage = "Server license is missing";
322322
String licenseStatus = application.getLicenseStatus();
323323
if (licenseStatus != null) {
324324
errorMessage = errorMessage + ": " + licenseStatus;

0 commit comments

Comments
 (0)