在OSGi中加载框架工厂

时间:2015-08-27 17:08:35

标签: java osgi apache-felix osgi-bundle

我正在尝试让Frame work factory在我的maven项目中加载OSGi包。我尝试过以下方法:

import org.osgi.framework.launch.FrameworkFactory;
public class Activator implements BundleActivator {
 public void start(BundleContext context) throws Exception {
  FrameworkFactory ff = ServiceLoader.load(FrameworkFactory.class).iterator().next();
 }
}

我的包中有jar org.apache.felix.framework-4.4.1.jar。 MANIFEST.MF条目:

...
Bundle-ClassPath: .,provider-0.0.1-SNAPSHOT.jar,org.apache.felix.framework-4.4.1.jar
...

但是我收到以下错误:我在felix容器中试过以下是错误:

java.util.NoSuchElementException
    at java.util.ServiceLoader$LazyIterator.next(Unknown Source)
    at java.util.ServiceLoader$1.next(Unknown Source)
    at com.xxxxx.consumer.Activator.start(Activator.java:23)
    at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2154)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2072)
    at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1299)
    at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
    at java.lang.Thread.run(Unknown Source)

请帮我解决这个问题。我想加载我的Bundle-Classpath中存在的OSGi包。

1 个答案:

答案 0 :(得分:2)

FrameworkFactory可用于在普通的旧Java应用程序中嵌入和启动OSGi框架。

您尝试在BundleActivator中使用它,只会在OSGi框架的上下文中调用它。

所以你将在另一个OSGi框架中启动一个OSGi框架,这可能不是你想要的。