From 8d54ef0cd06cb129f08bf5182a198380a3cafbf4 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Thu, 2 Mar 2017 23:49:24 +0300 Subject: [PATCH] Embedded OSGi Apache Felix --- pom.xml | 74 +++++++++++++++++++++ src/main/java/asys/core/Core.java | 75 ++++++++++++++++++++++ src/main/java/asys/core/HostActivator.java | 24 +++++++ src/main/java/asys/core/Main.java | 12 ++++ 4 files changed, 185 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/asys/core/Core.java create mode 100644 src/main/java/asys/core/HostActivator.java create mode 100644 src/main/java/asys/core/Main.java diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..e34ebff --- /dev/null +++ b/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + ASys Core + + asys + asys-core + jar + 0.0-SNAPSHOT + + + + DmitriyMX + dimon550@gmail.com + + + + + UTF-8 + 1.8 + 1.7.21 + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + slf4j-simple + ${slf4j.version} + + + + org.apache.felix + org.apache.felix.framework + 5.6.1 + + + com.google.guava + guava + 21.0 + + + + + ${project.artifactId}-${project.version} + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.15 + + -Dfile.encoding=${project.build.sourceEncoding} + + + + + diff --git a/src/main/java/asys/core/Core.java b/src/main/java/asys/core/Core.java new file mode 100644 index 0000000..0043f8e --- /dev/null +++ b/src/main/java/asys/core/Core.java @@ -0,0 +1,75 @@ +/* + * DmitriyMX + * 2017-03-02 + */ +package asys.core; + +import org.apache.felix.framework.Felix; +import org.apache.felix.framework.util.ImmutableList; +import org.apache.felix.framework.util.ImmutableMap; +import org.osgi.framework.BundleActivator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.apache.felix.framework.util.FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP; + +public class Core { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private Felix felix; + private BundleActivator hostActivator; + + public Core() { + logger.trace("core created"); + } + + @PostConstruct + public void start() { + hostActivator = new HostActivator(); + startFelix(); + } + + private void startFelix() { + logger.trace("starting Apache Felix (OSGi)"); + + try { + felix = new Felix(createFelixConfig()); + felix.start(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private Map createFelixConfig() { + Map config = new HashMap<>(); + + config.put(SYSTEMBUNDLE_ACTIVATORS_PROP, ImmutableList.newInstance(this.hostActivator)); + config.put("felix.fileinstall.poll", 250); + config.put("felix.fileinstall.log.level", 2); + config.put("felix.fileinstall.noInitialDelay", true); + + return ImmutableMap.newInstance(config); + } + + @PreDestroy + public void stop() { + startFelix(); + } + + private void stopFelix() { + logger.trace("shutdown Apache Felix (OSGi)"); + + try { + felix.stop(); + felix.waitForStop(5000L); + } catch (Exception e) { + logger.error("Error shutdown Felix", e); + } + } +} diff --git a/src/main/java/asys/core/HostActivator.java b/src/main/java/asys/core/HostActivator.java new file mode 100644 index 0000000..3b2a9b2 --- /dev/null +++ b/src/main/java/asys/core/HostActivator.java @@ -0,0 +1,24 @@ +/* + * DmitriyMX + * 2017-03-02 + */ +package asys.core; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class HostActivator implements BundleActivator { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public void start(BundleContext bundleContext) throws Exception { + logger.trace("call [HostActivator.start(BundleContext)]"); + } + + @Override + public void stop(BundleContext bundleContext) throws Exception { + logger.trace("call [HostActivator.stop(BundleContext)]"); + } +} diff --git a/src/main/java/asys/core/Main.java b/src/main/java/asys/core/Main.java new file mode 100644 index 0000000..cfdd230 --- /dev/null +++ b/src/main/java/asys/core/Main.java @@ -0,0 +1,12 @@ +/* + * DmitriyMX + * 2017-03-02 + */ +package asys.core; + +public class Main { + public static void main(String[] args) { + Core asysCore = new Core(); + asysCore.start(); + } +}