Skip to content

Commit 8ed7da3

Browse files
committed
use a dedicated directory to store database files
database files directory is located next to config files directory to facilitate data handling in deployment simplify ServiceMain class reduce code duplication in Test class remove obsolete test file
1 parent c2eeea7 commit 8ed7da3

File tree

10 files changed

+177
-175
lines changed

10 files changed

+177
-175
lines changed

.gitignore

-6
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,3 @@ pom.xml.versionsBackup
1212
.classpath
1313
.factorypath
1414

15-
#lucene
16-
/monitoring
17-
/context-core/monitoring/
18-
/context-extraction/monitoring/
19-
/context-monitoring/monitoring/
20-
/smartclide-monitoring/monitoring/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package de.atb.context.common;
2+
3+
/*-
4+
* #%L
5+
* ATB Context Extraction Core Lib
6+
* %%
7+
* Copyright (C) 2015 - 2022 ATB – Institut für angewandte Systemtechnik Bremen GmbH
8+
* %%
9+
* This program and the accompanying materials are made
10+
* available under the terms of the Eclipse Public License 2.0
11+
* which is available at https://www.eclipse.org/legal/epl-2.0/
12+
*
13+
* SPDX-License-Identifier: EPL-2.0
14+
* #L%
15+
*/
16+
17+
import java.io.IOException;
18+
import java.nio.file.Files;
19+
import java.nio.file.Path;
20+
import java.nio.file.Paths;
21+
22+
import org.slf4j.Logger;
23+
import org.slf4j.LoggerFactory;
24+
25+
public final class ContextPathUtils {
26+
27+
private static final Logger LOGGER = LoggerFactory.getLogger(ContextPathUtils.class);
28+
29+
private static final String BASE_DIR_LINUX = "/var/lib/smartclide";
30+
private static final String BASE_DIR_LINUX_ALTERNATIVE = "/opt/smartclide";
31+
private static final String BASE_DIR_WINDOWS = "C:\\ProgramData\\smartclide";
32+
private static final String SMARTCLIDE_HOME_VAR_NAME = "SMARTCLIDE_HOME";
33+
private static final String CONFIG_DIR_NAME = "config";
34+
private static final String DATA_DIR_NAME = "data";
35+
36+
public static Path getConfigDirPath() {
37+
final Path configDirPath = getBaseDirPath().resolve(CONFIG_DIR_NAME).toAbsolutePath();
38+
createDirectoryIfNotExists(configDirPath, CONFIG_DIR_NAME);
39+
return configDirPath;
40+
}
41+
42+
public static Path getDataDirPath() {
43+
final Path dataDirPath = getBaseDirPath().resolve(DATA_DIR_NAME).toAbsolutePath();
44+
createDirectoryIfNotExists(dataDirPath, DATA_DIR_NAME);
45+
return dataDirPath;
46+
}
47+
48+
private static Path getBaseDirPath() {
49+
final Path baseDirPath;
50+
// Environment Variable
51+
final String smartclideHome = System.getenv(SMARTCLIDE_HOME_VAR_NAME);
52+
if (smartclideHome != null && Files.isDirectory(Paths.get(smartclideHome))) {
53+
baseDirPath = Path.of(smartclideHome);
54+
} else if (Files.isDirectory(Paths.get(BASE_DIR_LINUX))) {
55+
// Linux config directory
56+
baseDirPath = Path.of(BASE_DIR_LINUX);
57+
} else if (Files.isDirectory(Paths.get(BASE_DIR_LINUX_ALTERNATIVE))) {
58+
// alternative Linux config directory
59+
baseDirPath = Path.of(BASE_DIR_LINUX_ALTERNATIVE);
60+
} else if (Files.isDirectory(Paths.get(BASE_DIR_WINDOWS))) {
61+
// Windows Config Directories
62+
baseDirPath = Path.of(BASE_DIR_WINDOWS);
63+
} else {
64+
// not in production, use local target/test-classes folder in current working directory
65+
baseDirPath = Path.of("", "target", "test-classes");
66+
}
67+
68+
checkIfDirectoryExists(baseDirPath.toAbsolutePath(), "base");
69+
70+
return baseDirPath;
71+
}
72+
73+
private static void createDirectoryIfNotExists(final Path path, final String name) {
74+
if (!Files.isDirectory(path)) {
75+
try {
76+
Files.createDirectory(path);
77+
} catch (IOException e) {
78+
LOGGER.error(String.format("Failed to create %s directory for Context Handling: %s", name, path));
79+
}
80+
}
81+
checkIfDirectoryExists(path, name);
82+
}
83+
84+
private static void checkIfDirectoryExists(final Path path, final String name) {
85+
if (!Files.isDirectory(path)) {
86+
final String message = String.format("The %s directory %s for Context Handling does not exist!", name, path);
87+
LOGGER.error(message);
88+
throw new RuntimeException(message);
89+
}
90+
}
91+
}

context-core/src/main/java/de/atb/context/persistence/common/Repository.java

+11-9
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,19 @@
1414
* #L%
1515
*/
1616

