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

标签 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 、菲利克斯,还是来自其他地方?

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

akka 文档说:

To use Akka in an OSGi environment, the org.osgi.framework.bootdelegation property must be set to always delegate the sun.misc package to the boot classloader instead of resolving it through the normal OSGi class space.



您如何使用 Felix 作为 OSGi 容器并使用默认的 felix 启动器来执行此操作?

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

最佳答案

Akka 源代码树中有一个示例 OSGi 应用程序。希望您可以将其用作起点。它使用 Karaf 。

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

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

关于scala - 使用 Akka Actors 演示 OSGi 的简单 Hello World?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19820852/

相关文章:

scala - Akka:向持久邮箱添加延迟

java - 从流构建模型(异常 : Reader not found on classpath)

java - 并行任务批处理的设计方法

akka - 从 akka 路由器检测远程节点的故障

kubernetes - 如何确定akka集群是否在kubernetes上运行?

Scala Akka Streams 项目无法编译, "value ~> is not a member of akka.streams.Outlet[In]"

scala - Spark mllib f1score 阈值

regex - Scala:标记简单算术表达式

java - LoggerFactory无法获取Logger

Scala 和 Akka - 使用 Akka Testkit 将 actor 作为系统进行测试