CB-1859 Slf4j configuration redesign + CE configuration deployment fix

This commit is contained in:
Serge Rider
2022-03-31 11:22:12 +03:00
parent 2ff7c81c1b
commit 64b3ae280b
24 changed files with 197 additions and 43 deletions
+20
View File
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<logger name="ch.qos.logback" level="warn">
<appender-ref ref="CONSOLE"/>
</logger>
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
+3 -2
View File
@@ -4,7 +4,8 @@ rem command line arguments
SET CONFIGURATION_PATH=%1
SET SAMPLE_DATABASE_PATH=%2
IF "%CONFIGURATION_PATH%"=="" SET CONFIGURATION_PATH="..\samples\sample-databases\DefaultConfiguration"
IF "%CONFIGURATION_PATH%"=="" SET CONFIGURATION_PATH="..\config\sample-databases\DefaultConfiguration"
echo "Configuration path=%CONFIGURATION_PATH%"
echo Clone and build Cloudbeaver
@@ -39,10 +40,10 @@ IF NOT "%SAMPLE_DATABASE_PATH%"=="" (
mkdir cloudbeaver\samples\db
xcopy /E /Q %SAMPLE_DATABASE_PATH% cloudbeaver\samples\db >NUL
)
copy ..\config\core\* cloudbeaver\conf >NUL
copy %CONFIGURATION_PATH%\GlobalConfiguration\.dbeaver\data-sources.json cloudbeaver\conf\initial-data-sources.conf >NUL
copy %CONFIGURATION_PATH%\*.conf cloudbeaver\conf >NUL
copy ..\samples\sample-databases\*.conf cloudbeaver\conf >NUL
move drivers cloudbeaver >NUL
echo Build static content
+1 -1
View File
@@ -45,9 +45,9 @@ if [[ -n "${SAMPLE_DATABASE_PATH}" ]]; then
cp -rp "${SAMPLE_DATABASE_PATH}" cloudbeaver/samples/
fi
cp -rp ../conig/core/* cloudbeaver/conf
cp -rp "${CONFIGURATION_PATH}"/GlobalConfiguration/.dbeaver/data-sources.json cloudbeaver/conf/initial-data-sources.conf
cp -p "${CONFIGURATION_PATH}"/*.conf cloudbeaver/conf/
cp -p ../samples/sample-databases/*.conf cloudbeaver/conf/
mv drivers cloudbeaver
echo "Build static content"
@@ -0,0 +1,71 @@
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2022 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.cloudbeaver.model.app;
import org.eclipse.core.runtime.Platform;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.registry.BaseApplicationImpl;
import java.nio.file.Files;
import java.nio.file.Path;
/**
* Web application
*/
public abstract class BaseWebApplication extends BaseApplicationImpl {
public static final String DEFAULT_CONFIG_FILE_PATH = "/etc/cloudbeaver.conf";
public static final String CLI_PARAM_WEB_CONFIG = "-web-config";
private static final Log log = Log.getLog(BaseWebApplication.class);
@Nullable
protected Path loadServerConfiguration() {
String configPath = DEFAULT_CONFIG_FILE_PATH;
String[] args = Platform.getCommandLineArgs();
for (int i = 0; i < args.length; i++) {
if (args[i].equals(CLI_PARAM_WEB_CONFIG) && args.length > i + 1) {
configPath = args[i + 1];
break;
}
}
Path path = Path.of(configPath);
// Configure logging
Path logbackConfigPath = path.getParent().resolve("logback.xml").toAbsolutePath();
if (!Files.exists(logbackConfigPath)) {
System.err.println("Can't find slf4j configuration file " + logbackConfigPath.toString());
} else {
System.setProperty("logback.configurationFile", logbackConfigPath.toString());
}
// Load config file
try {
loadConfiguration(configPath);
} catch (Exception e) {
log.error("Error parsing configuration", e);
return null;
}
return path;
}
protected abstract void loadConfiguration(String configPath);
}
@@ -20,20 +20,18 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.InstanceCreator;
import com.google.gson.stream.JsonWriter;
import io.cloudbeaver.model.app.WebApplication;
import io.cloudbeaver.model.user.WebRole;
import io.cloudbeaver.model.user.WebUser;
import io.cloudbeaver.service.security.SecurityPluginService;
import io.cloudbeaver.utils.WebAppUtils;
import org.jkiss.dbeaver.model.security.SMAdminController;
import org.jkiss.dbeaver.model.security.SMController;
import org.jkiss.dbeaver.model.security.SMDataSourceGrant;
import io.cloudbeaver.WebServiceUtils;
import io.cloudbeaver.auth.provider.AuthProviderConfig;
import io.cloudbeaver.model.app.BaseWebApplication;
import io.cloudbeaver.model.app.WebApplication;
import io.cloudbeaver.model.session.WebAuthInfo;
import io.cloudbeaver.model.user.WebRole;
import io.cloudbeaver.model.user.WebUser;
import io.cloudbeaver.registry.WebServiceRegistry;
import io.cloudbeaver.server.jetty.CBJettyServer;
import io.cloudbeaver.service.DBWServiceInitializer;
import io.cloudbeaver.service.security.SecurityPluginService;
import io.cloudbeaver.utils.WebAppUtils;
import org.eclipse.core.runtime.Platform;
import org.eclipse.equinox.app.IApplicationContext;
import org.eclipse.osgi.service.datalocation.Location;
@@ -46,6 +44,9 @@ import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.app.DBPApplication;
import org.jkiss.dbeaver.model.data.json.JSONUtils;
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
import org.jkiss.dbeaver.model.security.SMAdminController;
import org.jkiss.dbeaver.model.security.SMController;
import org.jkiss.dbeaver.model.security.SMDataSourceGrant;
import org.jkiss.dbeaver.registry.BaseApplicationImpl;
import org.jkiss.dbeaver.registry.DataSourceNavigatorSettings;
import org.jkiss.dbeaver.runtime.DBWorkbench;
@@ -75,7 +76,7 @@ import java.util.stream.Stream;
/**
* This class controls all aspects of the application's execution
*/
public class CBApplication extends BaseApplicationImpl implements WebApplication {
public class CBApplication extends BaseWebApplication implements WebApplication {
private static final Log log = Log.getLog(CBApplication.class);
@@ -193,25 +194,8 @@ public class CBApplication extends BaseApplicationImpl implements WebApplication
@Override
public Object start(IApplicationContext context) {
String configPath = CBConstants.DEFAULT_CONFIG_FILE_PATH;
String[] args = Platform.getCommandLineArgs();
for (int i = 0; i < args.length; i++) {
if (args[i].equals(CBConstants.CLI_PARAM_WEB_CONFIG) && args.length > i + 1) {
configPath = args[i + 1];
break;
}
}
try {
loadConfiguration(configPath);
File runtimeConfigFile = getRuntimeAppConfigFile();
if (runtimeConfigFile.exists()) {
log.debug("Runtime configuration [" + runtimeConfigFile.getAbsolutePath() + "]");
parseConfiguration(runtimeConfigFile);
}
} catch (Exception e) {
log.error("Error parsing configuration", e);
Path configPath = loadServerConfiguration();
if (configPath == null) {
return null;
}
@@ -297,7 +281,7 @@ public class CBApplication extends BaseApplicationImpl implements WebApplication
if (configurationMode) {
// Try to configure automatically
performAutoConfiguration(new File(configPath).getParentFile());
performAutoConfiguration(configPath.toFile().getParentFile());
}
if (enableSecurityManager) {
@@ -441,7 +425,22 @@ public class CBApplication extends BaseApplicationImpl implements WebApplication
return SecurityPluginService.createSecurityService(this, databaseConfiguration);
}
private void loadConfiguration(String configPath) {
@Nullable
@Override
protected Path loadServerConfiguration() {
Path path = super.loadServerConfiguration();
File runtimeConfigFile = getRuntimeAppConfigFile();
if (runtimeConfigFile.exists()) {
log.debug("Runtime configuration [" + runtimeConfigFile.getAbsolutePath() + "]");
parseConfiguration(runtimeConfigFile);
}
return path;
}
@Override
protected void loadConfiguration(String configPath) {
log.debug("Using configuration [" + configPath + "]");
File configFile = new File(configPath);
@@ -20,14 +20,11 @@ package io.cloudbeaver.server;
* Various constants
*/
public class CBConstants {
public static final String DEFAULT_CONFIG_FILE_PATH = "/etc/cloudbeaver.conf";
public static final String RUNTIME_DATA_DIR_NAME = ".data";
public static final String RUNTIME_APP_CONFIG_FILE_NAME = ".cloudbeaver.runtime.conf";
public static final String RUNTIME_PRODUCT_CONFIG_FILE_NAME = ".product.runtime.conf";
public static final String AUTO_CONFIG_FILE_NAME = ".cloudbeaver.auto.conf";
public static final String CLI_PARAM_WEB_CONFIG = "-web-config";
public static final String PARAM_SERVER_PORT = "serverPort";
public static final String PARAM_SERVER_HOST = "serverHost";
public static final String PARAM_SERVER_NAME = "serverName";
@@ -1,4 +1,4 @@
featureName=Cloudbeaver Server
providerName=DBeaver Corp
description=Cloudbeaver server feature
copyright=\u00A9 DBeaver Corp, 2022
copyright=DBeaver Corp, 2022
@@ -28,10 +28,9 @@
<import plugin="org.apache.felix.scr" version="0.0.0" match="greaterOrEqual"/>
</requires>
<includes id="org.jkiss.dbeaver.runtime.feature" version="0.0.0"/>
<includes id="io.cloudbeaver.ws.feature" version="0.0.0"/>
<includes id="org.jkiss.dbeaver.db.feature" version="0.0.0"/>
<plugin id="io.cloudbeaver.model" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="io.cloudbeaver.server" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="io.cloudbeaver.service.admin" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="io.cloudbeaver.service.auth" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
@@ -46,12 +45,8 @@
<plugin id="org.jkiss.dbeaver.net.ssh.sshj" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<!-- 3rd party deps -->
<plugin id="com.ibm.icu.base" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="javax.servlet" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.eclipse.jetty.server" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.eclipse.jetty.servlet" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.eclipse.jetty.util" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="com.google.gson" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.jkiss.bundle.graphql.java" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
</feature>
@@ -0,0 +1,2 @@
bin.includes = feature.xml,\
feature.properties
@@ -0,0 +1,4 @@
featureName=Cloudbeaver Web Services feature
providerName=DBeaver Corp
description=Cloudbeaver Web Services feature
copyright=DBeaver Corp, 2022
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="io.cloudbeaver.ws.feature"
label="%featureName"
version="1.0.0.qualifier"
provider-name="%providerName"
plugin="io.cloudbeaver.model">
<description>
%description
</description>
<copyright>
%copyright
</copyright>
<requires>
<import plugin="org.eclipse.core.resources" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.core.runtime" version="3.7" match="greaterOrEqual"/>
<!-- Equinox -->
<import plugin="org.eclipse.equinox.launcher" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.equinox.common" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.equinox.event" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.equinox.preferences" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.equinox.registry" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.osgi.compatibility.state" version="0.0.0" match="greaterOrEqual"/>
<!-- Main Equinox service provider -->
<import plugin="org.apache.felix.scr" version="0.0.0" match="greaterOrEqual"/>
</requires>
<includes id="org.jkiss.dbeaver.runtime.feature" version="0.0.0"/>
<plugin id="io.cloudbeaver.model" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<!-- 3rd party deps -->
<plugin id="com.ibm.icu.base" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="javax.servlet" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="com.google.gson" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.jkiss.bundle.graphql.java" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<!-- Logging -->
<plugin id="ch.qos.logback.core" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="ch.qos.logback.classic" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="ch.qos.logback.slf4j" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
</feature>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.cloudbeaver</groupId>
<artifactId>features</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../</relativePath>
</parent>
<artifactId>io.cloudbeaver.ws.feature</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
+2
View File
@@ -13,6 +13,8 @@
<packaging>pom</packaging>
<modules>
<module>io.cloudbeaver.ws.feature</module>
<module>io.cloudbeaver.server.feature</module>
<module>io.cloudbeaver.ce.drivers.feature</module>