From 57c03d33238d15e5a1263761ffd3d21d81179023 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Wed, 6 Apr 2016 13:25:49 +0300 Subject: [PATCH] ASysCore: Init module --- core/pom.xml | 37 ++++++-- .../java/eu/arcadex/system/core/ASysCore.java | 93 +++++++++++++++++++ .../system/core/ASysCoreActivator.java | 30 ++++++ .../eu/arcadex/system/core/api/ICore.java | 9 ++ pom.xml | 46 ++------- 5 files changed, 173 insertions(+), 42 deletions(-) create mode 100644 core/src/main/java/eu/arcadex/system/core/ASysCore.java create mode 100644 core/src/main/java/eu/arcadex/system/core/ASysCoreActivator.java create mode 100644 core/src/main/java/eu/arcadex/system/core/api/ICore.java diff --git a/core/pom.xml b/core/pom.xml index d0223ea..194b27b 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -1,14 +1,39 @@ - + + 4.0.0 + Core + + core + 0.1-SNAPSHOT + bundle + arcadexsystem eu.arcadex.system ${global.version} - 4.0.0 - core - jar + + ${groupId}.${artifactId}-${version} + + + org.apache.felix + maven-bundle-plugin + 2.3.5 + true + + + Arcadex System: ${name} ${version} + ${groupId}.${artifactId} + eu.arcadex.system.core.ASysCoreActivator + eu.arcadex.system.core.api + * + + + + + \ No newline at end of file diff --git a/core/src/main/java/eu/arcadex/system/core/ASysCore.java b/core/src/main/java/eu/arcadex/system/core/ASysCore.java new file mode 100644 index 0000000..0662951 --- /dev/null +++ b/core/src/main/java/eu/arcadex/system/core/ASysCore.java @@ -0,0 +1,93 @@ +package eu.arcadex.system.core; + +import eu.arcadex.system.core.api.ICore; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * @author DmitriyMX + * 2016 + */ +class ASysCore implements ICore { + private Logger logger = LoggerFactory.getLogger(ASysCore.class.getName()); + private BundleContext bundleContext; + private List modules; + + ASysCore(BundleContext bundleContext) { + this.bundleContext = bundleContext; + } + + void init() { + // Загрузка библиотек + logger.trace("Load libraries"); + startBundles(loadJars("lib")); + + // Загрузка модулей + logger.trace("Load modules"); + modules = loadJars("modules"); + startBundles(modules); + } + + private List loadJars(String directory) { + List bundlesList = new ArrayList<>(); + + File libsDir = new File(directory); + String[] jarsList = libsDir.list(); + for (String jar : jarsList) { + if (!jar.endsWith(".jar")) continue; + try { + logger.trace("Load jar \"{}/{}\"", directory, jar); + Bundle bundle = bundleContext.installBundle(String.format("file:%s/%s", directory, jar)); + bundlesList.add(bundle); + } catch (BundleException e) { + logger.error(String.format("Error load jar \"%s/%s\"", directory, jar), e); + } + } + + return bundlesList; + } + + private void startBundles(List bundleList) { + for (Bundle bundle : bundleList) { + try { + logger.trace("Start module \"{}\"", bundle.getSymbolicName()); + bundle.start(); + } catch (BundleException e) { + logger.error(String.format("Error start bundle \"%s\"", bundle.getSymbolicName()), e); + } + } + } + + private void stopBundles(List bundleList) { + for (Bundle bundle : bundleList) { + try { + bundle.stop(); + } catch (BundleException e) { + logger.error(String.format("Error stop bundle \"%s\"", bundle.getSymbolicName()), e); + } + } + } + + @Override + public void reloadMoludes() { + logger.trace("Reload modules - start"); + + // Остановка модулей + stopBundles(modules); + + // Загрузка модулей по-новой + modules = loadJars("modules"); + + // Запуск модулей + startBundles(modules); + + logger.trace("Reload modules - end"); + } +} diff --git a/core/src/main/java/eu/arcadex/system/core/ASysCoreActivator.java b/core/src/main/java/eu/arcadex/system/core/ASysCoreActivator.java new file mode 100644 index 0000000..b6e315e --- /dev/null +++ b/core/src/main/java/eu/arcadex/system/core/ASysCoreActivator.java @@ -0,0 +1,30 @@ +package eu.arcadex.system.core; + +import eu.arcadex.system.core.api.ICore; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; + +/** + * @author DmitriyMX + * 2016 + */ +public class ASysCoreActivator implements BundleActivator { + private ServiceRegistration service; + + @Override + public void start(BundleContext bundleContext) throws Exception { + ASysCore core = new ASysCore(bundleContext); + + // Регистрация сервиса доступа к Ядру + service = bundleContext.registerService(ICore.class.getName(), core, null); + + // Инициализация Ядра + core.init(); + } + + @Override + public void stop(BundleContext bundleContext) throws Exception { + service.unregister(); + } +} diff --git a/core/src/main/java/eu/arcadex/system/core/api/ICore.java b/core/src/main/java/eu/arcadex/system/core/api/ICore.java new file mode 100644 index 0000000..da2da0d --- /dev/null +++ b/core/src/main/java/eu/arcadex/system/core/api/ICore.java @@ -0,0 +1,9 @@ +package eu.arcadex.system.core.api; + +/** + * @author DmitriyMX + * 2016 + */ +public interface ICore { + void reloadMoludes(); +} diff --git a/pom.xml b/pom.xml index 5d670d8..492fa31 100644 --- a/pom.xml +++ b/pom.xml @@ -3,9 +3,11 @@ xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + Arcadex System 0.1 + UTF-8 eu.arcadex.system @@ -43,47 +45,19 @@ 1.8 - - org.apache.maven.plugins - maven-shade-plugin - 2.1 - - - package - - shade - - - - - - - *:* - - **/*.java - **/*.SF - **/*.DSA - - - - - - - eu.arcadex.system.ArcadexSystemImpl - - - - - org.projectlombok - lombok - 1.16.2 - provided + org.slf4j + slf4j-api + 1.7.20 + + + org.osgi + org.osgi.core + 6.0.0 \ No newline at end of file