简单的Hello World使用Akka Actors演示OSGi?

时间:2013-11-06 19:18:55

标签: scala osgi akka apache-felix

我想创建一个非常简单的(Hello Simple World)POC,它展示了将OSGi(Felix)与Scala和Actors(Akka)集成的能力。以下是我到目前为止的情况:

$ tree
.
├── bin
│   └── felix.jar
├── bundle
│   └── akka-osgi_2.10-2.2.1.jar
├── conf
    └── config.properties

$ cat conf/config.properties
org.osgi.framework.storage.clean: onFirstInit
org.osgi.framework.system.packages.extra: javafx
org.osgi.framework.bootdelegation: sun.misc
felix.auto.deploy.action=install,start
felix.log.level=1
org.osgi.service.http.port=8080
obr.repository.url=http://felix.apache.org/obr/releases.xml

$ java -jar bin/felix.jar
ERROR: Bundle com.typesafe.akka.osgi [1] Error starting file:/home/axiopisty/projects/test/bundle/akka-osgi_2.10-2.2.1.jar (org.osgi.framework.BundleException: Unresolved constraint in bundle com.typesafe.akka.osgi [1]: Unable to resolve 1.0: missing requirement [1.0] osgi.wiring.package; (&(osgi.wiring.package=com.typesafe.config)(version>=0.4.1)(!(version>=1.1.0))))
org.osgi.framework.BundleException: Unresolved constraint in bundle com.typesafe.akka.osgi [1]: Unable to resolve 1.0: missing requirement [1.0] osgi.wiring.package; (&(osgi.wiring.package=com.typesafe.config)(version>=0.4.1)(!(version>=1.1.0)))
        at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3974)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2037)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1291)
        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
        at java.lang.Thread.run(Thread.java:744)

我从此错误消息中了解到没有导出osgi.wiring.package的捆绑包。但我不知道我需要包含哪个包来导出该包。它会来自Akka,来自Felix,还是来自其他地方?

从提供的config.properties中可以看出,我试图按照akka文档中有关如何Configure the OSGi Framework的说明,但我不知道我是否正在做他们所说的需要做的事情以正确的方式。

akka文档说:

  

要在OSGi环境中使用Akka,   org.osgi.framework.bootdelegation属性必须设置为always   将sun.misc包委托给引导类加载器而不是   通过正常的OSGi类空间解析它。

如何使用Felix作为OSGi容器,并使用默认的felix启动器?

一个简单的hello world示例使用OSGi(Felix不是必需的,但是首选)和Akka Actors是我正在寻找的理想选择。如果你知道github(或其他地方)的任何东西证明这一点,我也会接受这个答案。

3 个答案:

答案 0 :(得分:4)

Akka源代码树中有一个示例OSGi应用程序。希望你可以把它作为一个起点。它使用了Karaf。

https://github.com/akka/akka/tree/v2.2.3/akka-samples/akka-sample-osgi-dining-hakkers

确保检查稳定标记的代码,例如v2.2.3,以便构建工具使用已发布的Akka稳定工件。

答案 1 :(得分:1)

  

缺少要求[1.0] osgi.wiring.package; (及(osgi.wiring.package = com.typesafe.config)

从错误消息的这一部分看来,您的捆绑包似乎无法找到另一个提供com.typesafe.config的捆绑包,该捆绑包是akka的依赖关系。

您可以在创建捆绑包时使用Conditional-Package工具的bnd标头/说明来规避这一点。

答案 2 :(得分:-3)

我已经开始将基于Karaf的OSGi容器放在一起并在github上共享它。现在它只是将ActorSystem注册为服务,并使用该系统在其中包含一个带有Actor的演示包。它被配置为登录正常的karaf.log。

可以在github上找到代码示例。

祝你好运 安德烈亚斯