17+
import java.io.File;
18+
import java.nio.file.Path;
19+
import java.util.ArrayList;
20+
import java.util.HashMap;
21+
import java.util.List;
22+
import java.util.Map;
23+
1724
import com.hp.hpl.jena.ontology.OntModel;
1825
import com.hp.hpl.jena.ontology.OntModelSpec;
1926
import com.hp.hpl.jena.query.Dataset;
2027
import com.hp.hpl.jena.rdf.model.Model;
2128
import com.hp.hpl.jena.rdf.model.ModelFactory;
29+
import de.atb.context.common.ContextPathUtils;
2230
import de.atb.context.common.util.ApplicationScenario;
2331
import de.atb.context.common.util.BusinessCase;
2432
import de.atb.context.common.util.IApplicationScenarioProvider;
@@ -30,12 +38,6 @@
3038
import org.slf4j.Logger;
3139
import org.slf4j.LoggerFactory;
3240

33-
import java.io.File;
34-
import java.util.ArrayList;
35-
import java.util.HashMap;
36-
import java.util.List;
37-
import java.util.Map;
38-
3941
/**
4042
* Repository
4143
*
@@ -128,9 +130,9 @@ protected final synchronized String getLocationForBusinessCase(
128130
return Repository.getLocationForBusinessCase(this.basicLocation, bc);
129131
}
130132

131-
protected static synchronized String getLocationForBusinessCase(
132-
final String baseUri, final BusinessCase bc) {
133-
return String.format("%s%s%s%s%s", ".", File.separator, baseUri, File.separator, bc);
133+
protected static synchronized String getLocationForBusinessCase(final String baseUri, final BusinessCase bc) {
134+
final Path dataDirPath = ContextPathUtils.getDataDirPath();
135+
return String.format("%s%s%s%s%s", dataDirPath, File.separator, baseUri, File.separator, bc);
134136
}
135137

136138
protected abstract void shuttingDown();

smartclide-monitoring/src/main/java/eu/smartclide/contexthandling/ServiceMain.java

+43-82
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,17 @@
1414
* #L%
1515
*/
1616

17-
import java.io.IOException;
1817
import java.nio.charset.StandardCharsets;
1918
import java.nio.file.Files;
2019
import java.nio.file.Path;
21-
import java.nio.file.Paths;
22-
import java.util.Objects;
2320
import java.util.Properties;
2421

22+
import de.atb.context.common.ContextPathUtils;
2523
import de.atb.context.monitoring.models.IMonitoringDataModel;
2624
import de.atb.context.services.AmIMonitoringService;
2725
import de.atb.context.services.IAmIMonitoringDataRepositoryService;
2826
import de.atb.context.services.IAmIMonitoringService;
2927
import de.atb.context.services.SWServiceContainer;
30-
import de.atb.context.services.faults.ContextFault;
3128
import de.atb.context.services.manager.ServiceManager;
3229
import de.atb.context.services.wrapper.AmIMonitoringDataRepositoryServiceWrapper;
3330
import de.atb.context.tools.ontology.AmIMonitoringConfiguration;
@@ -36,91 +33,55 @@
3633

