]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.init/src/org/argeo/init/osgi/OsgiRuntimeContext.java
Make logging configurable
[lgpl/argeo-commons.git] / org.argeo.init / src / org / argeo / init / osgi / OsgiRuntimeContext.java
1 package org.argeo.init.osgi;
2
3 import java.util.Map;
4 import java.util.Optional;
5 import java.util.ServiceLoader;
6
7 import org.argeo.init.RuntimeContext;
8 import org.osgi.framework.BundleContext;
9 import org.osgi.framework.BundleException;
10 import org.osgi.framework.launch.Framework;
11 import org.osgi.framework.launch.FrameworkFactory;
12
13 public class OsgiRuntimeContext implements RuntimeContext {
14 private Map<String, String> config;
15 private Framework framework;
16 private OsgiBoot osgiBoot;
17
18 public OsgiRuntimeContext(Map<String, String> config) {
19 this.config = config;
20 }
21
22 @Override
23 public void run() {
24 ServiceLoader<FrameworkFactory> sl = ServiceLoader.load(FrameworkFactory.class);
25 Optional<FrameworkFactory> opt = sl.findFirst();
26 if (opt.isEmpty())
27 throw new IllegalStateException("Cannot find OSGi framework");
28 framework = opt.get().newFramework(config);
29 try {
30 framework.start();
31 BundleContext bundleContext = framework.getBundleContext();
32 osgiBoot = new OsgiBoot(bundleContext);
33 osgiBoot.bootstrap();
34 } catch (BundleException e) {
35 throw new IllegalStateException("Cannot start OSGi framework", e);
36 }
37 }
38
39 @Override
40 public void waitForStop(long timeout) throws InterruptedException {
41 if (framework == null)
42 throw new IllegalStateException("Framework is not initialised");
43 framework.waitForStop(timeout);
44 }
45
46 @Override
47 public void close() throws Exception {
48 if (framework != null)
49 framework.stop();
50 }
51
52 }