mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
CB-1859 Slf4j configuration redesign + CE configuration deployment fix
This commit is contained in:
@@ -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
@@ -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
@@ -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"
|
||||
|
||||
+71
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user