3734
public class ServiceMain {
3835

39-
private static final Logger logger = LoggerFactory.getLogger(ServiceMain.class);
40-
private static IAmIMonitoringService service;
41-
// TODO addDataModel as parameter as soon as this is defined for SmartCLIDE
42-
private static AmIMonitoringDataRepositoryServiceWrapper monitoringDataRepository;
43-
private static IAmIMonitoringDataRepositoryService<IMonitoringDataModel<?, ?>> reposService;
36+
private static final Logger LOGGER = LoggerFactory.getLogger(ServiceMain.class);
37+
private static final String SMARTCLIDE = "SMARTCLIDE";
38+
private static final String MONITORING_CONFIG_FILE_NAME = "monitoring-config.xml";
39+
private static final String SERVICES_CONFIG_FILE_NAME = "services-config.xml";
40+
private static final String AMI_REPOSITORY_ID = "AmI-repository";
4441

45-
private static void initialize() {
46-
Properties props = System.getProperties();
47-
props.setProperty("org.apache.cxf.stax.allowInsecureParser", "true");
48-
49-
Path smartclideConfigPath = Path.of("resources");
50-
51-
// Environment Variable
52-
String smartclideHome = System.getenv("SMARTCLIDE_HOME");
53-
if (smartclideHome != null && Files.isDirectory(Paths.get(smartclideHome))) {
54-
smartclideConfigPath = Path.of(smartclideHome, "config");
55-
// Linux config directory /var/lib/smartclide
56-
} else if (Files.isDirectory(Paths.get("/var/lib/smartclide"))) {
57-
smartclideConfigPath = Path.of("/var/lib/smartclide", "config");
58-
// Linux config directory /opt/smartclide/config
59-
} else if (Files.isDirectory(Paths.get("/opt/smartclide"))) {
60-
smartclideConfigPath = Path.of("/opt/smartclide", "config");
61-
// Windows Config Directories
62-
} else if (Files.isDirectory(Paths.get("C:\\ProgramData\\smartclide"))) {
63-
smartclideConfigPath = Path.of("C:\\ProgramData\\smartclide", "config");
64-
} else {
65-
// check if default folder exist
66-
if (!Files.isDirectory(smartclideConfigPath)) {
67-
logger.error("The config directory for the SmartCLIDE Context Handling does not exist!");
68-
System.exit(1);
69-
}
70-
}
71-
72-
73-
AmIMonitoringConfiguration amiConfig = new AmIMonitoringConfiguration();
74-
amiConfig.setId("SMARTCLIDE");
75-
amiConfig.setServiceConfiguration(readFile(smartclideConfigPath.resolve("monitoring-config.xml").toString()));
76-
77-
SWServiceContainer serviceContainer =
78-
new SWServiceContainer("AmI-repository", smartclideConfigPath.resolve("services-config.xml").toString());
79-
ServiceManager.getLSWServiceContainer().add(serviceContainer);
80-
ServiceManager.registerWebservice(serviceContainer);
81-
82-
for (SWServiceContainer container : ServiceManager.getLSWServiceContainer()) {
83-
if (Objects.requireNonNull(container.getServerClass())
84-
.toString()
85-
.contains("AmIMonitoringDataRepository")) {
86-
reposService = ServiceManager.getWebservice(container);
87-
}
88-
}
89-
90-
ServiceManager.registerWebservice(AmIMonitoringService.class);
91-
service = ServiceManager.getWebservice(IAmIMonitoringService.class);
92-
service.configureService(amiConfig);
93-
}
94-
95-
private static String readFile(String filename) {
96-
try {
97-
return Files.readString(Path.of(filename), StandardCharsets.UTF_8);
98-
} catch (IOException e) {
99-
logger.error(e.getMessage(), e);
100-
return "";
101-
}
102-
}
103-
104-
private static void startService() {
42+
public static void startService() {
10543
// start monitoring service (the repository is implicitly started from within the monitoring service)
10644
try {
45+
final Properties props = System.getProperties();
46+
props.setProperty("org.apache.cxf.stax.allowInsecureParser", "true");
47+
48+
final Path configDirPath = ContextPathUtils.getConfigDirPath();
49+
50+
final Path serviceConfigFilePath = configDirPath.resolve(SERVICES_CONFIG_FILE_NAME);
51+
final SWServiceContainer serviceContainer =
52+
new SWServiceContainer(AMI_REPOSITORY_ID, serviceConfigFilePath.toString());
53+
ServiceManager.getLSWServiceContainer().add(serviceContainer);
54+
ServiceManager.registerWebservice(serviceContainer);
55+
56+
final SWServiceContainer repositoryServiceContainer = ServiceManager.getLSWServiceContainer().stream()
57+
.filter(container -> container.getId().equals(AMI_REPOSITORY_ID))
58+
.findFirst()
59+
.orElseThrow(() -> new RuntimeException("Service could not be started, repository service is null"));
60+
61+
final IAmIMonitoringDataRepositoryService<IMonitoringDataModel<?, ?>> repositoryService =
62+
ServiceManager.getWebservice(repositoryServiceContainer);
63+
final AmIMonitoringDataRepositoryServiceWrapper<IMonitoringDataModel<?, ?>> monitoringDataRepository =
64+
new AmIMonitoringDataRepositoryServiceWrapper<>(repositoryService);
65+
LOGGER.debug(monitoringDataRepository.ping());
66+
67+
final Path monitoringConfigFilePath = configDirPath.resolve(MONITORING_CONFIG_FILE_NAME);
68+
final String monitoringConfig = Files.readString(monitoringConfigFilePath, StandardCharsets.UTF_8);
69+
final AmIMonitoringConfiguration amiConfig = new AmIMonitoringConfiguration();
70+
amiConfig.setId(SMARTCLIDE);
71+
amiConfig.setServiceConfiguration(monitoringConfig);
72+
73+
ServiceManager.registerWebservice(AmIMonitoringService.class);
74+
final IAmIMonitoringService service = ServiceManager.getWebservice(IAmIMonitoringService.class);
75+
service.configureService(amiConfig);
76+
77+
// TODO: add DleGitMonitorProgressListener as progress listener in GitMonitor
10778
service.start();
108-
} catch (ContextFault e) {
109-
logger.error(e.getMessage(), e);
79+
} catch (Exception e) {
80+
throw new RuntimeException(e);
11081
}
11182
}
11283

11384
public static void main(String[] args) {
114-
initialize();
115-
116-
// TODO: add DleGitMonitorProgressListener as progress listener in GitMonitor
117-
118-
if (reposService != null) {
119-
monitoringDataRepository = new AmIMonitoringDataRepositoryServiceWrapper(reposService);
120-
logger.debug(monitoringDataRepository.ping());
121-
startService();
122-
} else {
123-
logger.error("Service could not be started, repository service is null");
124-
}
85+
startService();
12586
}
12687
}

0 commit comments

Comments
 (0)