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();
+ }
+}