【问题标题】:Loading framework factory in OSGi在 OSGi 中加载框架工厂
【发布时间】:2015-11-22 04:45:29
【问题描述】:

我正在尝试让 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 包。

【问题讨论】:

  • “我的 Bundle-ClassPath 中存在的 OSGi 包”。我认为你误解了一些基本的东西。您不会将捆绑包放在您自己的类路径中......如果您这样做,它们就不再是捆绑包了。

标签: java osgi apache-felix osgi-bundle


【解决方案1】:

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

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

因此,您将在另一个 OSGi 框架中启动一个 OSGi 框架,这可能不是您想要的。

【讨论】:

  • 感谢 hwellmann 和 Neil Bartlett。我明白你在说什么。
猜你喜欢
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
相关资源
最近更新 更多